VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / fs / ext3 / symlink.c
index ae09287..867f713 100644 (file)
 #include <linux/fs.h>
 #include <linux/jbd.h>
 #include <linux/ext3_fs.h>
+#include <linux/namei.h>
 #include "xattr.h"
 
-static int
-ext3_readlink(struct dentry *dentry, char __user *buffer, int buflen)
-{
-       struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-       return vfs_readlink(dentry, buffer, buflen, (char*)ei->i_data);
-}
-
 static int ext3_follow_link(struct dentry *dentry, struct nameidata *nd)
 {
        struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-       return vfs_follow_link(nd, (char*)ei->i_data);
+       nd_set_link(nd, (char*)ei->i_data);
+       return 0;
 }
 
 struct inode_operations ext3_symlink_inode_operations = {
-       .readlink       = page_readlink,
-       .follow_link    = page_follow_link,
+       .readlink       = generic_readlink,
+       .follow_link    = page_follow_link_light,
+       .put_link       = page_put_link,
        .setxattr       = ext3_setxattr,
        .getxattr       = ext3_getxattr,
        .listxattr      = ext3_listxattr,
@@ -45,8 +41,8 @@ struct inode_operations ext3_symlink_inode_operations = {
 };
 
 struct inode_operations ext3_fast_symlink_inode_operations = {
-       .readlink       = ext3_readlink,        /* BKL not held.  Don't need */
-       .follow_link    = ext3_follow_link,     /* BKL not held.  Don't need */
+       .readlink       = generic_readlink,
+       .follow_link    = ext3_follow_link,
        .setxattr       = ext3_setxattr,
        .getxattr       = ext3_getxattr,
        .listxattr      = ext3_listxattr,