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

Commit 2b2300d6 authored by Sage Weil's avatar Sage Weil
Browse files

ceph: try to send partial cap release on cap message on missing inode



If we have enough memory to allocate a new cap release message, do so, so
that we can send a partial release message immediately.  This keeps us from
making the MDS wait when the cap release it needs is in a partially full
release message.

If we fail because of ENOMEM, oh well, they'll just have to wait a bit
longer.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 3d7ded4d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2708,6 +2708,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
		 * along for the mds (who clearly thinks we still have this
		 * cap).
		 */
		ceph_add_cap_releases(mdsc, session, -1);
		ceph_send_cap_releases(mdsc, session);
		goto done;
	}
+5 −5
Original line number Diff line number Diff line
@@ -1066,7 +1066,7 @@ static int trim_caps(struct ceph_mds_client *mdsc,
 *
 * Called under s_mutex.
 */
static int add_cap_releases(struct ceph_mds_client *mdsc,
int ceph_add_cap_releases(struct ceph_mds_client *mdsc,
			  struct ceph_mds_session *session,
			  int extra)
{
@@ -1980,7 +1980,7 @@ out_err:
	}
	mutex_unlock(&mdsc->mutex);

	add_cap_releases(mdsc, req->r_session, -1);
	ceph_add_cap_releases(mdsc, req->r_session, -1);
	mutex_unlock(&session->s_mutex);

	/* kick calling process */
@@ -2690,7 +2690,7 @@ static void delayed_work(struct work_struct *work)
			send_renew_caps(mdsc, s);
		else
			ceph_con_keepalive(&s->s_con);
		add_cap_releases(mdsc, s, -1);
		ceph_add_cap_releases(mdsc, s, -1);
		if (s->s_state == CEPH_MDS_SESSION_OPEN ||
		    s->s_state == CEPH_MDS_SESSION_HUNG)
			ceph_send_cap_releases(mdsc, s);
+3 −0
Original line number Diff line number Diff line
@@ -322,6 +322,9 @@ static inline void ceph_mdsc_put_request(struct ceph_mds_request *req)
	kref_put(&req->r_kref, ceph_mdsc_release_request);
}

extern int ceph_add_cap_releases(struct ceph_mds_client *mdsc,
				 struct ceph_mds_session *session,
				 int extra);
extern void ceph_send_cap_releases(struct ceph_mds_client *mdsc,
				   struct ceph_mds_session *session);