summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/bcachefs_format.h1
-rw-r--r--fs/bcachefs/inode.c17
-rw-r--r--fs/bcachefs/opts.h5
3 files changed, 16 insertions, 7 deletions
diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h
index 24853bd8923b5..e6be594fd0be8 100644
--- a/fs/bcachefs/bcachefs_format.h
+++ b/fs/bcachefs/bcachefs_format.h
@@ -1350,6 +1350,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_METADATA_TARGET, struct bch_sb, flags[3], 16, 28);
LE64_BITMASK(BCH_SB_SHARD_INUMS, struct bch_sb, flags[3], 28, 29);
+LE64_BITMASK(BCH_SB_INODES_USE_KEY_CACHE,struct bch_sb, flags[3], 29, 30);
/*
* Features:
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
index 565aebba30e60..8c6627907431d 100644
--- a/fs/bcachefs/inode.c
+++ b/fs/bcachefs/inode.c
@@ -300,8 +300,10 @@ struct btree_iter *bch2_inode_peek(struct btree_trans *trans,
struct bkey_s_c k;
int ret;
- iter = bch2_trans_get_iter(trans, BTREE_ID_inodes, POS(0, inum),
- BTREE_ITER_CACHED|flags);
+ if (trans->c->opts.inodes_use_key_cache)
+ flags |= BTREE_ITER_CACHED;
+
+ iter = bch2_trans_get_iter(trans, BTREE_ID_inodes, POS(0, inum), flags);
k = bch2_btree_iter_peek_slot(iter);
ret = bkey_err(k);
if (ret)
@@ -577,8 +579,12 @@ int bch2_inode_rm(struct bch_fs *c, u64 inode_nr, bool cached)
struct bpos end = POS(inode_nr + 1, 0);
struct bch_inode_unpacked inode_u;
struct bkey_s_c k;
+ unsigned iter_flags = BTREE_ITER_INTENT;
int ret;
+ if (cached && c->opts.inodes_use_key_cache)
+ iter_flags |= BTREE_ITER_CACHED;
+
bch2_trans_init(&trans, c, 0, 1024);
/*
@@ -600,11 +606,8 @@ int bch2_inode_rm(struct bch_fs *c, u64 inode_nr, bool cached)
retry:
bch2_trans_begin(&trans);
- iter = bch2_trans_get_iter(&trans, BTREE_ID_inodes, POS(0, inode_nr),
- (cached
- ? BTREE_ITER_CACHED
- : BTREE_ITER_SLOTS)|
- BTREE_ITER_INTENT);
+ iter = bch2_trans_get_iter(&trans, BTREE_ID_inodes,
+ POS(0, inode_nr), iter_flags);
k = bch2_btree_iter_peek_slot(iter);
ret = bkey_err(k);
diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h
index 707659e31893a..2cba0e137b589 100644
--- a/fs/bcachefs/opts.h
+++ b/fs/bcachefs/opts.h
@@ -173,6 +173,11 @@ enum opt_type {
OPT_BOOL(), \
BCH_SB_SHARD_INUMS, false, \
NULL, "Shard new inode numbers by CPU id") \
+ x(inodes_use_key_cache, u8, \
+ OPT_FORMAT|OPT_MOUNT, \
+ OPT_BOOL(), \
+ BCH_SB_INODES_USE_KEY_CACHE, true, \
+ NULL, "Use the btree key cache for the inodes btree") \
x(gc_reserve_percent, u8, \
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
OPT_UINT(5, 21), \