Re: [PATCH 2/2] libxfs: fix crc field handling in xfs_sb_to/from_disk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jun 16, 2014 at 06:14:21PM -0500, Eric Sandeen wrote:
> If we xfs_mdrestore an image from a non-crc filesystem, lo
> and behold the restored image has gained a CRC:
> 
> # db/xfs_metadump.sh -o /dev/sdc1 - | xfs_mdrestore - test.img
> # xfs_db -c "sb 0" -c "p crc" /dev/sdc1
> crc = 0 (correct)
> # xfs_db -c "sb 0" -c "p crc" test.img
> crc = 0xb6f8d6a0 (correct)
> 
> This is because xfs_sb_from_disk doesn't fill in sb_crc,
> but xfs_sb_to_disk(XFS_SB_ALL_BITS) does write the in-memory
> CRC to disk - so we get uninitialized memory on disk.
> 
> Fix this by always initializing sb_crc to 0 when we read
> the superblock, and masking out the CRC bit from ALL_BITS
> when we write it.
> 
> This same fix has already been sent for kernelspace.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

>  libxfs/xfs_sb.c |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c
> index 7ee4612..ea89367 100644
> --- a/libxfs/xfs_sb.c
> +++ b/libxfs/xfs_sb.c
> @@ -408,6 +408,8 @@ xfs_sb_from_disk(
>  	to->sb_features_incompat = be32_to_cpu(from->sb_features_incompat);
>  	to->sb_features_log_incompat =
>  				be32_to_cpu(from->sb_features_log_incompat);
> +	/* crc is only used on disk, not in memory; just init to 0 here. */
> +	to->sb_crc = 0;
>  	to->sb_pad = 0;
>  	to->sb_pquotino = be64_to_cpu(from->sb_pquotino);
>  	to->sb_lsn = be64_to_cpu(from->sb_lsn);
> @@ -485,6 +487,9 @@ xfs_sb_to_disk(
>  	if (!fields)
>  		return;
>  
> +	/* We should never write the crc here, it's updated in the IO path */
> +	fields &= ~XFS_SB_CRC;
> +
>  	xfs_sb_quota_to_disk(to, from, &fields);
>  	while (fields) {
>  		f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields);
> -- 
> 1.7.1
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux