mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 23:25:07 +00:00
de881df977
NVMe Zoned Namespace devices can have zone-capacity less than zone-size. Zone-capacity indicates the maximum number of sectors that are usable in a zone beginning from the first sector of the zone. This makes the sectors sectors after the zone-capacity till zone-size to be unusable. This patch set tracks zone-size and zone-capacity in zoned devices and calculate the usable blocks per segment and usable segments per section. If zone-capacity is less than zone-size mark only those segments which start before zone-capacity as free segments. All segments at and beyond zone-capacity are treated as permanently used segments. In cases where zone-capacity does not align with segment size the last segment will start before zone-capacity and end beyond the zone-capacity of the zone. For such spanning segments only sectors within the zone-capacity are used. During writes and GC manage the usable segments in a section and usable blocks per segment. Segments which are beyond zone-capacity are never allocated, and do not need to be garbage collected, only the segments which are before zone-capacity needs to garbage collected. For spanning segments based on the number of usable blocks in that segment, write to blocks only up to zone-capacity. Zone-capacity is device specific and cannot be configured by the user. Since NVMe ZNS device zones are sequentially write only, a block device with conventional zones or any normal block device is needed along with the ZNS device for the metadata operations of F2fs. A typical nvme-cli output of a zoned device shows zone start and capacity and write pointer as below: SLBA: 0x0 WP: 0x0 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ SLBA: 0x20000 WP: 0x20000 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ SLBA: 0x40000 WP: 0x40000 Cap: 0x18800 State: EMPTY Type: SEQWRITE_REQ Here zone size is 64MB, capacity is 49MB, WP is at zone start as the zones are in EMPTY state. For each zone, only zone start + 49MB is usable area, any lba/sector after 49MB cannot be read or written to, the drive will fail any attempts to read/write. So, the second zone starts at 64MB and is usable till 113MB (64 + 49) and the range between 113 and 128MB is again unusable. The next zone starts at 128MB, and so on. Signed-off-by: Aravind Ramesh <aravind.ramesh@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> |
||
---|---|---|
.. | ||
caching | ||
cifs | ||
ext4 | ||
nfs | ||
spufs | ||
9p.rst | ||
adfs.rst | ||
affs.rst | ||
afs.rst | ||
api-summary.rst | ||
autofs-mount-control.rst | ||
autofs.rst | ||
automount-support.rst | ||
befs.rst | ||
bfs.rst | ||
btrfs.rst | ||
ceph.rst | ||
coda.rst | ||
configfs.rst | ||
cramfs.rst | ||
dax.txt | ||
debugfs.rst | ||
devpts.rst | ||
directory-locking.rst | ||
dlmfs.rst | ||
dnotify.rst | ||
ecryptfs.rst | ||
efivarfs.rst | ||
erofs.rst | ||
ext2.rst | ||
ext3.rst | ||
f2fs.rst | ||
fiemap.rst | ||
files.rst | ||
fscrypt.rst | ||
fsverity.rst | ||
fuse-io.rst | ||
fuse.rst | ||
gfs2-glocks.rst | ||
gfs2-uevents.rst | ||
gfs2.rst | ||
hfs.rst | ||
hfsplus.rst | ||
hpfs.rst | ||
index.rst | ||
inotify.rst | ||
isofs.rst | ||
journalling.rst | ||
locking.rst | ||
locks.rst | ||
mandatory-locking.rst | ||
mount_api.rst | ||
nilfs2.rst | ||
ntfs.rst | ||
ocfs2-online-filecheck.rst | ||
ocfs2.rst | ||
omfs.rst | ||
orangefs.rst | ||
overlayfs.rst | ||
path-lookup.rst | ||
path-lookup.txt | ||
porting.rst | ||
proc.rst | ||
qnx6.rst | ||
quota.rst | ||
ramfs-rootfs-initramfs.rst | ||
relay.rst | ||
romfs.rst | ||
seq_file.rst | ||
sharedsubtree.rst | ||
splice.rst | ||
squashfs.rst | ||
sysfs-pci.rst | ||
sysfs-tagging.rst | ||
sysfs.rst | ||
sysv-fs.rst | ||
tmpfs.rst | ||
ubifs-authentication.rst | ||
ubifs.rst | ||
udf.rst | ||
vfat.rst | ||
vfs.rst | ||
virtiofs.rst | ||
xfs-delayed-logging-design.rst | ||
xfs-self-describing-metadata.rst | ||
zonefs.rst |