|
@@ -629,7 +629,7 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
|
|
|
struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
|
|
|
struct inode *inode = dentry->d_inode;
|
|
|
struct ceph_inode_info *ci = ceph_inode(inode);
|
|
|
- struct inode *parent_inode = dentry->d_parent->d_inode;
|
|
|
+ struct inode *parent_inode;
|
|
|
struct ceph_mds_request *req;
|
|
|
struct ceph_mds_client *mdsc = fsc->mdsc;
|
|
|
int err;
|
|
@@ -677,7 +677,9 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
|
|
|
req->r_data_len = size;
|
|
|
|
|
|
dout("xattr.ver (before): %lld\n", ci->i_xattrs.version);
|
|
|
+ parent_inode = ceph_get_dentry_parent_inode(dentry);
|
|
|
err = ceph_mdsc_do_request(mdsc, parent_inode, req);
|
|
|
+ iput(parent_inode);
|
|
|
ceph_mdsc_put_request(req);
|
|
|
dout("xattr.ver (after): %lld\n", ci->i_xattrs.version);
|
|
|
|
|
@@ -788,7 +790,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
|
|
|
struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
|
|
|
struct ceph_mds_client *mdsc = fsc->mdsc;
|
|
|
struct inode *inode = dentry->d_inode;
|
|
|
- struct inode *parent_inode = dentry->d_parent->d_inode;
|
|
|
+ struct inode *parent_inode;
|
|
|
struct ceph_mds_request *req;
|
|
|
int err;
|
|
|
|
|
@@ -802,7 +804,9 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
|
|
|
req->r_num_caps = 1;
|
|
|
req->r_path2 = kstrdup(name, GFP_NOFS);
|
|
|
|
|
|
+ parent_inode = ceph_get_dentry_parent_inode(dentry);
|
|
|
err = ceph_mdsc_do_request(mdsc, parent_inode, req);
|
|
|
+ iput(parent_inode);
|
|
|
ceph_mdsc_put_request(req);
|
|
|
return err;
|
|
|
}
|