lkml.org 
[lkml]   [2009]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] vfs: force reval on dentry of bind mounted files for LOOKUP_OPEN
    Date
    In the case of a bind mounted file, the path walking code will assume
    that a cached dentry is valid and doesn't revalidate it. This is a
    problem for NFSv4 in a way that's similar to LAST_BIND symlinks.

    Fix this by revalidating the dentry if LOOKUP_OPEN is set and
    __follow_mount returns true.

    Signed-off-by: Jeff Layton <jlayton@redhat.com>
    ---
    fs/namei.c | 9 +++++++--
    1 files changed, 7 insertions(+), 2 deletions(-)

    diff --git a/fs/namei.c b/fs/namei.c
    index 5c8ef80..b7c9747 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -839,6 +839,7 @@ static int do_lookup(struct nameidata *nd, struct qstr *name,
    {
    struct vfsmount *mnt = nd->path.mnt;
    struct dentry *dentry = __d_lookup(nd->path.dentry, name);
    + int error = 0;

    if (!dentry)
    goto need_lookup;
    @@ -847,8 +848,9 @@ static int do_lookup(struct nameidata *nd, struct qstr *name,
    done:
    path->mnt = mnt;
    path->dentry = dentry;
    - __follow_mount(path);
    - return 0;
    + if (__follow_mount(path))
    + error = open_reval_path(path, nd);
    + return error;

    need_lookup:
    dentry = real_lookup(nd->path.dentry, name, nd);
    @@ -1836,6 +1838,9 @@ do_last:
    error = -ELOOP;
    if (flag & O_NOFOLLOW)
    goto exit_dput;
    + error = open_reval_path(&path, &nd);
    + if (error)
    + goto exit;
    }

    error = -ENOENT;
    --
    1.5.5.6


    \
     
     \ /
      Last update: 2009-11-10 17:31    [W:3.831 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site