]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: simplify con_open/close interface a bit
authorSage Weil <sage@newdream.net>
Thu, 3 Sep 2009 21:36:17 +0000 (14:36 -0700)
committerSage Weil <sage@newdream.net>
Thu, 3 Sep 2009 21:36:17 +0000 (14:36 -0700)
No more 'reopen' hackery.

src/kernel/mds_client.c
src/kernel/messenger.c
src/kernel/messenger.h
src/kernel/mon_client.c
src/kernel/osd_client.c

index e41eb71cf156b581117506420caa5e43343b73e7..88257637502d09a52f650f5c1224dee10020f59d 100644 (file)
@@ -275,7 +275,7 @@ void ceph_put_mds_session(struct ceph_mds_session *s)
        dout("mdsc put_session %p %d -> %d\n", s,
             atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1);
        if (atomic_dec_and_test(&s->s_ref)) {
-               ceph_con_destroy(&s->s_con);
+               ceph_con_shutdown(&s->s_con);
                kfree(s);
        }
 }
@@ -321,12 +321,12 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
        s->s_seq = 0;
        mutex_init(&s->s_mutex);
 
-       ceph_con_init(mdsc->client->msgr, &s->s_con,
-                     ceph_mdsmap_get_addr(mdsc->mdsmap, mds));
+       ceph_con_init(mdsc->client->msgr, &s->s_con);
        s->s_con.private = s;
        s->s_con.ops = &mds_con_ops;
        s->s_con.peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_MDS);
        s->s_con.peer_name.num = cpu_to_le32(mds);
+       ceph_con_open(&s->s_con, ceph_mdsmap_get_addr(mdsc->mdsmap, mds));
 
        spin_lock_init(&s->s_cap_lock);
        s->s_cap_gen = 0;
@@ -2050,8 +2050,8 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc, int mds)
                session->s_state = CEPH_MDS_SESSION_RECONNECTING;
                session->s_seq = 0;
 
-               ceph_con_reopen(&session->s_con,
-                               ceph_mdsmap_get_addr(mdsc->mdsmap, mds));
+               ceph_con_open(&session->s_con,
+                             ceph_mdsmap_get_addr(mdsc->mdsmap, mds));
 
                /* replay unsafe requests */
                replay_unsafe_requests(mdsc, session);
index e1c95290b70fa1908027f12a51904dcaa7f189b8..3f3ae7810b114d390bc33b54dd10e228309f7ad9 100644 (file)
@@ -266,9 +266,9 @@ void ceph_con_close(struct ceph_connection *con)
 /*
  * clean up connection state
  */
-void ceph_con_destroy(struct ceph_connection *con)
+void ceph_con_shutdown(struct ceph_connection *con)
 {
-       dout("con_destroy %p destroying\n", con);
+       dout("con_shutdown %p\n", con);
        reset_connection(con);
        set_bit(DEAD, &con->state);
        con_close_socket(con); /* silently ignore errors */
@@ -277,11 +277,10 @@ void ceph_con_destroy(struct ceph_connection *con)
 /*
  * Reopen a closed connection, with a new peer address.
  */
-void ceph_con_reopen(struct ceph_connection *con, struct ceph_entity_addr *addr)
+void ceph_con_open(struct ceph_connection *con, struct ceph_entity_addr *addr)
 {
-       dout("con_reopen %p %u.%u.%u.%u:%u\n", con, IPQUADPORT(addr->ipaddr));
-       BUG_ON(!test_bit(CLOSED, &con->state));
-       set_bit(REOPEN, &con->state);
+       dout("con_open %p %u.%u.%u.%u:%u\n", con, IPQUADPORT(addr->ipaddr));
+       set_bit(OPENING, &con->state);
        clear_bit(CLOSED, &con->state);
        memcpy(&con->peer_addr, addr, sizeof(*addr));
        queue_con(con);
@@ -305,7 +304,7 @@ void ceph_con_put(struct ceph_connection *con)
             atomic_read(&con->nref), atomic_read(&con->nref) - 1);
        BUG_ON(atomic_read(&con->nref) == 0);
        if (atomic_dec_and_test(&con->nref)) {
-               ceph_con_destroy(con);
+               ceph_con_shutdown(con);
                kfree(con);
        }
 }
@@ -315,18 +314,15 @@ void ceph_con_put(struct ceph_connection *con)
  *
  * NOTE: assumes struct is initially zeroed!
  */
