Commit ea99122b authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: mask off the rtbitmap and summary inodes when metadir in use



Set the rtbitmap and summary file inumbers to NULLFSINO in the
superblock and make sure they're zeroed whenever we write the superblock
to disk, to mimic mkfs behavior.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent a7492333
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -655,6 +655,14 @@ xfs_validate_sb_common(
void
xfs_sb_quota_from_disk(struct xfs_sb *sbp)
{
	if (xfs_sb_is_v5(sbp) &&
	    (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_METADIR)) {
		sbp->sb_uquotino = NULLFSINO;
		sbp->sb_gquotino = NULLFSINO;
		sbp->sb_pquotino = NULLFSINO;
		return;
	}

	/*
	 * older mkfs doesn't initialize quota inodes to NULLFSINO. This
	 * leads to in-core values having two different values for a quota
@@ -783,6 +791,8 @@ __xfs_sb_from_disk(
		to->sb_metadirino = be64_to_cpu(from->sb_metadirino);
		to->sb_rgcount = be32_to_cpu(from->sb_rgcount);
		to->sb_rgextents = be32_to_cpu(from->sb_rgextents);
		to->sb_rbmino = NULLFSINO;
		to->sb_rsumino = NULLFSINO;
	} else {
		to->sb_metadirino = NULLFSINO;
		to->sb_rgcount = 1;
@@ -805,6 +815,14 @@ xfs_sb_quota_to_disk(
{
	uint16_t	qflags = from->sb_qflags;

	if (xfs_sb_is_v5(from) &&
	    (from->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_METADIR)) {
		to->sb_uquotino = cpu_to_be64(0);
		to->sb_gquotino = cpu_to_be64(0);
		to->sb_pquotino = cpu_to_be64(0);
		return;
	}

	to->sb_uquotino = cpu_to_be64(from->sb_uquotino);

	/*
@@ -940,6 +958,8 @@ xfs_sb_to_disk(
		to->sb_metadirino = cpu_to_be64(from->sb_metadirino);
		to->sb_rgcount = cpu_to_be32(from->sb_rgcount);
		to->sb_rgextents = cpu_to_be32(from->sb_rgextents);
		to->sb_rbmino = cpu_to_be64(0);
		to->sb_rsumino = cpu_to_be64(0);
	}
}