No more 'reopen' hackery.
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);
}
}
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;
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);
/*
* 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 */
/*
* 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);
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);
}
}
*
* 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;
}
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 */
#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 */
/*
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);
}
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);
}
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;
}