-
- Downloads
btrfs: zoned: automatically reclaim zones
When a file gets deleted on a zoned file system, the space freed is not returned back into the block group's free space, but is migrated to zone_unusable. As this zone_unusable space is behind the current write pointer it is not possible to use it for new allocations. In the current implementation a zone is reset once all of the block group's space is accounted as zone unusable. This behaviour can lead to premature ENOSPC errors on a busy file system. Instead of only reclaiming the zone once it is completely unusable, kick off a reclaim job once the amount of unusable bytes exceeds a user configurable threshold between 51% and 100%. It can be set per mounted filesystem via the sysfs tunable bg_reclaim_threshold which is set to 75% by default. Similar to reclaiming unused block groups, these dirty block groups are added to a to_reclaim list and then on a transaction commit, the reclaim process is triggered but after we deleted unused block groups, which will free space for the relocation process. Reviewed-by:Filipe Manana <fdmanana@suse.com> Signed-off-by:
Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by:
David Sterba <dsterba@suse.com> Signed-off-by:
David Sterba <dsterba@suse.com>
Showing
- fs/btrfs/block-group.c 101 additions, 0 deletionsfs/btrfs/block-group.c
- fs/btrfs/block-group.h 3 additions, 0 deletionsfs/btrfs/block-group.h
- fs/btrfs/ctree.h 5 additions, 0 deletionsfs/btrfs/ctree.h
- fs/btrfs/disk-io.c 13 additions, 0 deletionsfs/btrfs/disk-io.c
- fs/btrfs/free-space-cache.c 8 additions, 1 deletionfs/btrfs/free-space-cache.c
- fs/btrfs/sysfs.c 35 additions, 0 deletionsfs/btrfs/sysfs.c
- fs/btrfs/volumes.c 1 addition, 1 deletionfs/btrfs/volumes.c
- fs/btrfs/volumes.h 1 addition, 0 deletionsfs/btrfs/volumes.h
- fs/btrfs/zoned.h 6 additions, 0 deletionsfs/btrfs/zoned.h
- include/trace/events/btrfs.h 12 additions, 0 deletionsinclude/trace/events/btrfs.h
Loading
Please register or sign in to comment