Re: [PATCH 06/13] libceph: embed ceph messenger structure in ceph_client

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux