linux/fs/xfs
Christoph Hellwig 2167eaabe2 xfs: define the zoned on-disk format
Zone file systems reuse the basic RT group enabled XFS file system
structure to support a mode where each RT group is always written from
start to end and then reset for reuse (after moving out any remaining
data).  There are few minor but important changes, which are indicated
by a new incompat flag:

1) there are no bitmap and summary inodes, thus the
   /rtgroups/{rgno}.{bitmap,summary} metadir files do not exist and the
   sb_rbmblocks superblock field must be cleared to zero.

2) there is a new superblock field that specifies the start of an
   internal RT section.  This allows supporting SMR HDDs that have random
   writable space at the beginning which is used for the XFS data device
   (which really is the metadata device for this configuration), directly
   followed by a RT device on the same block device.  While something
   similar could be achieved using dm-linear just having a single device
   directly consumed by XFS makes handling the file systems a lot easier.

3) Another superblock field that tracks the amount of reserved space (or
   overprovisioning) that is never used for user capacity, but allows GC
   to run more smoothly.

4) an overlay of the cowextsize field for the rtrmap inode so that we
   can persistently track the total amount of rtblocks currently used in
   a RT group.  There is no data structure other than the rmap that
   tracks used space in an RT group, and this counter is used to decide
   when a RT group has been entirely emptied, and to select one that
   is relatively empty if garbage collection needs to be performed.
   While this counter could be tracked entirely in memory and rebuilt
   from the rmap at mount time, that would lead to very long mount times
   with the large number of RT groups implied by the number of hardware
   zones especially on SMR hard drives with 256MB zone sizes.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
