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

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

ceph: don't include used caps in cap_wanted



when copying files to cephfs, file data may stay in page cache after
corresponding file is closed. Cached data use Fc capability. If we
include Fc capability in cap_wanted, MDS will treat files with cached
data as open files, and journal them in an EOpen event when trimming
log segment.

Signed-off-by: default avatarYan, Zheng <zyan@redhat.com>
parent 3e0708b9
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -1525,13 +1525,13 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags,
retry_locked:
retry_locked:
	file_wanted = __ceph_caps_file_wanted(ci);
	file_wanted = __ceph_caps_file_wanted(ci);
	used = __ceph_caps_used(ci);
	used = __ceph_caps_used(ci);
	want = file_wanted | used;
	issued = __ceph_caps_issued(ci, &implemented);
	issued = __ceph_caps_issued(ci, &implemented);
	revoking = implemented & ~issued;
	revoking = implemented & ~issued;


	retain = want | CEPH_CAP_PIN;
	want = file_wanted;
	retain = file_wanted | used | CEPH_CAP_PIN;
	if (!mdsc->stopping && inode->i_nlink > 0) {
	if (!mdsc->stopping && inode->i_nlink > 0) {
		if (want) {
		if (file_wanted) {
			retain |= CEPH_CAP_ANY;       /* be greedy */
			retain |= CEPH_CAP_ANY;       /* be greedy */
		} else if (S_ISDIR(inode->i_mode) &&
		} else if (S_ISDIR(inode->i_mode) &&
			   (issued & CEPH_CAP_FILE_SHARED) &&
			   (issued & CEPH_CAP_FILE_SHARED) &&