diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-17 00:08:06 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-05-19 15:33:48 -0400 |
commit | e257dc21f44d8aa432132a4d7009abf55f37d22a (patch) | |
tree | 02c2d7db8bab23b83ed350e4eee74d39d6ea311a | |
parent | 290378a22279fd47e007e267fc242b676eb3a581 (diff) |
bcachefs: Make sure to pass a disk reservation to bch2_extent_update()
It's needed when we split an existing compressed extent - we get a null
ptr deref without it.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/reflink.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/bcachefs/reflink.c b/fs/bcachefs/reflink.c index 0978ad92614c..405a194d10e5 100644 --- a/fs/bcachefs/reflink.c +++ b/fs/bcachefs/reflink.c @@ -2,6 +2,7 @@ #include "bcachefs.h" #include "bkey_buf.h" #include "btree_update.h" +#include "buckets.h" #include "extents.h" #include "inode.h" #include "io.h" @@ -224,6 +225,8 @@ s64 bch2_remap_range(struct bch_fs *c, BTREE_ITER_INTENT); while (ret == 0 || ret == -EINTR) { + struct disk_reservation disk_res = { 0 }; + bch2_trans_begin(&trans); if (fatal_signal_pending(current)) { @@ -287,8 +290,9 @@ s64 bch2_remap_range(struct bch_fs *c, dst_end.offset - dst_iter->pos.offset)); ret = bch2_extent_update(&trans, dst_iter, new_dst.k, - NULL, journal_seq, + &disk_res, journal_seq, new_i_size, i_sectors_delta); + bch2_disk_reservation_put(c, &disk_res); if (ret) continue; |