Commit 73b46097 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Fix a null ptr deref in bch2_inode_delete_keys()

Similarly to bch2_btree_delete_range_trans(), bch2_inode_delete_keys()
may sometimes split compressed extents, and needs to pass in a disk
reservation.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent e4099990
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "btree_key_cache.h" #include "btree_key_cache.h"
#include "bkey_methods.h" #include "bkey_methods.h"
#include "btree_update.h" #include "btree_update.h"
#include "buckets.h"
#include "error.h" #include "error.h"
#include "extents.h" #include "extents.h"
#include "extent_update.h" #include "extent_update.h"
...@@ -588,6 +589,8 @@ static int bch2_inode_delete_keys(struct btree_trans *trans, ...@@ -588,6 +589,8 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
int ret = 0; int ret = 0;
while (!ret || ret == -EINTR) { while (!ret || ret == -EINTR) {
struct disk_reservation disk_res =
bch2_disk_reservation_init(trans->c, 0);
struct btree_iter iter; struct btree_iter iter;
struct bkey_s_c k; struct bkey_s_c k;
struct bkey_i delete; struct bkey_i delete;
...@@ -630,8 +633,9 @@ static int bch2_inode_delete_keys(struct btree_trans *trans, ...@@ -630,8 +633,9 @@ static int bch2_inode_delete_keys(struct btree_trans *trans,
} }
ret = bch2_trans_update(trans, &iter, &delete, 0) ?: ret = bch2_trans_update(trans, &iter, &delete, 0) ?:
bch2_trans_commit(trans, NULL, NULL, bch2_trans_commit(trans, &disk_res, NULL,
BTREE_INSERT_NOFAIL); BTREE_INSERT_NOFAIL);
bch2_disk_reservation_put(trans->c, &disk_res);
err: err:
offset = iter.pos.offset; offset = iter.pos.offset;
bch2_trans_iter_exit(trans, &iter); bch2_trans_iter_exit(trans, &iter);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment