|
@@ -6,7 +6,6 @@
|
|
#include <linux/string.h>
|
|
#include <linux/string.h>
|
|
#include <linux/uaccess.h>
|
|
#include <linux/uaccess.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/kernel.h>
|
|
-#include <linux/namei.h>
|
|
|
|
#include <linux/writeback.h>
|
|
#include <linux/writeback.h>
|
|
#include <linux/vmalloc.h>
|
|
#include <linux/vmalloc.h>
|
|
#include <linux/posix_acl.h>
|
|
#include <linux/posix_acl.h>
|
|
@@ -819,6 +818,7 @@ static int fill_inode(struct inode *inode, struct page *locked_page,
|
|
else
|
|
else
|
|
kfree(sym); /* lost a race */
|
|
kfree(sym); /* lost a race */
|
|
}
|
|
}
|
|
|
|
+ inode->i_link = ci->i_symlink;
|
|
break;
|
|
break;
|
|
case S_IFDIR:
|
|
case S_IFDIR:
|
|
inode->i_op = &ceph_dir_iops;
|
|
inode->i_op = &ceph_dir_iops;
|
|
@@ -1691,16 +1691,9 @@ retry:
|
|
/*
|
|
/*
|
|
* symlinks
|
|
* symlinks
|
|
*/
|
|
*/
|
|
-static void *ceph_sym_follow_link(struct dentry *dentry, struct nameidata *nd)
|
|
|
|
-{
|
|
|
|
- struct ceph_inode_info *ci = ceph_inode(d_inode(dentry));
|
|
|
|
- nd_set_link(nd, ci->i_symlink);
|
|
|
|
- return NULL;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static const struct inode_operations ceph_symlink_iops = {
|
|
static const struct inode_operations ceph_symlink_iops = {
|
|
.readlink = generic_readlink,
|
|
.readlink = generic_readlink,
|
|
- .follow_link = ceph_sym_follow_link,
|
|
|
|
|
|
+ .follow_link = simple_follow_link,
|
|
.setattr = ceph_setattr,
|
|
.setattr = ceph_setattr,
|
|
.getattr = ceph_getattr,
|
|
.getattr = ceph_getattr,
|
|
.setxattr = ceph_setxattr,
|
|
.setxattr = ceph_setxattr,
|