Commit 31b6ceac authored by M. Mohan Kumar's avatar M. Mohan Kumar Committed by Eric Van Hensbergen

fs/9p: TREADLINK bugfix

Remove v9fs_vfs_readlink_dotl function and use generic_readlink. Update
v9fs_vfs_follow_link_dotl function to accommodate this change
Signed-off-by: default avatarM. Mohan Kumar <mohan@in.ibm.com>
Reported-by: default avatarDr. David Alan Gilbert <linux@treblig.org>
Signed-off-by: default avatarVenkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent 219fd58b
...@@ -755,30 +755,6 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode, ...@@ -755,30 +755,6 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode,
return err; 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 * v9fs_vfs_follow_link_dotl - follow a symlink path
* @dentry: dentry for symlink * @dentry: dentry for symlink
...@@ -789,23 +765,33 @@ v9fs_vfs_readlink_dotl(struct dentry *dentry, char *buffer, int buflen) ...@@ -789,23 +765,33 @@ v9fs_vfs_readlink_dotl(struct dentry *dentry, char *buffer, int buflen)
static void * static void *
v9fs_vfs_follow_link_dotl(struct dentry *dentry, struct nameidata *nd) v9fs_vfs_follow_link_dotl(struct dentry *dentry, struct nameidata *nd)
{ {
int len = 0; int retval;
struct p9_fid *fid;
char *link = __getname(); 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) if (!link) {
link = ERR_PTR(-ENOMEM); link = ERR_PTR(-ENOMEM);
else { goto ndset;
len = v9fs_vfs_readlink_dotl(dentry, link, PATH_MAX); }
if (len < 0) { fid = v9fs_fid_lookup(dentry);
if (IS_ERR(fid)) {
__putname(link); __putname(link);
link = ERR_PTR(len); link = ERR_PTR(PTR_ERR(fid));
} else goto ndset;
link[min(len, PATH_MAX-1)] = 0;
} }
retval = p9_client_readlink(fid, &target);
if (!retval) {
strcpy(link, target);
kfree(target);
goto ndset;
}
__putname(link);
link = ERR_PTR(retval);
ndset:
nd_set_link(nd, link); nd_set_link(nd, link);
return NULL; return NULL;
} }
...@@ -839,7 +825,7 @@ const struct inode_operations v9fs_file_inode_operations_dotl = { ...@@ -839,7 +825,7 @@ const struct inode_operations v9fs_file_inode_operations_dotl = {
}; };
const struct inode_operations v9fs_symlink_inode_operations_dotl = { const struct inode_operations v9fs_symlink_inode_operations_dotl = {
.readlink = v9fs_vfs_readlink_dotl, .readlink = generic_readlink,
.follow_link = v9fs_vfs_follow_link_dotl, .follow_link = v9fs_vfs_follow_link_dotl,
.put_link = v9fs_vfs_put_link, .put_link = v9fs_vfs_put_link,
.getattr = v9fs_vfs_getattr_dotl, .getattr = v9fs_vfs_getattr_dotl,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment