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

Commit d91f2438 authored by Sage Weil's avatar Sage Weil
Browse files

ceph: update issue_seq on cap grant



We need to update the issue_seq on any grant operation, be it via an MDS
reply or a separate grant message.  The update in the grant path was
missing.  This broke cap release for inodes in which the MDS sent an
explicit grant message that was not soon after followed by a successful
MDS reply on the same inode.

Also fix the signedness on seq locals.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 21b559de
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -2283,7 +2283,8 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant,
{
{
	struct ceph_inode_info *ci = ceph_inode(inode);
	struct ceph_inode_info *ci = ceph_inode(inode);
	int mds = session->s_mds;
	int mds = session->s_mds;
	int seq = le32_to_cpu(grant->seq);
	unsigned seq = le32_to_cpu(grant->seq);
	unsigned issue_seq = le32_to_cpu(grant->issue_seq);
	int newcaps = le32_to_cpu(grant->caps);
	int newcaps = le32_to_cpu(grant->caps);
	int issued, implemented, used, wanted, dirty;
	int issued, implemented, used, wanted, dirty;
	u64 size = le64_to_cpu(grant->size);
	u64 size = le64_to_cpu(grant->size);
@@ -2295,8 +2296,8 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant,
	int revoked_rdcache = 0;
	int revoked_rdcache = 0;
	int queue_invalidate = 0;
	int queue_invalidate = 0;


	dout("handle_cap_grant inode %p cap %p mds%d seq %d %s\n",
	dout("handle_cap_grant inode %p cap %p mds%d seq %u/%u %s\n",
	     inode, cap, mds, seq, ceph_cap_string(newcaps));
	     inode, cap, mds, seq, issue_seq, ceph_cap_string(newcaps));
	dout(" size %llu max_size %llu, i_size %llu\n", size, max_size,
	dout(" size %llu max_size %llu, i_size %llu\n", size, max_size,
		inode->i_size);
		inode->i_size);


@@ -2392,6 +2393,7 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant,
	}
	}


	cap->seq = seq;
	cap->seq = seq;
	cap->issue_seq = issue_seq;


	/* file layout may have changed */
	/* file layout may have changed */
	ci->i_layout = grant->layout;
	ci->i_layout = grant->layout;