diff options
| author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-12-01 03:47:54 -0500 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:18 -0400 |
| commit | 92d2ec10926d2ba8c38ba0ecada69cfd7a4dd3c4 (patch) | |
| tree | b84749760569733fbb1e7fe83e0f0636a6c0e228 | |
| parent | b547d005d54209dc3a14ffd7924c73e32ba2e3a2 (diff) | |
| download | linux-92d2ec10926d2ba8c38ba0ecada69cfd7a4dd3c4.tar.gz linux-92d2ec10926d2ba8c38ba0ecada69cfd7a4dd3c4.zip | |
bcachefs: Fix btree_path leaks in bch2_trans_update()
bch2_trans_update() had some dodgy gets() and puts() - this fixes a few
leaks.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
| -rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index 205eaee11da0..65facdd1536f 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -1336,8 +1336,6 @@ int bch2_trans_update(struct btree_trans *trans, struct btree_iter *iter, .ip_allocated = _RET_IP_, }; - __btree_path_get(n.path, true); - #ifdef CONFIG_BCACHEFS_DEBUG trans_for_each_update(trans, i) BUG_ON(i != trans->updates && @@ -1374,16 +1372,17 @@ int bch2_trans_update(struct btree_trans *trans, struct btree_iter *iter, if (n.cached && !i->cached) { i->k = n.k; i->flags = n.flags; - - __btree_path_get(n.path, false); - } else { - bch2_path_put(trans, i->path, true); - *i = n; + return 0; } + + bch2_path_put(trans, i->path, true); + *i = n; } else array_insert_item(trans->updates, trans->nr_updates, i - trans->updates, n); + __btree_path_get(n.path, true); + return 0; } |
