|
@@ -835,7 +835,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
|
|
|
set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
|
|
|
req->r_args.mknod.mode = cpu_to_le32(mode);
|
|
|
req->r_args.mknod.rdev = cpu_to_le32(rdev);
|
|
|
- req->r_dentry_drop = CEPH_CAP_FILE_SHARED;
|
|
|
+ req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL;
|
|
|
req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
|
|
|
if (acls.pagelist) {
|
|
|
req->r_pagelist = acls.pagelist;
|
|
@@ -887,7 +887,7 @@ static int ceph_symlink(struct inode *dir, struct dentry *dentry,
|
|
|
set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
|
|
|
req->r_dentry = dget(dentry);
|
|
|
req->r_num_caps = 2;
|
|
|
- req->r_dentry_drop = CEPH_CAP_FILE_SHARED;
|
|
|
+ req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL;
|
|
|
req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
|
|
|
err = ceph_mdsc_do_request(mdsc, dir, req);
|
|
|
if (!err && !req->r_reply_info.head->is_dentry)
|
|
@@ -936,7 +936,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
|
|
req->r_parent = dir;
|
|
|
set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
|
|
|
req->r_args.mkdir.mode = cpu_to_le32(mode);
|
|
|
- req->r_dentry_drop = CEPH_CAP_FILE_SHARED;
|
|
|
+ req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL;
|
|
|
req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
|
|
|
if (acls.pagelist) {
|
|
|
req->r_pagelist = acls.pagelist;
|