bcachefs: Move bkey bkey_unpack_key() to bkey.h
Long ago, bkey_unpack_key() was added to bset.h instead of bkey.h because bkey.h didn't include btree_types.h, which it needs for the compiled unpack function. This patch finally moves it to the proper location. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
005def8ff1
commit
77671e8fff
@ -5,6 +5,7 @@
|
||||
#include <linux/bug.h>
|
||||
#include "bcachefs_format.h"
|
||||
|
||||
#include "btree_types.h"
|
||||
#include "util.h"
|
||||
#include "vstructs.h"
|
||||
|
||||
@ -365,6 +366,99 @@ void bch2_bkey_unpack(const struct btree *, struct bkey_i *,
|
||||
bool bch2_bkey_pack(struct bkey_packed *, const struct bkey_i *,
|
||||
const struct bkey_format *);
|
||||
|
||||
typedef void (*compiled_unpack_fn)(struct bkey *, const struct bkey_packed *);
|
||||
|
||||
static inline void
|
||||
__bkey_unpack_key_format_checked(const struct btree *b,
|
||||
struct bkey *dst,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
if (IS_ENABLED(HAVE_BCACHEFS_COMPILED_UNPACK)) {
|
||||
compiled_unpack_fn unpack_fn = b->aux_data;
|
||||
unpack_fn(dst, src);
|
||||
|
||||
if (IS_ENABLED(CONFIG_BCACHEFS_DEBUG) &&
|
||||
bch2_expensive_debug_checks) {
|
||||
struct bkey dst2 = __bch2_bkey_unpack_key(&b->format, src);
|
||||
|
||||
BUG_ON(memcmp(dst, &dst2, sizeof(*dst)));
|
||||
}
|
||||
} else {
|
||||
*dst = __bch2_bkey_unpack_key(&b->format, src);
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct bkey
|
||||
bkey_unpack_key_format_checked(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
struct bkey dst;
|
||||
|
||||
__bkey_unpack_key_format_checked(b, &dst, src);
|
||||
return dst;
|
||||
}
|
||||
|
||||
static inline void __bkey_unpack_key(const struct btree *b,
|
||||
struct bkey *dst,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
if (likely(bkey_packed(src)))
|
||||
__bkey_unpack_key_format_checked(b, dst, src);
|
||||
else
|
||||
*dst = *packed_to_bkey_c(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* bkey_unpack_key -- unpack just the key, not the value
|
||||
*/
|
||||
static inline struct bkey bkey_unpack_key(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
return likely(bkey_packed(src))
|
||||
? bkey_unpack_key_format_checked(b, src)
|
||||
: *packed_to_bkey_c(src);
|
||||
}
|
||||
|
||||
static inline struct bpos
|
||||
bkey_unpack_pos_format_checked(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
#ifdef HAVE_BCACHEFS_COMPILED_UNPACK
|
||||
return bkey_unpack_key_format_checked(b, src).p;
|
||||
#else
|
||||
return __bkey_unpack_pos(&b->format, src);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct bpos bkey_unpack_pos(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
return likely(bkey_packed(src))
|
||||
? bkey_unpack_pos_format_checked(b, src)
|
||||
: packed_to_bkey_c(src)->p;
|
||||
}
|
||||
|
||||
/* Disassembled bkeys */
|
||||
|
||||
static inline struct bkey_s_c bkey_disassemble(struct btree *b,
|
||||
const struct bkey_packed *k,
|
||||
struct bkey *u)
|
||||
{
|
||||
__bkey_unpack_key(b, u, k);
|
||||
|
||||
return (struct bkey_s_c) { u, bkeyp_val(&b->format, k), };
|
||||
}
|
||||
|
||||
/* non const version: */
|
||||
static inline struct bkey_s __bkey_disassemble(struct btree *b,
|
||||
struct bkey_packed *k,
|
||||
struct bkey *u)
|
||||
{
|
||||
__bkey_unpack_key(b, u, k);
|
||||
|
||||
return (struct bkey_s) { .k = u, .v = bkeyp_val(&b->format, k), };
|
||||
}
|
||||
|
||||
static inline u64 bkey_field_max(const struct bkey_format *f,
|
||||
enum bch_bkey_fields nr)
|
||||
{
|
||||
|
@ -3,6 +3,7 @@
|
||||
#define _BCACHEFS_BKEY_BUF_H
|
||||
|
||||
#include "bcachefs.h"
|
||||
#include "bkey.h"
|
||||
|
||||
struct bkey_buf {
|
||||
struct bkey_i *k;
|
||||
|
@ -205,99 +205,6 @@ static inline size_t btree_aux_data_u64s(const struct btree *b)
|
||||
return btree_aux_data_bytes(b) / sizeof(u64);
|
||||
}
|
||||
|
||||
typedef void (*compiled_unpack_fn)(struct bkey *, const struct bkey_packed *);
|
||||
|
||||
static inline void
|
||||
__bkey_unpack_key_format_checked(const struct btree *b,
|
||||
struct bkey *dst,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
if (IS_ENABLED(HAVE_BCACHEFS_COMPILED_UNPACK)) {
|
||||
compiled_unpack_fn unpack_fn = b->aux_data;
|
||||
unpack_fn(dst, src);
|
||||
|
||||
if (IS_ENABLED(CONFIG_BCACHEFS_DEBUG) &&
|
||||
bch2_expensive_debug_checks) {
|
||||
struct bkey dst2 = __bch2_bkey_unpack_key(&b->format, src);
|
||||
|
||||
BUG_ON(memcmp(dst, &dst2, sizeof(*dst)));
|
||||
}
|
||||
} else {
|
||||
*dst = __bch2_bkey_unpack_key(&b->format, src);
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct bkey
|
||||
bkey_unpack_key_format_checked(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
struct bkey dst;
|
||||
|
||||
__bkey_unpack_key_format_checked(b, &dst, src);
|
||||
return dst;
|
||||
}
|
||||
|
||||
static inline void __bkey_unpack_key(const struct btree *b,
|
||||
struct bkey *dst,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
if (likely(bkey_packed(src)))
|
||||
__bkey_unpack_key_format_checked(b, dst, src);
|
||||
else
|
||||
*dst = *packed_to_bkey_c(src);
|
||||
}
|
||||
|
||||
/**
|
||||
* bkey_unpack_key -- unpack just the key, not the value
|
||||
*/
|
||||
static inline struct bkey bkey_unpack_key(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
return likely(bkey_packed(src))
|
||||
? bkey_unpack_key_format_checked(b, src)
|
||||
: *packed_to_bkey_c(src);
|
||||
}
|
||||
|
||||
static inline struct bpos
|
||||
bkey_unpack_pos_format_checked(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
#ifdef HAVE_BCACHEFS_COMPILED_UNPACK
|
||||
return bkey_unpack_key_format_checked(b, src).p;
|
||||
#else
|
||||
return __bkey_unpack_pos(&b->format, src);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct bpos bkey_unpack_pos(const struct btree *b,
|
||||
const struct bkey_packed *src)
|
||||
{
|
||||
return likely(bkey_packed(src))
|
||||
? bkey_unpack_pos_format_checked(b, src)
|
||||
: packed_to_bkey_c(src)->p;
|
||||
}
|
||||
|
||||
/* Disassembled bkeys */
|
||||
|
||||
static inline struct bkey_s_c bkey_disassemble(struct btree *b,
|
||||
const struct bkey_packed *k,
|
||||
struct bkey *u)
|
||||
{
|
||||
__bkey_unpack_key(b, u, k);
|
||||
|
||||
return (struct bkey_s_c) { u, bkeyp_val(&b->format, k), };
|
||||
}
|
||||
|
||||
/* non const version: */
|
||||
static inline struct bkey_s __bkey_disassemble(struct btree *b,
|
||||
struct bkey_packed *k,
|
||||
struct bkey *u)
|
||||
{
|
||||
__bkey_unpack_key(b, u, k);
|
||||
|
||||
return (struct bkey_s) { .k = u, .v = bkeyp_val(&b->format, k), };
|
||||
}
|
||||
|
||||
#define for_each_bset(_b, _t) \
|
||||
for (_t = (_b)->set; _t < (_b)->set + (_b)->nsets; _t++)
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "bcachefs.h"
|
||||
#include "btree_types.h"
|
||||
#include "bkey_methods.h"
|
||||
|
||||
extern const char * const bch2_btree_node_flags[];
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/rhashtable.h>
|
||||
|
||||
#include "bkey_methods.h"
|
||||
//#include "bkey_methods.h"
|
||||
#include "buckets_types.h"
|
||||
#include "darray.h"
|
||||
#include "journal_types.h"
|
||||
|
@ -229,8 +229,6 @@ int bch2_trans_mark_inode(struct btree_trans *, enum btree_id, unsigned, struct
|
||||
int bch2_trans_mark_reservation(struct btree_trans *, enum btree_id, unsigned, struct bkey_s_c, struct bkey_i *, unsigned);
|
||||
int bch2_trans_mark_reflink_p(struct btree_trans *, enum btree_id, unsigned, struct bkey_s_c, struct bkey_i *, unsigned);
|
||||
|
||||
int bch2_mark_key(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned);
|
||||
|
||||
int bch2_trans_fs_usage_apply(struct btree_trans *, struct replicas_delta_list *);
|
||||
|
||||
int bch2_trans_mark_metadata_bucket(struct btree_trans *, struct bch_dev *,
|
||||
|
@ -2,6 +2,7 @@
|
||||
#ifndef _BCACHEFS_INODE_H
|
||||
#define _BCACHEFS_INODE_H
|
||||
|
||||
#include "bkey.h"
|
||||
#include "opts.h"
|
||||
|
||||
extern const char * const bch2_inode_opts[];
|
||||
|
@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include "bcachefs.h"
|
||||
#include "bkey.h"
|
||||
#include "keylist.h"
|
||||
|
||||
int bch2_keylist_realloc(struct keylist *l, u64 *inline_u64s,
|
||||
|
@ -2,6 +2,7 @@
|
||||
#ifndef _BCACHEFS_REPLICAS_H
|
||||
#define _BCACHEFS_REPLICAS_H
|
||||
|
||||
#include "bkey.h"
|
||||
#include "eytzinger.h"
|
||||
#include "replicas_types.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user