From: Allison Henderson Date: Tue, 9 Jan 2024 17:41:46 +0000 (-0800) Subject: xfs: Add the parent pointer support to the superblock version 5. X-Git-Tag: xfs-zoned-old-2024-06-10~365 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=39dcd443f2da4d497f2ee7ea8736198c73386142;p=users%2Fhch%2Fxfsprogs.git xfs: Add the parent pointer support to the superblock version 5. Add the parent pointer superblock flag so that we can actually mount filesystems with this feature enabled. Signed-off-by: Mark Tinguely Signed-off-by: Dave Chinner Signed-off-by: Allison Henderson Reviewed-by: Darrick J. Wong Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- diff --git a/libfrog/fsgeom.c b/libfrog/fsgeom.c index 71a8e4bb9..597c38b11 100644 --- a/libfrog/fsgeom.c +++ b/libfrog/fsgeom.c @@ -32,6 +32,7 @@ xfs_report_geom( int inobtcount; int nrext64; int exchangerange; + int parent; isint = geo->logstart > 0; lazycount = geo->flags & XFS_FSOP_GEOM_FLAGS_LAZYSB ? 1 : 0; @@ -51,6 +52,7 @@ xfs_report_geom( inobtcount = geo->flags & XFS_FSOP_GEOM_FLAGS_INOBTCNT ? 1 : 0; nrext64 = geo->flags & XFS_FSOP_GEOM_FLAGS_NREXT64 ? 1 : 0; exchangerange = geo->flags & XFS_FSOP_GEOM_FLAGS_EXCHANGE_RANGE ? 1 : 0; + parent = geo->flags & XFS_FSOP_GEOM_FLAGS_PARENT ? 1 : 0; printf(_( "meta-data=%-22s isize=%-6d agcount=%u, agsize=%u blks\n" @@ -60,7 +62,7 @@ xfs_report_geom( " =%-22s exchange=%-3u\n" "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n" " =%-22s sunit=%-6u swidth=%u blks\n" -"naming =version %-14u bsize=%-6u ascii-ci=%d, ftype=%d\n" +"naming =version %-14u bsize=%-6u ascii-ci=%d, ftype=%d, parent=%d\n" "log =%-22s bsize=%-6d blocks=%u, version=%d\n" " =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n" "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"), @@ -72,7 +74,7 @@ xfs_report_geom( "", geo->blocksize, (unsigned long long)geo->datablocks, geo->imaxpct, "", geo->sunit, geo->swidth, - dirversion, geo->dirblocksize, cimode, ftype_enabled, + dirversion, geo->dirblocksize, cimode, ftype_enabled, parent, isint ? _("internal log") : logname ? logname : _("external"), geo->blocksize, geo->logblocks, logversion, "", geo->logsectsize, geo->logsunit / geo->blocksize, lazycount, diff --git a/libxfs/xfs_format.h b/libxfs/xfs_format.h index f1818c54a..b457e457e 100644 --- a/libxfs/xfs_format.h +++ b/libxfs/xfs_format.h @@ -374,6 +374,7 @@ xfs_sb_has_ro_compat_feature( #define XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR (1 << 4) /* needs xfs_repair */ #define XFS_SB_FEAT_INCOMPAT_NREXT64 (1 << 5) /* large extent counters */ #define XFS_SB_FEAT_INCOMPAT_EXCHRANGE (1 << 6) /* exchangerange supported */ +#define XFS_SB_FEAT_INCOMPAT_PARENT (1 << 7) /* parent pointers */ #define XFS_SB_FEAT_INCOMPAT_ALL \ (XFS_SB_FEAT_INCOMPAT_FTYPE | \ XFS_SB_FEAT_INCOMPAT_SPINODES | \ diff --git a/libxfs/xfs_fs.h b/libxfs/xfs_fs.h index fa28c18e5..90e1d0cc0 100644 --- a/libxfs/xfs_fs.h +++ b/libxfs/xfs_fs.h @@ -241,6 +241,8 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_NREXT64 (1 << 23) /* large extent counters */ #define XFS_FSOP_GEOM_FLAGS_EXCHANGE_RANGE (1 << 24) /* exchange range */ +#define XFS_FSOP_GEOM_FLAGS_PARENT (1U << 30) /* parent pointers */ + /* * Minimum and maximum sizes need for growth checks. * diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c index 2db43b805..f45ffd994 100644 --- a/libxfs/xfs_sb.c +++ b/libxfs/xfs_sb.c @@ -175,6 +175,8 @@ xfs_sb_version_to_features( features |= XFS_FEAT_NREXT64; if (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_EXCHRANGE) features |= XFS_FEAT_EXCHANGE_RANGE; + if (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_PARENT) + features |= XFS_FEAT_PARENT; return features; } @@ -1251,6 +1253,8 @@ xfs_fs_geometry( geo->flags |= XFS_FSOP_GEOM_FLAGS_BIGTIME; if (xfs_has_inobtcounts(mp)) geo->flags |= XFS_FSOP_GEOM_FLAGS_INOBTCNT; + if (xfs_has_parent(mp)) + geo->flags |= XFS_FSOP_GEOM_FLAGS_PARENT; if (xfs_has_sector(mp)) { geo->flags |= XFS_FSOP_GEOM_FLAGS_SECTOR; geo->logsectsize = sbp->sb_logsectsize;