|
@@ -100,7 +100,7 @@ typedef struct xfs_sb {
|
|
|
xfs_rfsblock_t sb_dblocks; /* number of data blocks */
|
|
|
xfs_rfsblock_t sb_rblocks; /* number of realtime blocks */
|
|
|
xfs_rtblock_t sb_rextents; /* number of realtime extents */
|
|
|
- uuid_t sb_uuid; /* file system unique id */
|
|
|
+ uuid_t sb_uuid; /* user-visible file system unique id */
|
|
|
xfs_fsblock_t sb_logstart; /* starting block of log if internal */
|
|
|
xfs_ino_t sb_rootino; /* root inode number */
|
|
|
xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */
|
|
@@ -174,6 +174,7 @@ typedef struct xfs_sb {
|
|
|
|
|
|
xfs_ino_t sb_pquotino; /* project quota inode */
|
|
|
xfs_lsn_t sb_lsn; /* last write sequence */
|
|
|
+ uuid_t sb_meta_uuid; /* metadata file system unique id */
|
|
|
|
|
|
/* must be padded to 64 bit alignment */
|
|
|
} xfs_sb_t;
|
|
@@ -190,7 +191,7 @@ typedef struct xfs_dsb {
|
|
|
__be64 sb_dblocks; /* number of data blocks */
|
|
|
__be64 sb_rblocks; /* number of realtime blocks */
|
|
|
__be64 sb_rextents; /* number of realtime extents */
|
|
|
- uuid_t sb_uuid; /* file system unique id */
|
|
|
+ uuid_t sb_uuid; /* user-visible file system unique id */
|
|
|
__be64 sb_logstart; /* starting block of log if internal */
|
|
|
__be64 sb_rootino; /* root inode number */
|
|
|
__be64 sb_rbmino; /* bitmap inode for realtime extents */
|
|
@@ -260,6 +261,7 @@ typedef struct xfs_dsb {
|
|
|
|
|
|
__be64 sb_pquotino; /* project quota inode */
|
|
|
__be64 sb_lsn; /* last write sequence */
|
|
|
+ uuid_t sb_meta_uuid; /* metadata file system unique id */
|
|
|
|
|
|
/* must be padded to 64 bit alignment */
|
|
|
} xfs_dsb_t;
|
|
@@ -458,9 +460,11 @@ xfs_sb_has_ro_compat_feature(
|
|
|
|
|
|
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
|
|
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
|
|
+#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
|
|
#define XFS_SB_FEAT_INCOMPAT_ALL \
|
|
|
(XFS_SB_FEAT_INCOMPAT_FTYPE| \
|
|
|
- XFS_SB_FEAT_INCOMPAT_SPINODES)
|
|
|
+ XFS_SB_FEAT_INCOMPAT_SPINODES| \
|
|
|
+ XFS_SB_FEAT_INCOMPAT_META_UUID)
|
|
|
|
|
|
#define XFS_SB_FEAT_INCOMPAT_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_ALL
|
|
|
static inline bool
|
|
@@ -514,6 +518,18 @@ static inline bool xfs_sb_version_hassparseinodes(struct xfs_sb *sbp)
|
|
|
xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_SPINODES);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * XFS_SB_FEAT_INCOMPAT_META_UUID indicates that the metadata UUID
|
|
|
+ * is stored separately from the user-visible UUID; this allows the
|
|
|
+ * user-visible UUID to be changed on V5 filesystems which have a
|
|
|
+ * filesystem UUID stamped into every piece of metadata.
|
|
|
+ */
|
|
|
+static inline bool xfs_sb_version_hasmetauuid(struct xfs_sb *sbp)
|
|
|
+{
|
|
|
+ return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) &&
|
|
|
+ (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_META_UUID);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* end of superblock version macros
|
|
|
*/
|