• Naohiro Aota's avatar
    btrfs: zoned: move superblock logging zone location · 53b74fa9
    Naohiro Aota authored
    Moves the location of the superblock logging zones. The new locations of
    the logging zones are now determined based on fixed block addresses
    instead of on fixed zone numbers.
    
    The old placement method based on fixed zone numbers causes problems when
    one needs to inspect a file system image without access to the drive zone
    information. In such case, the super block locations cannot be reliably
    determined as the zone size is unknown. By locating the superblock logging
    zones using fixed addresses, we can scan a dumped file system image without
    the zone information since a super block copy will always be present at or
    after the fixed known locations.
    
    Introduce the following three pairs of zones containing fixed offset
    locations, regardless of the device zone size.
    
      - primary superblock: offset   0B (and the following zone)
      - first copy:         offset 512G (and the following zone)
      - Second copy:        offset   4T (4096G, and the following zone)
    
    If a logging zone is outside of the disk capacity, we do not record the
    superblock copy.
    
    The first copy position is much larger than for a non-zoned filesystem,
    which is at 64M.  This is to avoid overlapping with the log zones for
    the primary superblock. This higher location is arbitrary but allows
    supporting devices with very large zone sizes, plus some space around in
    between.
    
    Such large zone size is unrealistic and very unlikely to ever be seen in
    real devices. Currently, SMR disks have a zone size of 256MB, and we are
    expecting ZNS drives to be in the 1-4GB range, so this limit gives us
    room to breathe. For now, we only allow zone sizes up to 8GB. The
    maximum zone size that would still fit in the space is 256G.
    
    The fixed location addresses are somewhat arbitrary, with the intent of
    maintaining superblock reliability for smaller and larger devices, with
    the preference for the latter. For this reason, there are two superblocks
    under the first 1T. This should cover use cases for physical devices and
    for emulated/device-mapper devices.
    
    The superblock logging zones are reserved for superblock logging and
    never used for data or metadata blocks. Note that we only reserve the
    two zones per primary/copy actually used for superblock logging. We do
    not reserve the ranges of zones possibly containing superblocks with the
    largest supported zone size (0-16GB, 512G-528GB, 4096G-4112G).
    
    The zones containing the fixed location offsets used to store
    superblocks on a non-zoned volume are also reserved to avoid confusion.
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    53b74fa9
zoned.c 37 KB