From: Sage Weil Date: Thu, 8 May 2008 16:10:04 +0000 (-0700) Subject: kclient: fix up mdsc spinlocking a bit X-Git-Tag: v0.3~251 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f56a91d2c836e1c166f6bcb92ea7095169656572;p=ceph.git kclient: fix up mdsc spinlocking a bit --- diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index 7abdbda6434a..b99cdbc69e1e 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -736,7 +736,7 @@ static void kick_requests(struct ceph_mds_client *mdsc, int mds, int all) } /* - * caller hols s_mutex + * caller holds s_mutex */ static int send_renew_caps(struct ceph_mds_client *mdsc, struct ceph_mds_session *session) @@ -777,6 +777,8 @@ void ceph_mdsc_handle_session(struct ceph_mds_client *mdsc, /* handle */ spin_lock(&mdsc->lock); session = __get_session(mdsc, mds); + spin_unlock(&mdsc->lock); + mutex_lock(&session->s_mutex); was_stale = session->s_cap_ttl == 0 || @@ -832,7 +834,6 @@ void ceph_mdsc_handle_session(struct ceph_mds_client *mdsc, derr(0, "bad session op %d from mds%d\n", op, mds); WARN_ON(1); } - spin_unlock(&mdsc->lock); mutex_unlock(&session->s_mutex); put_session(session); @@ -1266,21 +1267,21 @@ send: (unsigned)reply->front.iov_len, len); send_msg_mds(mdsc, reply, mds); - spin_lock(&mdsc->lock); if (session) { if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) { session->s_state = CEPH_MDS_SESSION_OPEN; complete(&session->s_completion); - } else { + } else dout(0, "WARNING: reconnect on %p raced and lost?\n", session); - } } + out: if (session) { mutex_unlock(&session->s_mutex); put_session(session); } + spin_lock(&mdsc->lock); return; needmore: @@ -1293,7 +1294,6 @@ needmore: goto retry; bad: - spin_lock(&mdsc->lock); derr(0, "error %d generating reconnect. what to do?\n", err); /* fixme */ WARN_ON(1);