lkml.org 
[lkml]   [2012]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 43/73] union-mount: Process negative dentries in __lookup_union() [ver #2]
    Date
    From: Valerie Aurora <vaurora@redhat.com>

    Whiteouts end a union lookup. So do opaque directories, unless
    specific fallthru entry exists for this name.

    Original-author: Valerie Aurora <vaurora@redhat.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    ---

    fs/namei.c | 22 +++++++++++++++++++++-
    1 files changed, 21 insertions(+), 1 deletions(-)

    diff --git a/fs/namei.c b/fs/namei.c
    index 8caed86..009d9b5 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -1163,11 +1163,31 @@ static int __lookup_union(struct nameidata *nd, struct qstr *name,
    err = PTR_ERR(lower.dentry);
    goto out_err;
    }
    - /* XXX - do nothing, lookup rule processing in later patches */
    +
    + /* A negative dentry can mean several things: a plain negative
    + * dentry is ignored and lookup continues to the next layer,
    + * but a whiteout or a non-fallthru in an opaque dir covers
    + * everything below it.
    + */
    + if (!lower.dentry->d_inode) {
    + if (d_is_whiteout(lower.dentry))
    + goto out_lookup_done;
    + if (IS_OPAQUE(nd->path.dentry->d_inode) &&
    + !d_is_fallthru(lower.dentry))
    + goto out_lookup_done;
    + path_put(&lower);
    + continue;
    + }
    +
    + /* XXX - do nothing, more in later patches */
    path_put(&lower);
    }
    return 0;

    +out_lookup_done:
    + path_put(&lower);
    + return 0;
    +
    out_err:
    d_free_unions(topmost->dentry);
    path_put(&lower);


    \
     
     \ /
      Last update: 2012-02-21 19:11    [W:0.021 / U:29.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site