lkml.org 
[lkml]   [2009]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3] vfs: force reval on dentry of bind mounted files on FS_REVAL_DOT filesystems
    Date
    In the case of a bind mounted file, the path walking code will assume
    that the cached dentry that was bind mounted is valid. This is a problem
    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 2c10519..738b257 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -838,6 +838,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;
    @@ -846,8 +847,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 = force_reval_path(path, nd);
    + return error;

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

    error = -ENOENT;
    --
    1.5.5.6


    \
     
     \ /
      Last update: 2009-11-23 18:43    [W:0.022 / U:0.192 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site