summaryrefslogtreecommitdiff
path: root/fs/devfs/base.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/devfs/base.c')
-rw-r--r--fs/devfs/base.c26
1 files changed, 4 insertions, 22 deletions
diff --git a/fs/devfs/base.c b/fs/devfs/base.c
index deab8f23ffa1..b0fb34873825 100644
--- a/fs/devfs/base.c
+++ b/fs/devfs/base.c
@@ -2490,29 +2490,11 @@ static int devfs_mknod(struct inode *dir, struct dentry *dentry, int mode,
return 0;
} /* End Function devfs_mknod */
-static int devfs_readlink(struct dentry *dentry, char __user *buffer,
- int buflen)
-{
- int err;
- struct devfs_entry *de;
-
- de = get_devfs_entry_from_vfs_inode(dentry->d_inode);
- if (!de)
- return -ENODEV;
- err = vfs_readlink(dentry, buffer, buflen, de->u.symlink.linkname);
- return err;
-} /* End Function devfs_readlink */
-
static int devfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
- int err;
- struct devfs_entry *de;
-
- de = get_devfs_entry_from_vfs_inode(dentry->d_inode);
- if (!de)
- return -ENODEV;
- err = vfs_follow_link(nd, de->u.symlink.linkname);
- return err;
+ struct devfs_entry *p = get_devfs_entry_from_vfs_inode(dentry->d_inode);
+ nd_set_link(nd, p ? p->u.symlink.linkname : ERR_PTR(-ENODEV));
+ return 0;
} /* End Function devfs_follow_link */
static struct inode_operations devfs_iops = {
@@ -2530,7 +2512,7 @@ static struct inode_operations devfs_dir_iops = {
};
static struct inode_operations devfs_symlink_iops = {
- .readlink = devfs_readlink,
+ .readlink = generic_readlink,
.follow_link = devfs_follow_link,
.setattr = devfs_notify_change,
};