All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Durgin <jdurgin@redhat.com>
To: Douglas Fuller <dfuller@redhat.com>, ceph-devel@vger.kernel.org
Subject: Re: [PATCH 2/6] ceph/rbd: add support for header version 2 and 3
Date: Tue, 16 Jun 2015 14:23:44 -0700	[thread overview]
Message-ID: <558093E0.8040900@redhat.com> (raw)
In-Reply-To: <f07c82f86a26bacd8e3f1d3dfe458c54a3aea3e4.1434124007.git.dfuller@redhat.com>

On 06/12/2015 08:56 AM, Douglas Fuller wrote:
> From: Mike Christie <michaelc@cs.wisc.edu>
>
> This adds support watch-notify header 2 and 3 support, so we can
> get a return_code from those operations.
>
> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
> ---
>   drivers/block/rbd.c             |  5 +++--
>   include/linux/ceph/osd_client.h | 10 ++++++----
>   net/ceph/osd_client.c           | 25 +++++++++++++++++++------
>   3 files changed, 28 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 4b9ba9f..65421eb 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -3103,8 +3103,9 @@ out:
>   	return ret;
>   }
>
> -static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data,
> -			 void *payload, int payload_len)
> +static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, s32 return_code,
> +			 u64 notifier_gid, void *data, void *payload,
> +			 u32 payload_len)
>   {
>   	struct rbd_device *rbd_dev = (struct rbd_device *)data;
>   	int ret;
> diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h
> index eab96b5..1c4e472 100644
> --- a/include/linux/ceph/osd_client.h
> +++ b/include/linux/ceph/osd_client.h
> @@ -184,7 +184,7 @@ struct ceph_osd_event {
>   	u64 cookie;
>   	int one_shot;
>   	struct ceph_osd_client *osdc;
> -	void (*cb)(u64, u64, u8, void *, void *, int);
> +	void (*cb)(u64, u64, u8, s32, u64, void *, void *, u32);
>   	void *data;
>   	struct rb_node node;
>   	struct list_head osd_node;
> @@ -197,8 +197,10 @@ struct ceph_osd_event_work {
>           u64 ver;
>           u64 notify_id;
>           u8 opcode;
> +	s32 return_code;
> +	u64 notifier_gid;
>   	void *payload;
> -	int payload_len;
> +	u32 payload_len;
>   };
>
>   struct ceph_osd_client {
> @@ -371,8 +373,8 @@ extern int ceph_osdc_writepages(struct ceph_osd_client *osdc,
>
>   /* watch/notify events */
>   extern int ceph_osdc_create_event(struct ceph_osd_client *osdc,
> -				  void (*event_cb)(u64, u64, u8, void *, void *,
> -						   int),
> +				  void (*event_cb)(u64, u64, u8, s32, u64,
> +						   void *, void *, u32),
>   				  void *data, struct ceph_osd_event **pevent);
>   extern void ceph_osdc_cancel_event(struct ceph_osd_event *event);
>   extern void ceph_osdc_put_event(struct ceph_osd_event *event);
> diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
> index aa1c5c46..590cf9c 100644
> --- a/net/ceph/osd_client.c
> +++ b/net/ceph/osd_client.c
> @@ -2277,7 +2277,8 @@ static void __remove_event(struct ceph_osd_event *event)
>   }
>
>   int ceph_osdc_create_event(struct ceph_osd_client *osdc,
> -			   void (*event_cb)(u64, u64, u8, void *, void *, int),
> +			   void (*event_cb)(u64, u64, u8, s32, u64, void *,
> +					    void *, u32),
>   			   void *data, struct ceph_osd_event **pevent)
>   {
>   	struct ceph_osd_event *event;
> @@ -2327,10 +2328,12 @@ static void do_event_work(struct work_struct *work)
>   	u64 ver = event_work->ver;
>   	u64 notify_id = event_work->notify_id;
>   	u8 opcode = event_work->opcode;
> +	s32 return_code = event_work->return_code;
> +	u64 notifier_gid = event_work->notifier_gid;
>
>   	dout("do_event_work completing %p\n", event);
> -	event->cb(ver, notify_id, opcode, event->data, event_work->payload,
> -		  event_work->payload_len);
> +	event->cb(ver, notify_id, opcode, return_code, notifier_gid,
> +		  event->data, event_work->payload, event_work->payload_len);
>   	dout("do_event_work completed %p\n", event);
>   	ceph_osdc_put_event(event);
>   	kfree(event_work);
> @@ -2345,9 +2348,10 @@ static void handle_watch_notify(struct ceph_osd_client *osdc,
>   {
>   	void *p, *end, *payload = NULL;
>   	u8 proto_ver;
> -	u64 cookie, ver, notify_id;
> +	u64 cookie, ver, notify_id, notifier_gid = 0;
>   	u8 opcode;
>   	u32 payload_len = 0;
> +	s32 return_code = 0;
>   	struct ceph_osd_event *event;
>   	struct ceph_osd_event_work *event_work;
>
> @@ -2365,8 +2369,15 @@ static void handle_watch_notify(struct ceph_osd_client *osdc,
>   		if (end - p < payload_len)
>   			goto bad;
>   		payload = p;
> +		p += payload_len;
>   	}
>
> +	if (msg->hdr.version >= 2)
> +		ceph_decode_32_safe(&p, end, return_code, bad);
> +
> +	if (msg->hdr.version >= 3)
> +		ceph_decode_32_safe(&p, end, notifier_gid, bad);
> +

This should be ceph_decode_64_safe. With that fixed,

Reviewed-by: Josh Durgin <jdurgin@redhat.com>

>   	spin_lock(&osdc->event_lock);
>   	event = __find_event(osdc, cookie);
>   	if (event) {
> @@ -2374,8 +2385,8 @@ static void handle_watch_notify(struct ceph_osd_client *osdc,
>   		get_event(event);
>   	}
>   	spin_unlock(&osdc->event_lock);
> -	dout("handle_watch_notify cookie %lld ver %lld event %p notify id %llu payload len %u\n",
> -	     cookie, ver, event, notify_id, payload_len);
> +	dout("handle_watch_notify cookie %lld ver %lld event %p notify id %llu payload len %u return code %d notifier gid %llu\n",
> +	     cookie, ver, event, notify_id, payload_len, return_code, notifier_gid);
>   	if (event) {
>   		event_work = kmalloc(sizeof(*event_work), GFP_NOIO);
>   		if (!event_work) {
> @@ -2388,6 +2399,8 @@ static void handle_watch_notify(struct ceph_osd_client *osdc,
>   		event_work->ver = ver;
>   		event_work->notify_id = notify_id;
>   		event_work->opcode = opcode;
> +		event_work->return_code = return_code;
> +		event_work->notifier_gid = notifier_gid;
>   		event_work->payload = payload;
>   		event_work->payload_len = payload_len;
>
>


  reply	other threads:[~2015-06-16 21:23 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-12 15:56 [PATCH 0/6] support watch/notify version 2 Douglas Fuller
2015-06-12 15:56 ` [PATCH 1/6] ceph/rbd: add support for watch notify payloads Douglas Fuller
2015-06-16 21:22   ` Josh Durgin
2015-06-12 15:56 ` [PATCH 2/6] ceph/rbd: add support for header version 2 and 3 Douglas Fuller
2015-06-16 21:23   ` Josh Durgin [this message]
2015-06-12 15:56 ` [PATCH 3/6] ceph/rbd: update watch-notify ceph_osd_op Douglas Fuller
2015-06-16 22:00   ` Josh Durgin
2015-06-12 15:56 ` [PATCH 4/6] osd_client, rbd: update event interface for watch/notify2 Douglas Fuller
2015-06-16 14:58   ` Mike Christie
2015-06-16 17:05     ` Douglas Fuller
2015-06-16 23:18   ` Josh Durgin
2015-06-17 13:28     ` Douglas Fuller
2015-06-17 13:41       ` Ilya Dryomov
2015-06-12 15:56 ` [PATCH 5/6] osd_client: add support for notify payloads via notify event Douglas Fuller
2015-06-16 15:26   ` Mike Christie
2015-06-16 17:22     ` Douglas Fuller
2015-06-12 15:56 ` [PATCH 6/6] osd_client: send watch ping messages Douglas Fuller
2015-06-16 15:07   ` Mike Christie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=558093E0.8040900@redhat.com \
    --to=jdurgin@redhat.com \
    --cc=ceph-devel@vger.kernel.org \
    --cc=dfuller@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.