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@xxxxxxxxxx> 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@xxxxxxxxxx> > > Reported-by: Dr. David Alan Gilbert <linux@xxxxxxxxxxx> > > --- > > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html