Commit 15d9882c authored by Alex Elder's avatar Alex Elder Committed by Alex Elder

libceph: embed ceph messenger structure in ceph_client

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: default avatarAlex Elder <elder@inktank.com>
Reviewed-by: default avatarYehuda Sadeh <yehuda@inktank.com>
Reviewed-by: default avatarSage Weil <sage@inktank.com>
parent e2200423
...@@ -394,7 +394,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, ...@@ -394,7 +394,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
s->s_seq = 0; s->s_seq = 0;
mutex_init(&s->s_mutex); 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.private = s;
s->s_con.ops = &mds_con_ops; s->s_con.ops = &mds_con_ops;
s->s_con.peer_name.type = CEPH_ENTITY_TYPE_MDS; s->s_con.peer_name.type = CEPH_ENTITY_TYPE_MDS;
......
...@@ -131,7 +131,7 @@ struct ceph_client { ...@@ -131,7 +131,7 @@ struct ceph_client {
u32 supported_features; u32 supported_features;
u32 required_features; u32 required_features;
struct ceph_messenger *msgr; /* messenger instance */ struct ceph_messenger msgr; /* messenger instance */
struct ceph_mon_client monc; struct ceph_mon_client monc;
struct ceph_osd_client osdc; struct ceph_osd_client osdc;
......
...@@ -211,10 +211,11 @@ extern int ceph_msgr_init(void); ...@@ -211,10 +211,11 @@ extern int ceph_msgr_init(void);
extern void ceph_msgr_exit(void); extern void ceph_msgr_exit(void);
extern void ceph_msgr_flush(void); extern void ceph_msgr_flush(void);
extern struct ceph_messenger *ceph_messenger_create( extern void ceph_messenger_init(struct ceph_messenger *msgr,
struct ceph_entity_addr *myaddr, struct ceph_entity_addr *myaddr,
u32 features, u32 required); u32 supported_features,
extern void ceph_messenger_destroy(struct ceph_messenger *); u32 required_features,
bool nocrc);
extern void ceph_con_init(struct ceph_messenger *msgr, extern void ceph_con_init(struct ceph_messenger *msgr,
struct ceph_connection *con); struct ceph_connection *con);
......
...@@ -468,19 +468,15 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private, ...@@ -468,19 +468,15 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private,
/* msgr */ /* msgr */
if (ceph_test_opt(client, MYIP)) if (ceph_test_opt(client, MYIP))
myaddr = &client->options->my_addr; myaddr = &client->options->my_addr;
client->msgr = ceph_messenger_create(myaddr, ceph_messenger_init(&client->msgr, myaddr,
client->supported_features, client->supported_features,
client->required_features); client->required_features,
if (IS_ERR(client->msgr)) { ceph_test_opt(client, NOCRC));
err = PTR_ERR(client->msgr);
goto fail;
}
client->msgr->nocrc = ceph_test_opt(client, NOCRC);
/* subsystems */ /* subsystems */
err = ceph_monc_init(&client->monc, client); err = ceph_monc_init(&client->monc, client);
if (err < 0) if (err < 0)
goto fail_msgr; goto fail;
err = ceph_osdc_init(&client->osdc, client); err = ceph_osdc_init(&client->osdc, client);
if (err < 0) if (err < 0)
goto fail_monc; goto fail_monc;
...@@ -489,8 +485,6 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private, ...@@ -489,8 +485,6 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private,
fail_monc: fail_monc:
ceph_monc_stop(&client->monc); ceph_monc_stop(&client->monc);
fail_msgr:
ceph_messenger_destroy(client->msgr);
fail: fail:
kfree(client); kfree(client);
return ERR_PTR(err); return ERR_PTR(err);
...@@ -515,8 +509,6 @@ void ceph_destroy_client(struct ceph_client *client) ...@@ -515,8 +509,6 @@ void ceph_destroy_client(struct ceph_client *client)
ceph_debugfs_client_cleanup(client); ceph_debugfs_client_cleanup(client);
ceph_messenger_destroy(client->msgr);
ceph_destroy_options(client->options); ceph_destroy_options(client->options);
kfree(client); kfree(client);
......
...@@ -2245,18 +2245,14 @@ static void ceph_fault(struct ceph_connection *con) ...@@ -2245,18 +2245,14 @@ static void ceph_fault(struct ceph_connection *con)
/* /*
* create a new messenger instance * initialize a new messenger instance
*/ */
struct ceph_messenger *ceph_messenger_create(struct ceph_entity_addr *myaddr, void ceph_messenger_init(struct ceph_messenger *msgr,
u32 supported_features, struct ceph_entity_addr *myaddr,
u32 required_features) 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->supported_features = supported_features;
msgr->required_features = required_features; msgr->required_features = required_features;
...@@ -2269,19 +2265,11 @@ struct ceph_messenger *ceph_messenger_create(struct ceph_entity_addr *myaddr, ...@@ -2269,19 +2265,11 @@ struct ceph_messenger *ceph_messenger_create(struct ceph_entity_addr *myaddr,
msgr->inst.addr.type = 0; msgr->inst.addr.type = 0;
get_random_bytes(&msgr->inst.addr.nonce, sizeof(msgr->inst.addr.nonce)); get_random_bytes(&msgr->inst.addr.nonce, sizeof(msgr->inst.addr.nonce));
encode_my_addr(msgr); encode_my_addr(msgr);
msgr->nocrc = nocrc;
dout("messenger_create %p\n", msgr); dout("%s %p\n", __func__, 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);
} }
EXPORT_SYMBOL(ceph_messenger_destroy); EXPORT_SYMBOL(ceph_messenger_init);
static void clear_standby(struct ceph_connection *con) static void clear_standby(struct ceph_connection *con)
{ {
......
...@@ -763,7 +763,7 @@ int ceph_monc_init(struct ceph_mon_client *monc, struct ceph_client *cl) ...@@ -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); monc->con = kmalloc(sizeof(*monc->con), GFP_KERNEL);
if (!monc->con) if (!monc->con)
goto out_monmap; 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->private = monc;
monc->con->ops = &mon_con_ops; monc->con->ops = &mon_con_ops;
...@@ -880,8 +880,8 @@ static void handle_auth_reply(struct ceph_mon_client *monc, ...@@ -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)) { } else if (!was_auth && monc->auth->ops->is_authenticated(monc->auth)) {
dout("authenticated, starting session\n"); dout("authenticated, starting session\n");
monc->client->msgr->inst.name.type = CEPH_ENTITY_TYPE_CLIENT; monc->client->msgr.inst.name.type = CEPH_ENTITY_TYPE_CLIENT;
monc->client->msgr->inst.name.num = monc->client->msgr.inst.name.num =
cpu_to_le64(monc->auth->global_id); cpu_to_le64(monc->auth->global_id);
__send_subscribe(monc); __send_subscribe(monc);
......
...@@ -639,7 +639,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc) ...@@ -639,7 +639,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc)
INIT_LIST_HEAD(&osd->o_osd_lru); INIT_LIST_HEAD(&osd->o_osd_lru);
osd->o_incarnation = 1; 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.private = osd;
osd->o_con.ops = &osd_con_ops; osd->o_con.ops = &osd_con_ops;
osd->o_con.peer_name.type = CEPH_ENTITY_TYPE_OSD; 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) ...@@ -1391,7 +1391,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
epoch, maplen); epoch, maplen);
newmap = osdmap_apply_incremental(&p, next, newmap = osdmap_apply_incremental(&p, next,
osdc->osdmap, osdc->osdmap,
osdc->client->msgr); &osdc->client->msgr);
if (IS_ERR(newmap)) { if (IS_ERR(newmap)) {
err = PTR_ERR(newmap); err = PTR_ERR(newmap);
goto bad; goto bad;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment