btrfs: zoned: put block group after final usage
authorNikolay Borisov <nborisov@suse.com>
Mon, 7 Mar 2022 13:30:02 +0000 (15:30 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 14 Mar 2022 12:13:54 +0000 (13:13 +0100)
It's counter-intuitive (and wrong) to put the block group _before_ the
final usage in submit_eb_page. Fix it by re-ordering the call to
btrfs_put_block_group after its final reference. Also fix a minor typo
in 'implies'

Fixes: be1a1d7a5d24 ("btrfs: zoned: finish fully written block group")
CC: stable@vger.kernel.org # 5.16+
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 3f13ff0..78486bb 100644 (file)
@@ -4786,11 +4786,12 @@ static int submit_eb_page(struct page *page, struct writeback_control *wbc,
                return ret;
        }
        if (cache) {
-               /* Impiles write in zoned mode */
-               btrfs_put_block_group(cache);
-               /* Mark the last eb in a block group */
+               /*
+                * Implies write in zoned mode. Mark the last eb in a block group.
+                */
                if (cache->seq_zone && eb->start + eb->len == cache->zone_capacity)
                        set_bit(EXTENT_BUFFER_ZONE_FINISH, &eb->bflags);
+               btrfs_put_block_group(cache);
        }
        ret = write_one_eb(eb, wbc, epd);
        free_extent_buffer(eb);