lkml.org 
[lkml]   [2015]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 031/110] namei: don't bother with ->follow_link() if ->i_link is set
    Date
    From: Al Viro <viro@zeniv.linux.org.uk>

    with new calling conventions it's trivial

    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

    Conflicts:
    fs/namei.c
    ---
    fs/namei.c | 20 +++++++++++++-------
    1 file changed, 13 insertions(+), 7 deletions(-)

    diff --git a/fs/namei.c b/fs/namei.c
    index a1ba556..2ffb4af 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -865,11 +865,14 @@ get_link(struct path *link, struct nameidata *nd, void **p)

    nd->last_type = LAST_BIND;
    *p = NULL;
    - res = inode->i_op->follow_link(dentry, p, nd);
    - if (IS_ERR(res)) {
    + res = inode->i_link;
    + if (!res) {
    + res = inode->i_op->follow_link(dentry, p, nd);
    + if (IS_ERR(res)) {
    out:
    - path_put(&nd->path);
    - path_put(link);
    + path_put(&nd->path);
    + path_put(link);
    + }
    }
    return res;
    }
    @@ -4418,11 +4421,14 @@ EXPORT_SYMBOL(readlink_copy);
    int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
    {
    void *cookie;
    - const char *link = dentry->d_inode->i_op->follow_link(dentry, &cookie, NULL);
    + const char *link = dentry->d_inode->i_link;
    int res;

    - if (IS_ERR(link))
    - return PTR_ERR(link);
    + if (!link) {
    + link = dentry->d_inode->i_op->follow_link(dentry, &cookie, NULL);
    + if (IS_ERR(link))
    + return PTR_ERR(link);
    + }
    res = readlink_copy(buffer, buflen, link);
    if (cookie && dentry->d_inode->i_op->put_link)
    dentry->d_inode->i_op->put_link(dentry, cookie);
    --
    2.1.4


    \
     
     \ /
      Last update: 2015-05-11 21:01    [W:4.105 / U:0.368 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site