Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32ec4397 authored by Yan, Zheng's avatar Yan, Zheng Committed by Ilya Dryomov
Browse files

ceph: hold on to exclusive caps on complete directories



If a directory is complete, we want to keep the exclusive
cap. So that MDS does not end up revoking the shared cap
on every create/unlink operation.

Signed-off-by: default avatarYan, Zheng <zyan@redhat.com>
parent 9571eb4f
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1561,7 +1561,19 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags,
	if (!mdsc->stopping && inode->i_nlink > 0) {
		if (want) {
			retain |= CEPH_CAP_ANY;       /* be greedy */
		} else if (S_ISDIR(inode->i_mode) &&
			   (issued & CEPH_CAP_FILE_SHARED) &&
			    __ceph_dir_is_complete(ci)) {
			/*
			 * If a directory is complete, we want to keep
			 * the exclusive cap. So that MDS does not end up
			 * revoking the shared cap on every create/unlink
			 * operation.
			 */
			want = CEPH_CAP_ANY_SHARED | CEPH_CAP_FILE_EXCL;
			retain |= want;
		} else {

			retain |= CEPH_CAP_ANY_SHARED;
			/*
			 * keep RD only if we didn't have the file open RW,