bcachefs: Add an option to control sharding new inode numbers
We're seeing a bug where inode creates end up spinning in bch2_inode_create - disabling sharding will simplify what we're testing. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
committed by
Kent Overstreet
parent
9f311f2166
commit
b282a74fae
@@ -1348,6 +1348,7 @@ LE64_BITMASK(BCH_SB_GC_RESERVE_BYTES, struct bch_sb, flags[2], 4, 64);
|
|||||||
|
|
||||||
LE64_BITMASK(BCH_SB_ERASURE_CODE, struct bch_sb, flags[3], 0, 16);
|
LE64_BITMASK(BCH_SB_ERASURE_CODE, struct bch_sb, flags[3], 0, 16);
|
||||||
LE64_BITMASK(BCH_SB_METADATA_TARGET, struct bch_sb, flags[3], 16, 28);
|
LE64_BITMASK(BCH_SB_METADATA_TARGET, struct bch_sb, flags[3], 16, 28);
|
||||||
|
LE64_BITMASK(BCH_SB_SHARD_INUMS, struct bch_sb, flags[3], 28, 29);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Features:
|
* Features:
|
||||||
|
@@ -479,16 +479,23 @@ struct btree_iter *bch2_inode_create(struct btree_trans *trans,
|
|||||||
struct bkey_s_c k;
|
struct bkey_s_c k;
|
||||||
u64 min, max, start, pos, *hint;
|
u64 min, max, start, pos, *hint;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
unsigned bits = (c->opts.inodes_32bit ? 31 : 63);
|
||||||
|
|
||||||
u64 cpu = raw_smp_processor_id();
|
if (c->opts.shard_inode_numbers) {
|
||||||
unsigned bits = (c->opts.inodes_32bit
|
u64 cpu = raw_smp_processor_id();
|
||||||
? 31 : 63) - c->inode_shard_bits;
|
|
||||||
|
|
||||||
min = (cpu << bits);
|
bits -= c->inode_shard_bits;
|
||||||
max = (cpu << bits) | ~(ULLONG_MAX << bits);
|
|
||||||
|
|
||||||
min = max_t(u64, min, BLOCKDEV_INODE_MAX);
|
min = (cpu << bits);
|
||||||
hint = c->unused_inode_hints + cpu;
|
max = (cpu << bits) | ~(ULLONG_MAX << bits);
|
||||||
|
|
||||||
|
min = max_t(u64, min, BLOCKDEV_INODE_MAX);
|
||||||
|
hint = c->unused_inode_hints + cpu;
|
||||||
|
} else {
|
||||||
|
min = BLOCKDEV_INODE_MAX;
|
||||||
|
max = ~(ULLONG_MAX << bits);
|
||||||
|
hint = c->unused_inode_hints;
|
||||||
|
}
|
||||||
|
|
||||||
start = READ_ONCE(*hint);
|
start = READ_ONCE(*hint);
|
||||||
|
|
||||||
|
@@ -165,8 +165,13 @@ enum opt_type {
|
|||||||
x(inodes_32bit, u8, \
|
x(inodes_32bit, u8, \
|
||||||
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
|
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
|
||||||
OPT_BOOL(), \
|
OPT_BOOL(), \
|
||||||
BCH_SB_INODE_32BIT, false, \
|
BCH_SB_INODE_32BIT, true, \
|
||||||
NULL, "Constrain inode numbers to 32 bits") \
|
NULL, "Constrain inode numbers to 32 bits") \
|
||||||
|
x(shard_inode_numbers, u8, \
|
||||||
|
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
|
||||||
|
OPT_BOOL(), \
|
||||||
|
BCH_SB_SHARD_INUMS, false, \
|
||||||
|
NULL, "Shard new inode numbers by CPU id") \
|
||||||
x(gc_reserve_percent, u8, \
|
x(gc_reserve_percent, u8, \
|
||||||
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
|
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
|
||||||
OPT_UINT(5, 21), \
|
OPT_UINT(5, 21), \
|
||||||
|
Reference in New Issue
Block a user