From: Boaz Harrosh <bharrosh@panasas.com>
To: Jens Axboe <jens.axboe@oracle.com>,
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
linux-scsi <linux-scsi@vger.kernel.org>,
open-osd mailing-list <osd-dev@open-osd.org>
Cc: Douglas Gilbert <dgilbert@interlog.com>
Subject: Re: [PATCH resend] bsg: Add support for submitting requests at tail of queue
Date: Tue, 24 Mar 2009 10:41:32 +0200 [thread overview]
Message-ID: <49C89CBC.7050306@panasas.com> (raw)
In-Reply-To: <49C20CCD.5070607@panasas.com>
Boaz Harrosh wrote:
> Hi Tomo Jens
>
> Tomo you never ack-by on this patch. I absolutely needs this for the
> user-mode API of osd-initiator. Which is needed with up-coming exofs
> utilities.
>
> What do you want to do?
>
> Thanks
>
Hi Jens.
I absolutely need this patch for 2.6.30 merge window. It is totally
un-dangerous since defaults are left unchanged.
I need it because the user-mode utilities for osd and exofs that
correspond to code in 2.6.30 will need this patch to compile,
because they use a flag constant defined in this patch.
I'm not getting any response from Tomo, some of the emails I send bounce,
do you know if he is on vacation or something?
Thank you
Boaz
> ---
> From: Boaz Harrosh <bharrosh@panasas.com>
>
> Currently inherited from sg.c bsg will submit asynchronous request
> at the head-of-the-queue, (using "at_head" set in the call to
> blk_execute_rq_nowait()). This is bad in situation where the queues
> are full, requests will execute out of order, and can cause
> starvation of the first submitted requests.
>
> The sg_io_v4->flags member is used and a bit is allocated to denote the
> Q_AT_TAIL. Zero is to queue at_head as before, to be compatible with old
> code at the write/read path. SG_IO code path behavior was changed so to
> be the same as write/read behavior. SG_IO was very rarely used and breaking
> compatibility with it is OK at this stage.
>
> sg_io_hdr at sg.h also has a flags member and uses 3 bits from the first
> nibble and one bit from the last nibble. Even though none of these bits
> are supported by bsg, The second nibble is allocated for use by bsg. Just
> in case.
>
> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
> CC: Douglas Gilbert <dgilbert@interlog.com>
> ---
> block/bsg.c | 9 +++++++--
> include/linux/bsg.h | 8 ++++++++
> 2 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/block/bsg.c b/block/bsg.c
> index 44a2a0f..206060e 100644
> --- a/block/bsg.c
> +++ b/block/bsg.c
> @@ -350,6 +350,8 @@ static void bsg_rq_end_io(struct request *rq, int uptodate)
> static void bsg_add_command(struct bsg_device *bd, struct request_queue *q,
> struct bsg_command *bc, struct request *rq)
> {
> + int at_head = (0 == (bc->hdr.flags & BSG_FLAG_Q_AT_TAIL));
> +
> /*
> * add bc command to busy queue and submit rq for io
> */
> @@ -365,7 +367,7 @@ static void bsg_add_command(struct bsg_device *bd, struct request_queue *q,
> dprintk("%s: queueing rq %p, bc %p\n", bd->name, rq, bc);
>
> rq->end_io_data = bc;
> - blk_execute_rq_nowait(q, NULL, rq, 1, bsg_rq_end_io);
> + blk_execute_rq_nowait(q, NULL, rq, at_head, bsg_rq_end_io);
> }
>
> static struct bsg_command *bsg_next_done_cmd(struct bsg_device *bd)
> @@ -921,6 +923,7 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> struct request *rq;
> struct bio *bio, *bidi_bio = NULL;
> struct sg_io_v4 hdr;
> + int at_head;
> u8 sense[SCSI_SENSE_BUFFERSIZE];
>
> if (copy_from_user(&hdr, uarg, sizeof(hdr)))
> @@ -933,7 +936,9 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> bio = rq->bio;
> if (rq->next_rq)
> bidi_bio = rq->next_rq->bio;
> - blk_execute_rq(bd->queue, NULL, rq, 0);
> +
> + at_head = (0 == (hdr.flags & BSG_FLAG_Q_AT_TAIL));
> + blk_execute_rq(bd->queue, NULL, rq, at_head);
> ret = blk_complete_sgv4_hdr_rq(rq, &hdr, bio, bidi_bio);
>
> if (copy_to_user(uarg, &hdr, sizeof(hdr)))
> diff --git a/include/linux/bsg.h b/include/linux/bsg.h
> index cf0303a..3f0c64a 100644
> --- a/include/linux/bsg.h
> +++ b/include/linux/bsg.h
> @@ -7,6 +7,14 @@
> #define BSG_SUB_PROTOCOL_SCSI_TMF 1
> #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2
>
> +/*
> + * For flags member below
> + * sg.h sg_io_hdr also has bits defined for it's flags member. However
> + * none of these bits are implemented/used by bsg. The bits below are
> + * allocated to not conflict with sg.h ones anyway.
> + */
> +#define BSG_FLAG_Q_AT_TAIL 0x10 /* default, == 0 at this bit, is Q_AT_HEAD */
> +
> struct sg_io_v4 {
> __s32 guard; /* [i] 'Q' to differentiate from v3 */
> __u32 protocol; /* [i] 0 -> SCSI , .... */
next prev parent reply other threads:[~2009-03-24 8:44 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-19 9:13 [PATCH resend] bsg: Add support for submitting requests at tail of queue Boaz Harrosh
2009-03-24 8:41 ` Boaz Harrosh [this message]
2009-03-24 11:23 ` Jens Axboe
2009-03-24 12:05 ` FUJITA Tomonori
2009-03-24 12:14 ` Jens Axboe
2009-03-24 12:22 ` FUJITA Tomonori
2009-03-24 12:26 ` Jens Axboe
2009-03-24 12:53 ` Boaz Harrosh
2009-03-25 4:06 ` FUJITA Tomonori
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=49C89CBC.7050306@panasas.com \
--to=bharrosh@panasas.com \
--cc=dgilbert@interlog.com \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=jens.axboe@oracle.com \
--cc=linux-scsi@vger.kernel.org \
--cc=osd-dev@open-osd.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox