]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: fix folio refcount in __alloc_dummy_extent_buffer()
authorBoris Burkov <boris@bur.io>
Tue, 2 Jul 2024 14:31:14 +0000 (07:31 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Jul 2024 10:51:15 +0000 (12:51 +0200)
commit a56c85fa2d59ab0780514741550edf87989a66e9 upstream.

Another improper use of __folio_put() in an error path after freshly
allocating pages/folios which returns them with the refcount initialized
to 1. The refactor from __free_pages() -> __folio_put() (instead of
folio_put) removed a refcount decrement found in __free_pages() and
folio_put but absent from __folio_put().

Fixes: 13df3775efca ("btrfs: cleanup metadata page pointer usage")
CC: stable@vger.kernel.org # 6.8+
Tested-by: Ed Tomlinson <edtoml@gmail.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Boris Burkov <boris@bur.io>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/extent_io.c

index 41173701f1befeb13c98308e5c62430028687995..1e020620748d67007b3a342a7320ffadd989321b 100644 (file)
@@ -3526,7 +3526,7 @@ err:
        for (int i = 0; i < num_folios; i++) {
                if (eb->folios[i]) {
                        detach_extent_buffer_folio(eb, eb->folios[i]);
-                       __folio_put(eb->folios[i]);
+                       folio_put(eb->folios[i]);
                }
        }
        __free_extent_buffer(eb);