Skip to content

Commit

Permalink
ceph: try to send partial cap release on cap message on missing inode
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
liewegas committed Jun 10, 2010
1 parent 3d7ded4 commit 2b2300d
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
1 change: 1 addition & 0 deletions fs/ceph/caps.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
10 changes: 5 additions & 5 deletions fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -1066,9 +1066,9 @@ static int trim_caps(struct ceph_mds_client *mdsc,
*
* Called under s_mutex.
*/
static int add_cap_releases(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session,
int extra)
int ceph_add_cap_releases(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session,
int extra)
{
struct ceph_msg *msg;
struct ceph_mds_cap_release *head;
Expand Down Expand Up @@ -1980,7 +1980,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
}
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 */
Expand Down Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions fs/ceph/mds_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit 2b2300d

Please sign in to comment.