• Naohiro Aota's avatar
    btrfs: zoned: wait for extent buffer IOs before finishing a zone · 2dd7e7bc
    Naohiro Aota authored
    Before sending REQ_OP_ZONE_FINISH to a zone, we need to ensure that
    ongoing IOs already finished. Or, we will see a "Zone Is Full" error for
    the IOs, as the ZONE_FINISH command makes the zone full.
    
    We ensure that with btrfs_wait_block_group_reservations() and
    btrfs_wait_ordered_roots() for a data block group. And, for a metadata
    block group, the comparison of alloc_offset vs meta_write_pointer mostly
    ensures IOs for the allocated region already sent. However, there still
    can be a little time frame where the IOs are sent but not yet completed.
    
    Introduce wait_eb_writebacks() to ensure such IOs are completed for a
    metadata block group. It walks the buffer_radix to find extent buffers in
    the block group and calls wait_on_extent_buffer_writeback() on them.
    
    Fixes: afba2bc0 ("btrfs: zoned: implement active zone tracking")
    CC: stable@vger.kernel.org # 5.19+
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    2dd7e7bc
zoned.c 58.7 KB