[PATCH 05/12] repair: update extent count after zapping duplicate blocks

Mark Tinguely tinguely at sgi.com
Fri Jan 13 11:18:03 CST 2012


On 01/-10/63 13:59, Christoph Hellwig wrote:
> When we find a duplicate extent in an extern format inode we do not zap
> the whole inode, but just truncate it to the point where the duplicate
> extent was found.  But the current code only updates di_nblocks for the
> new size, but no di_nextents/di_anextents.  In most cases this isn't noticed,
> but when moving such an inode to the lost+found directoy the consistency
> check in xfs_iformat trips over it.  Fix this by updating the on-disk
> extent count as part of the inode repair.
>
> Note that we zap btree format inodes with duplicate block completely
> at this point, so this fix doesn't apply to them.
>
> Reported-by: Arkadiusz Mi??kiewicz<arekm at maven.pl>
> Tested-by: Arkadiusz Mi??kiewicz<arekm at maven.pl>
> Signed-off-by: Christoph Hellwig<hch at lst.de>
>
> Index: xfsprogs-dev/repair/dinode.c
> ===================================================================
> --- xfsprogs-dev.orig/repair/dinode.c	2011-11-08 12:15:40.000000000 +0000
> +++ xfsprogs-dev/repair/dinode.c	2011-11-14 12:09:54.000000000 +0000

> @@ -2003,6 +2016,12 @@ process_inode_blocks_and_extents(
>   	xfs_ino_t	lino,
>   	int		*dirty)
>   {
> +	if (nblocks<  nextents + anextents) {
> +		do_warn(
> +_("nblocks (%" PRIu64 ") smaller than nextents for inode %" PRIu64 "\n"), nblocks, lino);
> +		return 1;
> +	}
> +

I agree with David on an inserted comment and relocation. I would not 
have figured out this test without David's observation.

Reviewed-by: Mark Tinguely <tinguely at sgi.com>




More information about the xfs mailing list