-void ceph_con_init(struct ceph_messenger *msgr, struct ceph_connection *con,
-                  struct ceph_entity_addr *addr)
+void ceph_con_init(struct ceph_messenger *msgr, struct ceph_connection *con)
 {
-       dout("con_init %p %u.%u.%u.%u:%u\n", con, IPQUADPORT(addr->ipaddr));
+       dout("con_init %p\n", con);
        atomic_set(&con->nref, 1);
        con->msgr = msgr;
        spin_lock_init(&con->out_queue_lock);
        INIT_LIST_HEAD(&con->out_queue);
        INIT_LIST_HEAD(&con->out_sent);
        INIT_DELAYED_WORK(&con->work, con_work);
-       con->peer_addr = *addr;
-
        con->private = NULL;
 }
 
@@ -1455,9 +1451,9 @@ more:
                con_close_socket(con);
                goto done;
        }
-       if (test_and_clear_bit(REOPEN, &con->state)) {
+       if (test_and_clear_bit(OPENING, &con->state)) {
                /* reopen w/ new peer */
-               dout("con_work REOPEN\n");
+               dout("con_work OPENING\n");
                con_close_socket(con);
        }
        if (test_bit(WAIT, &con->state)) {   /* we are a zombie */
index 37da5637f3daa0c1b508d7fd023a9bee9b4f9bb9..8e94bbafe6f25c032f7470ef6179c234c57117d3 100644 (file)
@@ -136,7 +136,7 @@ struct ceph_msg_pos {
 #define CLOSED         10 /* we've closed the connection */
 #define SOCK_CLOSED    11 /* socket state changed to closed */
 #define REGISTERED      12 /* connection appears in con_tree */
-#define REOPEN          13 /* reopen connection w/ new peer */
+#define OPENING         13 /* open connection w/ (possibly new) peer */
 #define DEAD            14 /* dead, about to kfree */
 
 /*
@@ -221,14 +221,13 @@ extern struct ceph_messenger *ceph_messenger_create(
 extern void ceph_messenger_destroy(struct ceph_messenger *);
 
 extern void ceph_con_init(struct ceph_messenger *msgr,
-                         struct ceph_connection *con,
+                         struct ceph_connection *con);
+extern void ceph_con_shutdown(struct ceph_connection *con);
+extern void ceph_con_open(struct ceph_connection *con,
                          struct ceph_entity_addr *addr);
-extern void ceph_con_destroy(struct ceph_connection *con);
+extern void ceph_con_close(struct ceph_connection *con);
 extern void ceph_con_send(struct ceph_connection *con, struct ceph_msg *msg);
 extern void ceph_con_keepalive(struct ceph_connection *con);
-extern void ceph_con_close(struct ceph_connection *con);
-extern void ceph_con_reopen(struct ceph_connection *con,
-                           struct ceph_entity_addr *addr);
 extern struct ceph_connection *ceph_con_get(struct ceph_connection *con);
 extern void ceph_con_put(struct ceph_connection *con);
 
index ec2574f0667a2f6803cd833dcf4703b53866bf1e..8987ffa1f47e2aa8b75825c9735e8c3147d20d60 100644 (file)
@@ -125,12 +125,13 @@ static int __open_session(struct ceph_mon_client *monc)
                }
 
                dout("open_session mon%d opened\n", monc->cur_mon);
-               ceph_con_init(monc->client->msgr, monc->con,
-                             &monc->monmap->mon_inst[monc->cur_mon].addr);
+               ceph_con_init(monc->client->msgr, monc->con);
                monc->con->private = monc;
                monc->con->ops = &mon_con_ops;
                monc->con->peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_MON);
                monc->con->peer_name.num = cpu_to_le32(monc->cur_mon);
+               ceph_con_open(monc->con,
+                             &monc->monmap->mon_inst[monc->cur_mon].addr);
        } else {
                dout("open_session mon%d already open\n", monc->cur_mon);
        }
index ed4edac49a758f1da7d542a1001b8dbb53a35544..478922c44af4c9968e8ba99b94ff802c3de44712 100644 (file)
@@ -310,12 +310,12 @@ static int open_osd_session(struct ceph_osd_client *osdc, struct ceph_osd *osd)
        osd->o_con = kzalloc(sizeof(*osd->o_con), GFP_NOFS);
        if (!osd->o_con)
                return -ENOMEM;
-       ceph_con_init(osdc->client->msgr, osd->o_con,
-                     &osdc->osdmap->osd_addr[o]);
+       ceph_con_init(osdc->client->msgr, osd->o_con);
        osd->o_con->private = osd;
        osd->o_con->ops = &osd_con_ops;
        osd->o_con->peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_OSD);
        osd->o_con->peer_name.num = cpu_to_le32(o);
+       ceph_con_open(osd->o_con, &osdc->osdmap->osd_addr[o]);
        return 0;
 }