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: Sage Weil <sage@newdream.net>

Sage Weil 2b2300d6 3d7ded4d

+9 -5
+1
fs/ceph/caps.c
··· 2708 2708 * along for the mds (who clearly thinks we still have this 2709 2709 * cap). 2710 2710 */ 2711 + ceph_add_cap_releases(mdsc, session, -1); 2711 2712 ceph_send_cap_releases(mdsc, session); 2712 2713 goto done; 2713 2714 }
+5 -5
fs/ceph/mds_client.c
··· 1066 1066 * 1067 1067 * Called under s_mutex. 1068 1068 */ 1069 - static int add_cap_releases(struct ceph_mds_client *mdsc, 1070 - struct ceph_mds_session *session, 1071 - int extra) 1069 + int ceph_add_cap_releases(struct ceph_mds_client *mdsc, 1070 + struct ceph_mds_session *session, 1071 + int extra) 1072 1072 { 1073 1073 struct ceph_msg *msg; 1074 1074 struct ceph_mds_cap_release *head; ··· 1980 1980 } 1981 1981 mutex_unlock(&mdsc->mutex); 1982 1982 1983 - add_cap_releases(mdsc, req->r_session, -1); 1983 + ceph_add_cap_releases(mdsc, req->r_session, -1); 1984 1984 mutex_unlock(&session->s_mutex); 1985 1985 1986 1986 /* kick calling process */ ··· 2690 2690 send_renew_caps(mdsc, s); 2691 2691 else 2692 2692 ceph_con_keepalive(&s->s_con); 2693 - add_cap_releases(mdsc, s, -1); 2693 + ceph_add_cap_releases(mdsc, s, -1); 2694 2694 if (s->s_state == CEPH_MDS_SESSION_OPEN || 2695 2695 s->s_state == CEPH_MDS_SESSION_HUNG) 2696 2696 ceph_send_cap_releases(mdsc, s);
+3
fs/ceph/mds_client.h
··· 322 322 kref_put(&req->r_kref, ceph_mdsc_release_request); 323 323 } 324 324 325 + extern int ceph_add_cap_releases(struct ceph_mds_client *mdsc, 326 + struct ceph_mds_session *session, 327 + int extra); 325 328 extern void ceph_send_cap_releases(struct ceph_mds_client *mdsc, 326 329 struct ceph_mds_session *session); 327 330