• Naohiro Aota's avatar
    btrfs: zoned: track unusable bytes for zones · 169e0da9
    Naohiro Aota authored
    In a zoned filesystem a once written then freed region is not usable
    until the underlying zone has been reset. So we need to distinguish such
    unusable space from usable free space.
    
    Therefore we need to introduce the "zone_unusable" field to the block
    group structure, and "bytes_zone_unusable" to the space_info structure
    to track the unusable space.
    
    Pinned bytes are always reclaimed to the unusable space. But, when an
    allocated region is returned before using e.g., the block group becomes
    read-only between allocation time and reservation time, we can safely
    return the region to the block group. For the situation, this commit
    introduces "btrfs_add_free_space_unused". This behaves the same as
    btrfs_add_free_space() on regular filesystem. On zoned filesystems, it
    rewinds the allocation offset.
    
    Because the read-only bytes tracks free but unusable bytes when the block
    group is read-only, we need to migrate the zone_unusable bytes to
    read-only bytes when a block group is marked read-only.
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    169e0da9
block-group.h 10.1 KB