]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
FIXUP: xfs: define the zoned on-disk format
authorChristoph Hellwig <hch@lst.de>
Fri, 20 Dec 2024 03:49:36 +0000 (19:49 -0800)
committerChristoph Hellwig <hch@lst.de>
Mon, 14 Apr 2025 05:25:38 +0000 (07:25 +0200)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
include/xfs_inode.h
include/xfs_mount.h

index 5bb31eb4aa53058b449f8900801184dfeed32a6c..61d4d285a106130a3bfcb6fa6b59a1356328098f 100644 (file)
@@ -232,8 +232,13 @@ typedef struct xfs_inode {
        xfs_rfsblock_t          i_nblocks;      /* # of direct & btree blocks */
        prid_t                  i_projid;       /* owner's project id */
        xfs_extlen_t            i_extsize;      /* basic/minimum extent size */
-       /* cowextsize is only used for v3 inodes, flushiter for v1/2 */
+       /*
+        * i_used_blocks is used for zoned rtrmap inodes,
+        * i_cowextsize is used for other v3 inodes,
+        * i_flushiter for v1/2 inodes
+        */
        union {
+               uint32_t        i_used_blocks;  /* used blocks in RTG */
                xfs_extlen_t    i_cowextsize;   /* basic cow extent size */
                uint16_t        i_flushiter;    /* incremented on flush */
        };
@@ -361,6 +366,11 @@ static inline xfs_fsize_t XFS_ISIZE(struct xfs_inode *ip)
 }
 #define XFS_IS_REALTIME_INODE(ip) ((ip)->i_diflags & XFS_DIFLAG_REALTIME)
 
+static inline bool xfs_is_zoned_inode(struct xfs_inode *ip)
+{
+       return xfs_has_zoned(ip->i_mount) && XFS_IS_REALTIME_INODE(ip);
+}
+
 /* inode link counts */
 static inline void set_nlink(struct inode *inode, uint32_t nlink)
 {
index 0acf952eb9d73de7c2005b609f6b3b4f8d316265..7856acfb9f8e8e555547bf0e254bdf353a0b9c19 100644 (file)
@@ -207,6 +207,7 @@ typedef struct xfs_mount {
 #define XFS_FEAT_NREXT64       (1ULL << 26)    /* large extent counters */
 #define XFS_FEAT_EXCHANGE_RANGE        (1ULL << 27)    /* exchange range */
 #define XFS_FEAT_METADIR       (1ULL << 28)    /* metadata directory tree */
+#define XFS_FEAT_ZONED         (1ULL << 29)    /* zoned RT device */
 
 #define __XFS_HAS_FEAT(name, NAME) \
 static inline bool xfs_has_ ## name (const struct xfs_mount *mp) \
@@ -253,7 +254,7 @@ __XFS_HAS_FEAT(needsrepair, NEEDSREPAIR)
 __XFS_HAS_FEAT(large_extent_counts, NREXT64)
 __XFS_HAS_FEAT(exchange_range, EXCHANGE_RANGE)
 __XFS_HAS_FEAT(metadir, METADIR)
-
+__XFS_HAS_FEAT(zoned, ZONED)
 
 static inline bool xfs_has_rtgroups(const struct xfs_mount *mp)
 {
@@ -264,7 +265,9 @@ static inline bool xfs_has_rtgroups(const struct xfs_mount *mp)
 static inline bool xfs_has_rtsb(const struct xfs_mount *mp)
 {
        /* all rtgroups filesystems with an rt section have an rtsb */
-       return xfs_has_rtgroups(mp) && xfs_has_realtime(mp);
+       return xfs_has_rtgroups(mp) &&
+               xfs_has_realtime(mp) &&
+               !xfs_has_zoned(mp);
 }
 
 static inline bool xfs_has_rtrmapbt(const struct xfs_mount *mp)
@@ -279,6 +282,11 @@ static inline bool xfs_has_rtreflink(const struct xfs_mount *mp)
               xfs_has_reflink(mp);
 }
 
+static inline bool xfs_has_nonzoned(const struct xfs_mount *mp)
+{
+       return !xfs_has_zoned(mp);
+}
+
 /* Kernel mount features that we don't support */
 #define __XFS_UNSUPP_FEAT(name) \
 static inline bool xfs_has_ ## name (const struct xfs_mount *mp) \