Reviewed-by: Sage Weil <sage@xxxxxxxxxxx> On Wed, 30 May 2012, Alex Elder wrote: > A ceph client has a pointer to a ceph messenger structure in it. > There is always exactly one ceph messenger for a ceph client, so > there is no need to allocate it separate from the ceph client > structure. > > Switch the ceph_client structure to embed its ceph_messenger > structure. > > Signed-off-by: Alex Elder <elder@xxxxxxxxxxx> > --- > fs/ceph/mds_client.c | 2 +- > include/linux/ceph/libceph.h | 2 +- > include/linux/ceph/messenger.h | 9 +++++---- > net/ceph/ceph_common.c | 18 +++++------------- > net/ceph/messenger.c | 30 +++++++++--------------------- > net/ceph/mon_client.c | 6 +++--- > net/ceph/osd_client.c | 4 ++-- > 7 files changed, 26 insertions(+), 45 deletions(-) > > diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c > index 200bc87..ad30261 100644 > --- a/fs/ceph/mds_client.c > +++ b/fs/ceph/mds_client.c > @@ -394,7 +394,7 @@ 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->fsc->client->msgr, &s->s_con); > + ceph_con_init(&mdsc->fsc->client->msgr, &s->s_con); > s->s_con.private = s; > s->s_con.ops = &mds_con_ops; > s->s_con.peer_name.type = CEPH_ENTITY_TYPE_MDS; > diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h > index 92eef7c..927361c 100644 > --- a/include/linux/ceph/libceph.h > +++ b/include/linux/ceph/libceph.h > @@ -131,7 +131,7 @@ struct ceph_client { > u32 supported_features; > u32 required_features; > > - struct ceph_messenger *msgr; /* messenger instance */ > + struct ceph_messenger msgr; /* messenger instance */ > struct ceph_mon_client monc; > struct ceph_osd_client osdc; > > diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h > index 74f6c9b..3fbd4be 100644 > --- a/include/linux/ceph/messenger.h > +++ b/include/linux/ceph/messenger.h > @@ -211,10 +211,11 @@ extern int ceph_msgr_init(void); > extern void ceph_msgr_exit(void); > extern void ceph_msgr_flush(void); > > -extern struct ceph_messenger *ceph_messenger_create( > - struct ceph_entity_addr *myaddr, > - u32 features, u32 required); > -extern void ceph_messenger_destroy(struct ceph_messenger *); > +extern void ceph_messenger_init(struct ceph_messenger *msgr, > + struct ceph_entity_addr *myaddr, > + u32 supported_features, > + u32 required_features, > + bool nocrc); > > extern void ceph_con_init(struct ceph_messenger *msgr, > struct ceph_connection *con); > diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c > index cc91319..2de3ea1 100644 > --- a/net/ceph/ceph_common.c > +++ b/net/ceph/ceph_common.c > @@ -468,19 +468,15 @@ struct ceph_client *ceph_create_client(struct > ceph_options *opt, void *private, > /* msgr */ > if (ceph_test_opt(client, MYIP)) > myaddr = &client->options->my_addr; > - client->msgr = ceph_messenger_create(myaddr, > - client->supported_features, > - client->required_features); > - if (IS_ERR(client->msgr)) { > - err = PTR_ERR(client->msgr); > - goto fail; > - } > - client->msgr->nocrc = ceph_test_opt(client, NOCRC); > + ceph_messenger_init(&client->msgr, myaddr, > + client->supported_features, > + client->required_features, > + ceph_test_opt(client, NOCRC)); > > /* subsystems */ > err = ceph_monc_init(&client->monc, client); > if (err < 0) > - goto fail_msgr; > + goto fail; > err = ceph_osdc_init(&client->osdc, client); > if (err < 0) > goto fail_monc; > @@ -489,8 +485,6 @@ struct ceph_client *ceph_create_client(struct ceph_options > *opt, void *private, > > fail_monc: > ceph_monc_stop(&client->monc); > -fail_msgr: > - ceph_messenger_destroy(client->msgr); > fail: > kfree(client); > return ERR_PTR(err); > @@ -515,8 +509,6 @@ void ceph_destroy_client(struct ceph_client *client) > > ceph_debugfs_client_cleanup(client); > > - ceph_messenger_destroy(client->msgr); > - > ceph_destroy_options(client->options); > > kfree(client); > diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c > index 2e9054f..19f1948 100644 > --- a/net/ceph/messenger.c > +++ b/net/ceph/messenger.c > @@ -2243,18 +2243,14 @@ out: > > > /* > - * create a new messenger instance > + * initialize a new messenger instance > */ > -struct ceph_messenger *ceph_messenger_create(struct ceph_entity_addr *myaddr, > - u32 supported_features, > - u32 required_features) > +void ceph_messenger_init(struct ceph_messenger *msgr, > + struct ceph_entity_addr *myaddr, > + u32 supported_features, > + u32 required_features, > + bool nocrc) > { > - struct ceph_messenger *msgr; > - > - msgr = kzalloc(sizeof(*msgr), GFP_KERNEL); > - if (msgr == NULL) > - return ERR_PTR(-ENOMEM); > - > msgr->supported_features = supported_features; > msgr->required_features = required_features; > > @@ -2267,19 +2263,11 @@ struct ceph_messenger *ceph_messenger_create(struct > ceph_entity_addr *myaddr, > msgr->inst.addr.type = 0; > get_random_bytes(&msgr->inst.addr.nonce, > sizeof(msgr->inst.addr.nonce)); > encode_my_addr(msgr); > + msgr->nocrc = nocrc; > > - dout("messenger_create %p\n", msgr); > - return msgr; > -} > -EXPORT_SYMBOL(ceph_messenger_create); > - > -void ceph_messenger_destroy(struct ceph_messenger *msgr) > -{ > - dout("destroy %p\n", msgr); > - kfree(msgr); > - dout("destroyed messenger %p\n", msgr); > + dout("%s %p\n", __func__, msgr); > } > -EXPORT_SYMBOL(ceph_messenger_destroy); > +EXPORT_SYMBOL(ceph_messenger_init); > > static void clear_standby(struct ceph_connection *con) > { > diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c > index 1845cde..704dc95 100644 > --- a/net/ceph/mon_client.c > +++ b/net/ceph/mon_client.c > @@ -763,7 +763,7 @@ int ceph_monc_init(struct ceph_mon_client *monc, struct > ceph_client *cl) > monc->con = kmalloc(sizeof(*monc->con), GFP_KERNEL); > if (!monc->con) > goto out_monmap; > - ceph_con_init(monc->client->msgr, monc->con); > + ceph_con_init(&monc->client->msgr, monc->con); > monc->con->private = monc; > monc->con->ops = &mon_con_ops; > > @@ -880,8 +880,8 @@ static void handle_auth_reply(struct ceph_mon_client > *monc, > } else if (!was_auth && monc->auth->ops->is_authenticated(monc->auth)) > { > dout("authenticated, starting session\n"); > > - monc->client->msgr->inst.name.type = CEPH_ENTITY_TYPE_CLIENT; > - monc->client->msgr->inst.name.num = > + monc->client->msgr.inst.name.type = CEPH_ENTITY_TYPE_CLIENT; > + monc->client->msgr.inst.name.num = > cpu_to_le64(monc->auth->global_id); > > __send_subscribe(monc); > diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c > index b098e7b..cca4c7f 100644 > --- a/net/ceph/osd_client.c > +++ b/net/ceph/osd_client.c > @@ -639,7 +639,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client > *osdc) > INIT_LIST_HEAD(&osd->o_osd_lru); > osd->o_incarnation = 1; > > - ceph_con_init(osdc->client->msgr, &osd->o_con); > + 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 = CEPH_ENTITY_TYPE_OSD; > @@ -1391,7 +1391,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, > struct ceph_msg *msg) > epoch, maplen); > newmap = osdmap_apply_incremental(&p, next, > osdc->osdmap, > - osdc->client->msgr); > + > &osdc->client->msgr); > if (IS_ERR(newmap)) { > err = PTR_ERR(newmap); > goto bad; > -- > 1.7.5.4 > > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html