lkml.org 
[lkml]   [2015]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 68/79] namei: have terminate_walk() do put_link() on everything left
    Date
    From: Al Viro <viro@zeniv.linux.org.uk>

    All callers of terminate_walk() are followed by more or less
    open-coded eqiuvalent of "do put_link() on everything left
    in nd->stack". Better done in terminate_walk() itself, and
    when we go for RCU symlink traversal we'll have to do it
    there anyway.

    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    ---
    fs/namei.c | 10 ++--------
    1 file changed, 2 insertions(+), 8 deletions(-)

    diff --git a/fs/namei.c b/fs/namei.c
    index 0fbc9b7..3faf3e2 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -1554,6 +1554,8 @@ static void terminate_walk(struct nameidata *nd)
    nd->root.mnt = NULL;
    rcu_read_unlock();
    }
    + while (unlikely(nd->depth))
    + put_link(nd);
    }

    /*
    @@ -1848,8 +1850,6 @@ Walked:
    }
    }
    terminate_walk(nd);
    - while (unlikely(nd->depth))
    - put_link(nd);
    return err;
    OK:
    if (!nd->depth) /* called from path_init(), done */
    @@ -2366,8 +2366,6 @@ done:
    error = 0;
    out:
    terminate_walk(nd);
    - if (nd->depth)
    - put_link(nd);
    return error;
    }

    @@ -2970,8 +2968,6 @@ static int do_last(struct nameidata *nd,
    error = handle_dots(nd, nd->last_type);
    if (unlikely(error)) {
    terminate_walk(nd);
    - if (nd->depth)
    - put_link(nd);
    return error;
    }
    goto finish_open;
    @@ -3170,8 +3166,6 @@ out:
    mnt_drop_write(nd->path.mnt);
    path_put(&save_parent);
    terminate_walk(nd);
    - if (nd->depth)
    - put_link(nd);
    return error;

    exit_dput:
    --
    2.1.4


    \
     
     \ /
      Last update: 2015-05-05 07:41    [W:3.146 / U:0.572 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site