]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: separate mds session lookup from ref get
authorSage Weil <sage@newdream.net>
Wed, 7 Jan 2009 23:43:31 +0000 (15:43 -0800)
committerSage Weil <sage@newdream.net>
Wed, 7 Jan 2009 23:43:31 +0000 (15:43 -0800)
src/kernel/caps.c
src/kernel/mds_client.c
src/kernel/mds_client.h
src/kernel/snap.c

index 1a7f7cd0326fc80c93daa9f8c0b9aa8a09eff2f1..c29da0175eba49fa03b0194d73572c0c43d2de11 100644 (file)
@@ -626,7 +626,7 @@ retry:
                if (!session) {
                        spin_unlock(&inode->i_lock);
                        mutex_lock(&mdsc->mutex);
-                       session = __ceph_get_mds_session(mdsc, mds);
+                       session = __ceph_lookup_mds_session(mdsc, mds);
                        mutex_unlock(&mdsc->mutex);
                        if (session) {
                                dout(10, "inverting session/ino locks on %p\n",
@@ -1556,7 +1556,7 @@ void ceph_handle_caps(struct ceph_mds_client *mdsc,
 
        /* find session */
        mutex_lock(&mdsc->mutex);
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        if (session)
                down_write(&mdsc->snap_rwsem);
        mutex_unlock(&mdsc->mutex);
index 098409d66752e4bf433bc9bc6d3ea5d550d0edff..108fc00e0e46d454693fea392fc3abadaca1d758 100644 (file)
@@ -281,7 +281,7 @@ static const char *session_state_name(int s)
 /*
  * called under mdsc->mutex
  */
-struct ceph_mds_session *__ceph_get_mds_session(struct ceph_mds_client *mdsc,
+struct ceph_mds_session *__ceph_lookup_mds_session(struct ceph_mds_client *mdsc,
                                                int mds)
 {
        struct ceph_mds_session *session;
@@ -289,7 +289,7 @@ struct ceph_mds_session *__ceph_get_mds_session(struct ceph_mds_client *mdsc,
        if (mds >= mdsc->max_sessions || mdsc->sessions[mds] == NULL)
                return NULL;
        session = mdsc->sessions[mds];
-       dout(30, "get_mds_session %p %d -> %d\n", session,
+       dout(30, "lookup_mds_session %p %d -> %d\n", session,
             atomic_read(&session->s_ref), atomic_read(&session->s_ref)+1);
        atomic_inc(&session->s_ref);
        return session;
@@ -998,7 +998,7 @@ void ceph_mdsc_handle_session(struct ceph_mds_client *mdsc,
        seq = le64_to_cpu(h->seq);
 
        mutex_lock(&mdsc->mutex);
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        if (session && mdsc->mdsmap)
                /* FIXME: this ttl calculation is generous */
                session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose;
@@ -1194,7 +1194,7 @@ retry:
        }
 
        /* get session */
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        if (!session)
                session = register_session(mdsc, mds);
        dout(30, "do_request mds%d session %p state %s\n", mds, session,
@@ -1317,7 +1317,7 @@ void ceph_mdsc_handle_reply(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
        }
        if (req->r_session && req->r_session->s_mds != mds) {
                ceph_put_mds_session(req->r_session);
-               req->r_session = __ceph_get_mds_session(mdsc, mds);
+               req->r_session = __ceph_lookup_mds_session(mdsc, mds);
        }
        if (req->r_session == NULL) {
                derr(1, "got reply on %llu, but no session for mds%d\n",
@@ -1429,8 +1429,8 @@ void ceph_mdsc_handle_forward(struct ceph_mds_client *mdsc,
                     from_mds);
                req->r_num_fwd = fwd_seq;
                put_request_sessions(req);
-               req->r_session = __ceph_get_mds_session(mdsc, next_mds);
-               req->r_fwd_session = __ceph_get_mds_session(mdsc, from_mds);
+               req->r_session = __ceph_lookup_mds_session(mdsc, next_mds);
+               req->r_fwd_session = __ceph_lookup_mds_session(mdsc, from_mds);
        } else {
                /* no, resend. */
                /* forward race not possible; mds would drop */
@@ -1483,7 +1483,7 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc, int mds)
        dout(1, "reconnect to recovering mds%d\n", mds);
 
        /* find session */
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        if (session) {
                session->s_state = CEPH_MDS_SESSION_RECONNECTING;
                session->s_seq = 0;
@@ -1752,7 +1752,7 @@ void ceph_mdsc_handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
 
        /* find session */
        mutex_lock(&mdsc->mutex);
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        mutex_unlock(&mdsc->mutex);
        if (!session) {
                derr(0, "WTF, got lease but no session for mds%d\n", mds);
@@ -1908,7 +1908,7 @@ static void delayed_work(struct work_struct *work)
                mdsc->last_renew_caps = jiffies;
 
        for (i = 0; i < mdsc->max_sessions; i++) {
-               struct ceph_mds_session *s = __ceph_get_mds_session(mdsc, i);
+               struct ceph_mds_session *s = __ceph_lookup_mds_session(mdsc, i);
                if (s == NULL)
                        continue;
                if (s->s_state == CEPH_MDS_SESSION_CLOSING) {
@@ -2047,7 +2047,7 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc)
                dout(10, "closing sessions\n");
                n = 0;
                for (i = 0; i < mdsc->max_sessions; i++) {
-                       session = __ceph_get_mds_session(mdsc, i);
+                       session = __ceph_lookup_mds_session(mdsc, i);
                        if (!session)
                                continue;
                        mutex_unlock(&mdsc->mutex);
index 7196d0f7596f56a2cc8d80790c1ea8a20ad1454b..fa2280b018d5263f8a262ba99ab3392b621b5e51 100644 (file)
@@ -207,8 +207,15 @@ struct ceph_mds_client {
 
 extern const char *ceph_mds_op_name(int op);
 
-extern struct ceph_mds_session *__ceph_get_mds_session(struct ceph_mds_client *,
-                                                      int mds);
+extern struct ceph_mds_session *
+__ceph_lookup_mds_session(struct ceph_mds_client *, int mds);
+
+inline static struct ceph_mds_session *
+ceph_get_mds_session(struct ceph_mds_session *s)
+{
+       atomic_inc(&s->s_ref);
+       return s;
+}
 extern void ceph_put_mds_session(struct ceph_mds_session *s);
 
 extern void ceph_send_msg_mds(struct ceph_mds_client *mdsc,
index 27d08899178adb7c65a2b351055315f0793e4e1b..20fa01111a1cd8592dc6d03216b4f6e7ceae81f1 100644 (file)
@@ -607,7 +607,7 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
 
        /* find session */
        mutex_lock(&mdsc->mutex);
-       session = __ceph_get_mds_session(mdsc, mds);
+       session = __ceph_lookup_mds_session(mdsc, mds);
        if (session)
                down_write(&mdsc->snap_rwsem);
        mutex_unlock(&mdsc->mutex);