xfs
[Top] [All Lists]

Re: [PATCH V2] xfs_repair: print superblock offsets and why they can't b

To: xfs@xxxxxxxxxxx
Subject: Re: [PATCH V2] xfs_repair: print superblock offsets and why they can't be verified
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Thu, 23 Oct 2008 08:53:10 -0500
In-reply-to: <20081022234128.GC4395@kyra>
References: <20081022183636.GE20550@kyra> <20081022234128.GC4395@kyra>
User-agent: Thunderbird 2.0.0.17 (Macintosh/20080914)
KELEMEN Peter wrote:
> Eric has pointed out that verify_set_primary_sb() will either
> return 1 or XR_INSUFF_SEC_SB.  Move the check lower into
> verify_set_primary_sb() by checking the return value of
> verify_sb().  Example output:
> 
> found candidate secondary superblock...
> verifying sb at 31249334272: bad magic number (1)
> verifying sb at 62498668544: bad magic number (1)
> verifying sb at 93748002816: bad magic number (1)
> verifying sb at 124997337088: bad magic number (1)
> unable to verify superblock, continuing...
> 

This looks better :)  You may want to add even more info...

while it's just searching block by block, if it finds a candidate, I'd
print the sector offset for that candidate (your first output line).

And rather than "verifying sb at..." you might do something like
"comparing to sb N at offset X":

+       } else {
+               do_warn("comparing with sb %d at sector %Lu failed: %s (%d)\n",
+                       agno, off, err_string(reason), reason);

because at this point it's using the geometry of the candidate sb to see
if it can be used to find enough other valid sb's....

-Eric


> Signed-off-by: KELEMEN Peter <Peter.Kelemen@xxxxxxx>
> 
> Index: xfsprogs/repair/sb.c
> ===================================================================
> RCS file: /cvs/xfs-cmds/xfsprogs/repair/sb.c,v
> retrieving revision 1.22
> diff -u -u -r1.22 sb.c
> --- xfsprogs/repair/sb.c      8 Sep 2008 06:18:43 -0000       1.22
> +++ xfsprogs/repair/sb.c      22 Oct 2008 23:17:27 -0000
> @@ -683,6 +683,7 @@
>       int             num_ok;
>       int             retval;
>       int             round;
> +     int             reason; /* why the sb check failed */
>  
>       /*
>        * select the number of secondaries to try for
> @@ -727,7 +728,7 @@
>                               goto out;
>                       }
>  
> -                     if (verify_sb(sb, 0) == XR_OK)  {
> +                     if ((reason = verify_sb(sb, 0)) == XR_OK)  {
>                               /*
>                                * save away geometry info.
>                                * don't bother checking the sb
> @@ -740,6 +741,9 @@
>                               get_sb_geometry(&geo, sb);
>                               list = add_geo(list, &geo, agno);
>                               num_ok++;
> +                     } else {
> +                             do_warn("verifying sb at %Lu: %s (%d)\n",
> +                                     off, err_string(reason), reason);
>                       }
>               }
>       }
> 
> 

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