2025-03-03 08:16:45 -07:00
..
libxfs xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
scrub xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
Kconfig xfs: verify buffer, inode, and dquot items every tx commit 2024-07-02 11:36:54 -07:00
Makefile xfs: online repair of the realtime refcount btree 2024-12-23 13:06:16 -08:00
xfs_acl.c xfs: make attr removal an explicit operation 2024-04-23 07:46:51 -07:00
xfs_acl.h
xfs_aops.c Merge branch 'vfs-6.15.iomap' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs into xfs-6.15-merge 2025-03-03 13:01:06 +01:00
xfs_aops.h
xfs_attr_inactive.c xfs: remove bp->b_error check in xfs_attr3_root_inactive 2025-01-13 14:56:15 +01:00
xfs_attr_item.c xfs: fix xfs_init_attr_trans not handling explicit operation codes 2024-05-27 15:55:52 +05:30
xfs_attr_item.h xfs: create attr log item opcodes and formats for parent pointers 2024-04-23 07:46:57 -07:00
xfs_attr_list.c xfs: eliminate lockdep false positives in xfs_attr_shortform_list 2024-11-22 09:52:03 +01:00
xfs_bio_io.c
xfs_bmap_item.c xfs: store rtgroup information with a bmap intent 2024-11-05 13:38:41 -08:00
xfs_bmap_item.h xfs: move xfs_bmap_defer_add to xfs_bmap_item.c 2024-02-22 12:44:21 -08:00
xfs_bmap_util.c xfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delay 2025-03-03 08:16:44 -07:00
xfs_bmap_util.h xfs: support the COW fork in xfs_bmap_punch_delalloc_range 2024-10-15 11:37:42 +02:00
xfs_buf_item_recover.c xfs: fix mount hang during primary superblock recovery failure 2025-01-13 14:55:37 +01:00
xfs_buf_item.c xfs: verify buffer, inode, and dquot items every tx commit 2024-07-02 11:36:54 -07:00
xfs_buf_item.h xfs: move b_li_list based retry handling to common code 2025-01-14 11:38:15 +01:00
xfs_buf_mem.c xfs: remove most in-flight buffer accounting 2025-02-25 13:05:59 +01:00
xfs_buf_mem.h xfs: launder in-memory btree buffers before transaction commit 2024-02-22 12:43:36 -08:00
xfs_buf.c xfs: remove the XBF_STALE check from xfs_buf_rele_cached 2025-02-25 13:05:59 +01:00
xfs_buf.h xfs: remove most in-flight buffer accounting 2025-02-25 13:05:59 +01:00
xfs_dahash_test.c
xfs_dahash_test.h
xfs_dir2_readdir.c xfs: refactor dir format helpers 2024-04-26 11:21:46 +05:30
xfs_discard.c xfs: fix the comment above xfs_discard_endio 2025-01-13 14:56:20 +01:00
xfs_discard.h
xfs_dquot_item_recover.c
xfs_dquot_item.c xfs: attach dquot buffer to dquot log item buffer 2024-12-12 17:45:11 -08:00
xfs_dquot_item.h xfs: attach dquot buffer to dquot log item buffer 2024-12-12 17:45:11 -08:00
xfs_dquot.c xfs: add a b_iodone callback to struct xfs_buf 2025-01-14 11:38:15 +01:00
xfs_dquot.h xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_drain.c xfs: allow queued realtime intents to drain before scrubbing 2024-12-23 13:06:06 -08:00
xfs_drain.h xfs: allow queued realtime intents to drain before scrubbing 2024-12-23 13:06:06 -08:00
xfs_error.c xfs: allow inode-based btrees to reserve space in the data device 2024-12-23 13:06:03 -08:00
xfs_error.h
xfs_exchmaps_item.c xfs: capture inode generation numbers in the ondisk exchmaps log item 2024-04-15 14:54:24 -07:00
xfs_exchmaps_item.h xfs: create deferred log items for file mapping exchanges 2024-04-15 14:54:17 -07:00
xfs_exchrange.c xfs: don't call remap_verify_area with sb write protection held 2025-01-24 12:08:50 +01:00
xfs_exchrange.h xfs: introduce new file range commit ioctls 2024-09-01 08:58:19 -07:00
xfs_export.c xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_export.h xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_extent_busy.c xfs: implement busy extent tracking for rtgroups 2024-11-05 13:38:44 -08:00
xfs_extent_busy.h xfs: convert busy extent tracking to the generic group structure 2024-11-05 13:38:29 -08:00
xfs_extfree_item.c xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_extfree_item.h xfs: move xfs_extent_free_defer_add to xfs_extfree_item.c 2024-07-02 11:37:03 -07:00
xfs_file.c xfs: refine the unaligned check for always COW inodes in xfs_file_dio_write 2025-03-03 08:16:44 -07:00
xfs_file.h xfs: create a new helper to return a file's allocation unit 2024-04-15 14:54:10 -07:00
xfs_filestream.c xfs: factor out a generic xfs_group structure 2024-11-05 13:38:27 -08:00
xfs_filestream.h
xfs_fsmap.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_fsmap.h xfs: clean up xfs_getfsmap_helper arguments 2024-11-05 13:38:35 -08:00
xfs_fsops.c xfs: make metabtree reservations global 2025-03-03 08:16:43 -07:00
xfs_fsops.h xfs: support reserved blocks for the rt extent counter 2025-03-03 08:16:43 -07:00
xfs_globals.c
xfs_handle.c simplify xfs_find_handle() a bit 2024-11-03 01:28:06 -05:00
xfs_handle.h xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_health.c xfs: report realtime refcount btree corruption errors to the health system 2024-12-23 13:06:14 -08:00
xfs_hooks.c xfs: allow scrub to hook metadata updates in other writers 2024-02-22 12:30:45 -08:00
xfs_hooks.h xfs: allow scrub to hook metadata updates in other writers 2024-02-22 12:30:45 -08:00
xfs_icache.c xfs: generalize the freespace and reserved blocks handling 2025-03-03 08:16:37 -07:00
xfs_icache.h
xfs_icreate_item.c
xfs_icreate_item.h
xfs_inode_item_recover.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_inode_item.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_inode_item.h
xfs_inode.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_inode.h xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_ioctl.c xfs: support reserved blocks for the rt extent counter 2025-03-03 08:16:43 -07:00
xfs_ioctl.h xfs: move handle ioctl code to xfs_handle.c 2024-04-23 07:47:00 -07:00
xfs_ioctl32.c xfs: move handle ioctl code to xfs_handle.c 2024-04-23 07:47:00 -07:00
xfs_ioctl32.h
xfs_iomap.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_iomap.h xfs: remove xfs_page_mkwrite_iomap_ops 2024-11-05 13:52:57 +01:00
xfs_iops.c xfs: report the correct read/write dio alignment for reflinked inodes 2025-01-09 16:23:18 +01:00
xfs_iops.h xfs: declare xfs_file.c symbols in xfs_file.h 2024-04-15 14:54:09 -07:00
xfs_itable.c xfs: allow bulkstat to return metadata directories 2024-11-05 13:38:32 -08:00
xfs_itable.h xfs: allow bulkstat to return metadata directories 2024-11-05 13:38:32 -08:00
xfs_iunlink_item.c xfs: pass the iunlink item to the xfs_iunlink_update_dinode trace point 2024-11-05 13:38:26 -08:00
xfs_iunlink_item.h
xfs_iwalk.c xfs: switch perag iteration from the for_each macros to a while based iterator 2024-11-05 13:38:28 -08:00
xfs_iwalk.h xfs: factor out a xfs_iwalk_args helper 2024-11-05 13:38:27 -08:00
xfs_linux.h move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
xfs_log_cil.c xfs: Use xchg() in xlog_cil_insert_pcp_aggregate() 2024-11-28 12:42:10 +01:00
xfs_log_priv.h xfs: prevent mount and log shutdown race 2024-11-22 11:24:51 +01:00
xfs_log_recover.c xfs: decouple buffer readahead from the normal buffer read path 2025-02-25 13:05:59 +01:00
xfs_log.c xfs: remove redundant update for ticket->t_curr_res in xfs_log_ticket_regrant 2025-01-13 14:56:09 +01:00
xfs_log.h xfs: Remove empty declartion in header file 2024-10-07 08:00:11 +02:00
xfs_message.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_message.h xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_mount.c xfs: trace in-memory freecounter reservations 2025-03-03 08:16:43 -07:00
xfs_mount.h xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_mru_cache.c xfs: use LIST_HEAD() to simplify code 2024-09-03 10:07:42 +05:30
xfs_mru_cache.h
xfs_notify_failure.c xfs: react to fsdax failure notifications on the rt device 2024-12-23 13:06:09 -08:00
xfs_notify_failure.h xfs: react to fsdax failure notifications on the rt device 2024-12-23 13:06:09 -08:00
xfs_pnfs.c xfs: standardize EXPERIMENTAL warning generation 2024-11-05 13:38:30 -08:00
xfs_pnfs.h
xfs_pwork.c
xfs_pwork.h
xfs_qm_bhv.c xfs: Do not allow norecovery mount with quotacheck 2025-02-14 09:40:35 +01:00
xfs_qm_syscalls.c xfs: delalloc and quota softlimit timers are incoherent 2024-11-22 11:24:45 +01:00
xfs_qm.c xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_qm.h xfs: keep quota directory inode loaded 2024-12-12 17:45:08 -08:00
xfs_quota.h xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_quotaops.c xfs: refactor loading quota inodes in the regular case 2024-09-01 08:58:20 -07:00
xfs_refcount_item.c xfs: support recovering refcount intent items targetting realtime extents 2024-12-23 13:06:11 -08:00
xfs_refcount_item.h xfs: move xfs_refcount_update_defer_add to xfs_refcount_item.c 2024-07-02 11:37:07 -07:00
xfs_reflink.c xfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delay 2025-03-03 08:16:44 -07:00
xfs_reflink.h xfs: enable realtime reflink 2024-12-23 13:06:17 -08:00
xfs_rmap_item.c xfs: support recovering rmap intent items targetting realtime extents 2024-12-23 13:06:05 -08:00
xfs_rmap_item.h xfs: move xfs_rmap_update_defer_add to xfs_rmap_item.c 2024-07-02 11:37:05 -07:00
xfs_rtalloc.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_rtalloc.h xfs: make metabtree reservations global 2025-03-03 08:16:43 -07:00
xfs_stats.c xfs: introduce realtime refcount btree ondisk definitions 2024-12-23 13:06:10 -08:00
xfs_stats.h xfs: introduce realtime refcount btree ondisk definitions 2024-12-23 13:06:10 -08:00
xfs_super.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_super.h xfs: react to fsdax failure notifications on the rt device 2024-12-23 13:06:09 -08:00
xfs_symlink.c xfs: pass the icreate args object to xfs_dialloc 2024-09-01 08:58:19 -07:00
xfs_symlink.h xfs: move remote symlink target read function to libxfs 2024-02-22 12:45:17 -08:00
xfs_sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
xfs_sysctl.h
xfs_sysfs.c xfs: grant heads track byte counts, not LSNs 2024-07-04 12:46:47 +05:30
xfs_sysfs.h
xfs_trace.c xfs: create incore realtime group structures 2024-11-05 13:38:35 -08:00
xfs_trace.h xfs: make metabtree reservations global 2025-03-03 08:16:43 -07:00
xfs_trans_ail.c xfs: simplify xfsaild_resubmit_item 2025-01-14 11:38:15 +01:00
xfs_trans_buf.c xfs: add a b_iodone callback to struct xfs_buf 2025-01-14 11:38:15 +01:00
xfs_trans_dquot.c xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_trans_priv.h xfs: l_last_sync_lsn is really AIL state 2024-07-04 12:46:46 +05:30
xfs_trans.c xfs: remove the t_magic field in struct xfs_trans 2025-01-13 14:55:19 +01:00
xfs_trans.h xfs: remove the t_magic field in struct xfs_trans 2025-01-13 14:55:19 +01:00
xfs_xattr.c xfs: standardize EXPERIMENTAL warning generation 2024-11-05 13:38:30 -08:00
xfs_xattr.h xfs: remove xfs_da_args.attr_flags 2024-04-23 07:46:50 -07:00
xfs.h xfs: verify buffer, inode, and dquot items every tx commit 2024-07-02 11:36:54 -07:00