Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / fs / ext2 / symlink.c
index b282670..f86ceeb 100644 (file)
 
 #include "ext2.h"
 #include "xattr.h"
+#include <linux/namei.h>
 
-static int
-ext2_readlink(struct dentry *dentry, char __user *buffer, int buflen)
+static void *ext2_follow_link(struct dentry *dentry, struct nameidata *nd)
 {
        struct ext2_inode_info *ei = EXT2_I(dentry->d_inode);
-       return vfs_readlink(dentry, buffer, buflen, (char *)ei->i_data);
-}
-
-static int ext2_follow_link(struct dentry *dentry, struct nameidata *nd)
-{
-       struct ext2_inode_info *ei = EXT2_I(dentry->d_inode);
-       return vfs_follow_link(nd, (char *)ei->i_data);
+       nd_set_link(nd, (char *)ei->i_data);
+       return NULL;
 }
 
 struct inode_operations ext2_symlink_inode_operations = {
-       .readlink       = page_readlink,
-       .follow_link    = page_follow_link,
-       .setxattr       = ext2_setxattr,
-       .getxattr       = ext2_getxattr,
+       .readlink       = generic_readlink,
+       .follow_link    = page_follow_link_light,
+       .put_link       = page_put_link,
+#ifdef CONFIG_EXT2_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
        .listxattr      = ext2_listxattr,
-       .removexattr    = ext2_removexattr,
+       .removexattr    = generic_removexattr,
+#endif
+       .sync_flags     = ext2_sync_flags,
 };
  
 struct inode_operations ext2_fast_symlink_inode_operations = {
-       .readlink       = ext2_readlink,
+       .readlink       = generic_readlink,
        .follow_link    = ext2_follow_link,
-       .setxattr       = ext2_setxattr,
-       .getxattr       = ext2_getxattr,
+#ifdef CONFIG_EXT2_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
        .listxattr      = ext2_listxattr,
-       .removexattr    = ext2_removexattr,
+       .removexattr    = generic_removexattr,
+#endif
+       .sync_flags     = ext2_sync_flags,
 };