xfs
[Top] [All Lists]

Re: [PATCH] xfsprogs: remove incorrect l_sectBBsize assignment in xfs_re

To: xfs@xxxxxxxxxxx
Subject: Re: [PATCH] xfsprogs: remove incorrect l_sectBBsize assignment in xfs_repair
From: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
Date: Thu, 10 Oct 2013 10:56:51 -0300
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <5252F0D4.8090209@xxxxxxxxxx>
Mail-followup-to: xfs@xxxxxxxxxxx
References: <5252F0D4.8090209@xxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
This looks good to me,

Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>

On Mon, Oct 07, 2013 at 12:35:16PM -0500, Eric Sandeen wrote:
> Commit e0607266 xfsprogs: add crc format support to repair
> 
> added a 2nd assignment to l_sectBBsize:
> 
>       log.l_sectBBsize = 1 << mp->m_sb.sb_logsectlog;
> 
> which is incorrect; sb_logsectlog is log2 of the sector size,
> in bytes; l_sectBBsize is the size of the log sector in
> 512-byte units.
> 
> So for a 4k sector size log, we were assigning 4096 rather
> than 8.  This broke xlog_find_tail, and caused xfs_repair
> to think that a log was dirty even when it was clean:
> 
> "ERROR: The filesystem has valuable metadata changes in a log"
> 
> (xfs_logprint didn't have this error, so xfs_logprint -t
> agreed that the filesystem really was clean).
> 
> Just remove the incorrect assignment; it was already properly
> assigned about 12 lines prior:
> 
>         log.l_sectBBsize  = BTOBB(x.lbsize);
> 
> and things work again.
> 
> (This worked accidentally for 512-sector devices, because
> we special-case those and set sb_logsectlog to "0" rather
> than 9, so l_sectBBsize came out to "1" (as in 1 sector),
> as it should have).
> 
> Reporteed-by: Markus Trippelsdorf <markus@xxxxxxxxxxxxxxx>
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---
> 
> diff --git a/repair/phase2.c b/repair/phase2.c
> index a62854e..2817fed 100644
> --- a/repair/phase2.c
> +++ b/repair/phase2.c
> @@ -64,7 +64,6 @@ zero_log(xfs_mount_t *mp)
>               ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT);
>       }
>       log.l_sectbb_mask = (1 << log.l_sectbb_log) - 1;
> -     log.l_sectBBsize = 1 << mp->m_sb.sb_logsectlog;
>  
>       if ((error = xlog_find_tail(&log, &head_blk, &tail_blk))) {
>               do_warn(_("zero_log: cannot find log head/tail "
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

-- 
Carlos

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