xfs
[Top] [All Lists]

Re: [PATCH] xfs_repair: further improvement on secondary superblock sear

To: Bill O'Donnell <billodo@xxxxxxxxxx>
Subject: Re: [PATCH] xfs_repair: further improvement on secondary superblock search method
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Mon, 23 May 2016 07:51:16 -0700
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1463085496-17919-1-git-send-email-billodo@xxxxxxxxxx>
References: <1463085496-17919-1-git-send-email-billodo@xxxxxxxxxx>
User-agent: Mutt/1.5.24 (2015-08-30)
On Thu, May 12, 2016 at 03:38:16PM -0500, Bill O'Donnell wrote:
> +verify_sb_blocksize(xfs_sb_t *sb)
> +{
> +     __uint32_t      bsize;
> +     int             i;
> +
> +     /* check to make sure blocksize is legal 2^N, 9 <= N <= 16 */
> +     if (sb->sb_blocksize == 0)
> +             return(XR_BAD_BLOCKSIZE);
> +
> +     bsize = 1;
> +
> +     for (i = 0; bsize < sb->sb_blocksize &&
> +             i < sizeof(sb->sb_blocksize) * NBBY; i++)
> +             bsize <<= 1;
> +
> +     if (i < XFS_MIN_BLOCKSIZE_LOG || i > XFS_MAX_BLOCKSIZE_LOG)
> +             return(XR_BAD_BLOCKSIZE);
> +
> +     /* check sb blocksize field against sb blocklog field */
> +     if (i != sb->sb_blocklog)
> +             return(XR_BAD_BLOCKLOG);

Couldn't we do this much simpler?

        if (sb->sb_blocksize == 0)
                return XR_BAD_BLOCKSIZE;
        if (sb->sb_blocksize != (1 << sb->sb_blocklog))
                return XR_BAD_BLOCKLOG;
        if (sb->sb_blocklog < XFS_MIN_BLOCKSIZE_LOG ||
            sb->sb_blocklog > XFS_MAX_BLOCKSIZE_LOG)
                return XR_BAD_BLOCKLOG;

>       /*
> +      * Attempt to find secondary sb with a coarse approach,
> +      * first trying agblocks and blocksize read from sb, providing
> +      * they're sane.
>        */
> +     if (verify_sb_blocksize(rsb) == 0) {
> +             skip = rsb->sb_agblocks * rsb->sb_blocksize;
> +             if ((skip >= XFS_AG_MIN_BYTES) && (skip <= XFS_AG_MAX_BYTES))

no need for the inner braces here.

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