lkml.org 
[lkml]   [2011]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] [V2] fs/9p: TREADLINK bugfix
    Date
    Thanks Aneesh, I will be posting the patch with addressing your comments.

    On Thursday 06 January 2011 10:50:26 am Aneesh Kumar K. V wrote:
    > On Wed, 5 Jan 2011 22:19:56 +0530, "M. Mohan Kumar" <mohan@in.ibm.com>
    wrote:
    > > Remove v9fs_vfs_readlink_dotl function and use generic_readlink. Update
    > > v9fs_vfs_follow_link_dotl function to accommodate this change
    > >
    > > Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
    > > Reported-by: Dr. David Alan Gilbert <linux@treblig.org>
    > > ---
    > > Changes from previous version:
    > > * Use __getname in v9fs_vfs_follow_link_dotl
    > > * Remove v9fs_vfs_readlink_dotl function
    > >
    > > fs/9p/vfs_inode.c | 53
    > > +++++++++++++++++------------------------------------ 1 files changed,
    > > 17 insertions(+), 36 deletions(-)
    > >
    > > diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
    > > index 2ce3668..7e613e8 100644
    > > --- a/fs/9p/vfs_inode.c
    > > +++ b/fs/9p/vfs_inode.c
    > >
    > > @@ -1994,30 +1994,6 @@ error:
    > > return err;
    > >
    > > }
    > >
    > > -static int
    > > -v9fs_vfs_readlink_dotl(struct dentry *dentry, char *buffer, int buflen)
    > > -{
    > > - int retval;
    > > - struct p9_fid *fid;
    > > - char *target = NULL;
    > > -
    > > - P9_DPRINTK(P9_DEBUG_VFS, " %s\n", dentry->d_name.name);
    > > - retval = -EPERM;
    > > - fid = v9fs_fid_lookup(dentry);
    > > - if (IS_ERR(fid))
    > > - return PTR_ERR(fid);
    > > -
    > > - retval = p9_client_readlink(fid, &target);
    > > - if (retval < 0)
    > > - return retval;
    > > -
    > > - strncpy(buffer, target, buflen);
    > > - P9_DPRINTK(P9_DEBUG_VFS, "%s -> %s\n", dentry->d_name.name, buffer);
    > > -
    > > - retval = strnlen(buffer, buflen);
    > > - return retval;
    > > -}
    > > -
    > >
    > > /**
    > >
    > > * v9fs_vfs_follow_link_dotl - follow a symlink path
    > > * @dentry: dentry for symlink
    > >
    > > @@ -2028,23 +2004,28 @@ v9fs_vfs_readlink_dotl(struct dentry *dentry,
    > > char *buffer, int buflen)
    > >
    > > static void *
    > > v9fs_vfs_follow_link_dotl(struct dentry *dentry, struct nameidata *nd)
    > > {
    > >
    > > - int len = 0;
    > > + int retval;
    > > + struct p9_fid *fid;
    > >
    > > char *link = __getname();
    > >
    > > + char *target;
    > >
    > > - P9_DPRINTK(P9_DEBUG_VFS, "%s n", dentry->d_name.name);
    > > + P9_DPRINTK(P9_DEBUG_VFS, "%s\n", dentry->d_name.name);
    > >
    > > if (!link)
    > >
    > > - link = ERR_PTR(-ENOMEM);
    > > - else {
    > > - len = v9fs_vfs_readlink_dotl(dentry, link, PATH_MAX);
    > > - if (len < 0) {
    > > - __putname(link);
    > > - link = ERR_PTR(len);
    > > - } else
    > > - link[min(len, PATH_MAX-1)] = 0;
    > > + return NULL;
    > > + fid = v9fs_fid_lookup(dentry);
    > > + if (IS_ERR(fid))
    > > + return fid;
    >
    > need to do a __putname(link) and do a nd_set_link(nd, ERR_PTR(fid))
    >
    > > + retval = p9_client_readlink(fid, &target);
    > > + if (retval < 0) {
    > > + __putname(link);
    > > + kfree(target);
    >
    > On error target should not be allocated right ? So why kfree ?
    >
    > > + return NULL;
    > >
    > > }
    > >
    > > - nd_set_link(nd, link);
    > >
    > > + strcpy(link, target);
    > > + nd_set_link(nd, link);
    > > + kfree(target);
    > >
    > > return NULL;
    > >
    > > }
    >
    > -aneesh

    ----
    M. Mohan Kumar


    \
     
     \ /
      Last update: 2011-01-06 06:57    [W:0.026 / U:2.632 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site