xfs
[Top] [All Lists]

Re: [PATCH 12/13 V2] xfs_repair: don't clear . or .. in process_dir2_dat

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [PATCH 12/13 V2] xfs_repair: don't clear . or .. in process_dir2_data
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Tue, 24 Mar 2015 08:07:51 -0400
Cc: Eric Sandeen <sandeen@xxxxxxxxxx>, xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <551074F6.80706@xxxxxxxxxxx>
References: <1426624395-8258-1-git-send-email-sandeen@xxxxxxxxxx> <1426624395-8258-13-git-send-email-sandeen@xxxxxxxxxx> <551074F6.80706@xxxxxxxxxxx>
User-agent: Mutt/1.5.23 (2014-03-12)
On Mon, Mar 23, 2015 at 03:17:58PM -0500, Eric Sandeen wrote:
> process_dir2_data() has special . and .. processing; it is able
> to correct these inodes, so there is no reason to clear them.
> 
> Do this before we adjust a length 0 filename to length 1, so
> that we don't take this action on an accidentally created "."
> name from a hidden dotfile.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

> 
> V2: Move the new hunk up, before we possibly reset the namelen to 1; 
> a 0-length ".hidden" file could turn in a length-1 "." and not get
> cleared.
> 
> diff --git a/repair/dir2.c b/repair/dir2.c
> index 9e6c67d..8ecc29b 100644
> --- a/repair/dir2.c
> +++ b/repair/dir2.c
> @@ -1318,6 +1318,18 @@ _("entry \"%*.*s\" at block %d offset %" PRIdPTR " in 
> directory inode %" PRIu64
>                               dep->namelen, dep->namelen, dep->name,
>                               da_bno, (intptr_t)ptr - (intptr_t)d, ino,
>                               clearreason, ent_ino);
> +
> +             /*
> +              * We have a special dot & dotdot fixer-upper below which can
> +              * sort out the proper inode number, so don't clear it.
> +              */
> +             if ((dep->namelen == 1 && dep->name[0] == '.') ||
> +                 (dep->namelen == 2 &&
> +                  dep->name[0] == '.' && dep->name[1] == '.')) {
> +                     clearino = 0;
> +                     clearreason = NULL;
> +             }
> +
>               /*
>                * If the name length is 0 (illegal) make it 1 and blast
>                * the entry.
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

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