diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2022-10-28 23:57:01 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:04 -0400 |
commit | af171183194f73cca9a2f44ba13907ecc9c761a9 (patch) | |
tree | d7d2d64bfa424ad5142801d46bf231794a10339d /fs/bcachefs/io.c | |
parent | 7e94eeffe0e79a54e525ad05302eb454fb96affd (diff) |
bcachefs: Kill bch_write_op.index_update_fn
This deletes bch_write_op.index_update_fn: indirect function calls have
gotten considerably more expensive post spectre/meltdown, and we only
have two different index_update_fns - this patch adds a flag to specify
which one to use (normal vs. data move path).
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/io.c')
-rw-r--r-- | fs/bcachefs/io.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index bf59875db546..1b457e90a172 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -432,7 +432,7 @@ int bch2_fpunch(struct bch_fs *c, u64 inum, u64 start, u64 end, return ret; } -int bch2_write_index_default(struct bch_write_op *op) +static int bch2_write_index_default(struct bch_write_op *op) { struct bch_fs *c = op->c; struct bkey_buf sk; @@ -577,7 +577,7 @@ static void __bch2_write_index(struct bch_write_op *op) struct bch_extent_ptr *ptr; struct bkey_i *src, *dst = keys->keys, *n, *k; unsigned dev; - int ret; + int ret = 0; for (src = keys->keys; src != keys->top; src = n) { n = bkey_next(src); @@ -614,7 +614,10 @@ static void __bch2_write_index(struct bch_write_op *op) if (!bch2_keylist_empty(keys)) { u64 sectors_start = keylist_sectors(keys); - int ret = op->index_update_fn(op); + + ret = !(op->flags & BCH_WRITE_MOVE) + ? bch2_write_index_default(op) + : bch2_migrate_index_update(op); BUG_ON(ret == -EINTR); BUG_ON(keylist_sectors(keys) && !ret); @@ -624,7 +627,7 @@ static void __bch2_write_index(struct bch_write_op *op) if (ret) { bch_err_inum_ratelimited(c, op->pos.inode, "write error %i from btree update", ret); - op->error = ret; + goto err; } } out: |