xfs
[Top] [All Lists]

Re: [PATCH 1/2] xfs: create new metadata UUID field and incompat flag

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [PATCH 1/2] xfs: create new metadata UUID field and incompat flag
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Fri, 15 May 2015 08:36:10 +1000
Cc: xfs-oss <xfs@xxxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <55525437.9070501@xxxxxxxxxxx>
References: <55525356.1020807@xxxxxxxxxxx> <55525437.9070501@xxxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Tue, May 12, 2015 at 02:27:51PM -0500, Eric Sandeen wrote:
> This adds a new superblock field, sb_meta_uuid.  If set, along with
> a new incompat flag, the code will use that field on a V5 filesystem
> to compare to metadata UUIDs, which allows us to change the user-
> visible UUID at will.  Userspace handles the setting and clearing
> of the incompat flag as appropriate, as the UUID gets changed; i.e.
> setting the user-visible UUID back to the original UUID (as stored in
> the new field) will remove the incompatible feature flag.
> 
> If the incompat flag is not set, this copies the user-visible UUID into
> into the meta_uuid slot in memory when the superblock is read from disk;
> the meta_uuid field is not written back to disk in this case.
> 
> The remainder of this patch simply switches verifiers, initializers,
> etc to use the new sb_meta_uuid field.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>

Couple of minor things:
>  
>  /*
> + * 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 int xfs_sb_version_hasmetauuid(xfs_sb_t *sbp)

bool, struct xfs_sb.

> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -377,6 +377,17 @@ __xfs_sb_from_disk(
>       to->sb_pad = 0;
>       to->sb_pquotino = be64_to_cpu(from->sb_pquotino);
>       to->sb_lsn = be64_to_cpu(from->sb_lsn);
> +     /*
> +      * sb_meta_uuid is only on disk if it differs from sb_uuid and the
> +      * feature flag is set; if not set we keep it only in memory.
> +      */
> +     if (xfs_sb_version_hasmetauuid(to)) {
> +             memcpy(&to->sb_meta_uuid, &from->sb_meta_uuid,
> +                                     sizeof(to->sb_meta_uuid));
> +     } else {
> +             memcpy(&to->sb_meta_uuid, &from->sb_uuid,
> +                                     sizeof(to->sb_meta_uuid));
> +     }

uuid_copy()

>       /* Convert on-disk flags to in-memory flags? */
>       if (convert_xquota)
>               xfs_sb_quota_from_disk(to);
> @@ -518,6 +529,10 @@ xfs_sb_to_disk(
>                               cpu_to_be32(from->sb_features_log_incompat);
>               to->sb_pad = 0;
>               to->sb_lsn = cpu_to_be64(from->sb_lsn);
> +             if (xfs_sb_version_hasmetauuid(from)) {
> +                     memcpy(&to->sb_meta_uuid, &from->sb_meta_uuid,
> +                                             sizeof(to->sb_meta_uuid));
> +             }

uuid_copy() here, too.

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>