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

Commit 3d497d85 authored by Yehuda Sadeh's avatar Yehuda Sadeh Committed by Sage Weil
Browse files

ceph: fix truncation when not holding caps



A truncation should occur when either we have the
specified caps for the file, or (in cases where we are
not the only ones referencing the file) when it is mapped
or when it is opened. The latter two cases were not
handled.

Signed-off-by: default avatarYehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 4af6b225
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -416,9 +416,17 @@ int ceph_fill_file_size(struct inode *inode, int issued,
			dout("truncate_seq %u -> %u\n",
			     ci->i_truncate_seq, truncate_seq);
			ci->i_truncate_seq = truncate_seq;
			if (issued & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_RD|
			/*
			 * If we hold relevant caps, or in the case where we're
			 * not the only client referencing this file and we
			 * don't hold those caps, then we need to check whether
			 * the file is either opened or mmaped
			 */
			if ((issued & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_RD|
				      CEPH_CAP_FILE_WR|CEPH_CAP_FILE_BUFFER|
				      CEPH_CAP_FILE_EXCL)) {
				      CEPH_CAP_FILE_EXCL)) ||
			    mapping_mapped(inode->i_mapping) ||
			    __ceph_caps_file_wanted(ci)) {
				ci->i_truncate_pending++;
				queue_trunc = 1;
			}