diff options
Diffstat (limited to 'fs/bcachefs/io.c')
-rw-r--r-- | fs/bcachefs/io.c | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index e754f57c1342..701bfc8ce0e4 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -273,7 +273,6 @@ int bch2_extent_update(struct btree_trans *trans, struct btree_iter *iter, struct bkey_i *k, struct disk_reservation *disk_res, - u64 *journal_seq, u64 new_i_size, s64 *i_sectors_delta_total, bool check_enospc) @@ -374,7 +373,7 @@ int bch2_extent_update(struct btree_trans *trans, } ret = bch2_trans_update(trans, iter, k, 0) ?: - bch2_trans_commit(trans, disk_res, journal_seq, + bch2_trans_commit(trans, disk_res, NULL, BTREE_INSERT_NOCHECK_RW| BTREE_INSERT_NOFAIL); err: @@ -438,8 +437,7 @@ int bch2_fpunch_at(struct btree_trans *trans, struct btree_iter *iter, bch2_cut_back(end_pos, &delete); ret = bch2_extent_update(trans, inum, iter, &delete, - &disk_res, NULL, - 0, i_sectors_delta, false); + &disk_res, 0, i_sectors_delta, false); bch2_disk_reservation_put(c, &disk_res); } @@ -507,7 +505,7 @@ static int bch2_write_index_default(struct bch_write_op *op) BTREE_ITER_SLOTS|BTREE_ITER_INTENT); ret = bch2_extent_update(&trans, inum, &iter, sk.k, - &op->res, &op->journal_seq, + &op->res, op->new_i_size, &op->i_sectors_delta, op->flags & BCH_WRITE_CHECK_ENOSPC); bch2_trans_iter_exit(&trans, &iter); @@ -596,14 +594,11 @@ void bch2_submit_wbio_replicas(struct bch_write_bio *wbio, struct bch_fs *c, static void __bch2_write(struct bch_write_op *); -static void __bch2_write_done(struct closure *cl) +static void bch2_write_done(struct closure *cl) { struct bch_write_op *op = container_of(cl, struct bch_write_op, cl); struct bch_fs *c = op->c; - if (!op->error && (op->flags & BCH_WRITE_FLUSH)) - op->error = bch2_journal_error(&c->journal); - bch2_disk_reservation_put(c, &op->res); percpu_ref_put(&c->writes); bch2_keylist_free(&op->insert_keys, op->inline_keys); @@ -616,21 +611,6 @@ static void __bch2_write_done(struct closure *cl) op->end_io(op); } -static __always_inline void bch2_write_done(struct bch_write_op *op) -{ - if (likely(!(op->flags & BCH_WRITE_FLUSH) || op->error)) { - __bch2_write_done(&op->cl); - } else if (!(op->flags & BCH_WRITE_SYNC)) { - bch2_journal_flush_seq_async(&op->c->journal, - op->journal_seq, - &op->cl); - continue_at(&op->cl, __bch2_write_done, index_update_wq(op)); - } else { - bch2_journal_flush_seq(&op->c->journal, op->journal_seq); - __bch2_write_done(&op->cl); - } -} - static noinline int bch2_write_drop_io_error_ptrs(struct bch_write_op *op) { struct keylist *keys = &op->insert_keys; @@ -789,16 +769,10 @@ unlock: __bch2_write_index(op); - if (!(op->flags & BCH_WRITE_DONE)) { + if (!(op->flags & BCH_WRITE_DONE)) __bch2_write(op); - } else if (!op->error && (op->flags & BCH_WRITE_FLUSH)) { - bch2_journal_flush_seq_async(&op->c->journal, - op->journal_seq, - &op->cl); - continue_at(&op->cl, __bch2_write_done, index_update_wq(op)); - } else { - __bch2_write_done(&op->cl); - } + else + bch2_write_done(&op->cl); } } @@ -1347,7 +1321,7 @@ err: if (!(op->flags & BCH_WRITE_DONE)) goto again; - bch2_write_done(op); + bch2_write_done(&op->cl); } else { continue_at(&op->cl, bch2_write_index, NULL); } @@ -1395,7 +1369,7 @@ static void bch2_write_data_inline(struct bch_write_op *op, unsigned data_len) __bch2_write_index(op); err: - bch2_write_done(op); + bch2_write_done(&op->cl); } /** |