If we error in data_update_init() after adding to the rhashtable of
outstanding promotes, kfree_rcu() is required.

Reported-by: Reed Riley <[email protected]>
Signed-off-by: Kent Overstreet <[email protected]>
---
 fs/bcachefs/io_read.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/bcachefs/io_read.c b/fs/bcachefs/io_read.c
index ac6a6fcc2bb8..b3b934a87c6d 100644
--- a/fs/bcachefs/io_read.c
+++ b/fs/bcachefs/io_read.c
@@ -262,7 +262,8 @@ static struct promote_op *__promote_alloc(struct 
btree_trans *trans,
                bio_free_pages(&(*rbio)->bio);
        kfree(*rbio);
        *rbio = NULL;
-       kfree(op);
+       /* We may have added to the rhashtable and thus need rcu freeing: */
+       kfree_rcu(op, rcu);
        bch2_write_ref_put(c, BCH_WRITE_REF_promote);
        return ERR_PTR(ret);
 }
-- 
2.45.2


Reply via email to