vfs: replace calling i_op->readlink with vfs_readlink()
[linux-2.6-block.git] / fs / namei.c
index 5b4eed2215304a14ac2614058ae2b2002a3f2ae9..12a4159de72a93e41d6c272ee416a049be6aa05d 100644 (file)
@@ -4668,6 +4668,27 @@ int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
 }
 EXPORT_SYMBOL(generic_readlink);
 
+/**
+ * vfs_readlink - copy symlink body into userspace buffer
+ * @dentry: dentry on which to get symbolic link
+ * @buffer: user memory pointer
+ * @buflen: size of buffer
+ *
+ * Does not touch atime.  That's up to the caller if necessary
+ *
+ * Does not call security hook.
+ */
+int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
+{
+       struct inode *inode = d_inode(dentry);
+
+       if (!inode->i_op->readlink)
+               return -EINVAL;
+
+       return inode->i_op->readlink(dentry, buffer, buflen);
+}
+EXPORT_SYMBOL(vfs_readlink);
+
 /**
  * vfs_get_link - get symlink body
  * @dentry: dentry on which to get symbolic link