Linux SCSI subsystem development
 help / color / mirror / Atom feed
From: Douglas Gilbert <dgilbert@interlog.com>
To: Boaz Harrosh <bharrosh@panasas.com>
Cc: James Bottomley <James.Bottomley@suse.de>,
	SCSI development list <linux-scsi@vger.kernel.org>,
	mh-linux-kernel@loup.net
Subject: Re: [PATCH] sg: retrofit SG_FLAG_Q_AT_TAIL flag
Date: Sun, 21 Mar 2010 13:56:17 -0400	[thread overview]
Message-ID: <4BA65DC1.2020102@interlog.com> (raw)
In-Reply-To: <4BA604D8.9090604@panasas.com>

Boaz,
Thanks for the review.

Now I decided to check the SG_IO ioctl used directly
against block devices and it calls:
    blk_execute_rq(q, bd_disk, rq, 0);

The last argument is 'at_head' so it has been queuing
at_tail for some time. How is that for compatibility??

That almost suggests there should be a
   #define SG_FLAG_Q_AT_HEAD 0x20

added to sg.h to cover all the bases.

Doug Gilbert


Boaz Harrosh wrote:
> On 03/20/2010 09:15 PM, Douglas Gilbert wrote:
>> In response to
>>     http://bugzilla.kernel.org/show_bug.cgi?id=15565
>> and the fact this capability has been present
>> in bsg for some time, add SG_FLAG_Q_AT_TAIL flag. It has
>> the same binary value as the bsg flag and the define name
>> is the same apart from the leading "B". The semantics are
>> the same, namely to override the default queue at head
>> action of the SCSI midlevel when a low level driver
>> blocks (i.e. when a LLD returns non-zero to a
>> queuecommand() ). Tested with scsi_debug.
>>
>> Changelog
>>    - add SG_FLAG_Q_AT_TAIL flag to override default
>>      queue at head semantics of the SCSI midlevel queue.
>>
>> Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>
> 
> Review-by: Boaz Harrosh <bharrosh@panasas.com>
> 
>> --- linux/include/scsi/sg.h	2008-10-10 17:04:54.000000000 -0400
>> +++ linux/include/scsi/sg.h2633qat1	2010-03-20 14:28:31.000000000 -0400
>> @@ -11,9 +11,9 @@
>>  Original driver (sg.h):
>>  *       Copyright (C) 1992 Lawrence Foard
>>  Version 2 and 3 extensions to driver:
>> -*       Copyright (C) 1998 - 2006 Douglas Gilbert
>> +*       Copyright (C) 1998 - 2010 Douglas Gilbert
>>  
>> -    Version: 3.5.34 (20060920)
>> +    Version: 3.5.35 (20100319)
>>      This version is for 2.6 series kernels.
>>  
>>      For a full changelog see http://www.torque.net/sg
>> @@ -124,6 +124,7 @@
>>  #define SG_FLAG_UNUSED_LUN_INHIBIT 2   /* default is overwrite lun in SCSI */
>>  				/* command block (when <= SCSI_2) */
>>  #define SG_FLAG_MMAP_IO 4       /* request memory mapped IO */
>> +#define SG_FLAG_Q_AT_TAIL 0x10  /* default, without this flag, is Q_AT_HEAD */
> 
> I have chosen this value exactly so it can fit with SG
> as well.
> 
>>  #define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */
>>  				/* user space (debug indirect IO) */
>>  
>> --- linux/drivers/scsi/sg.c	2009-12-03 11:11:18.000000000 -0500
>> +++ linux/drivers/scsi/sg.c2633qat1	2010-03-19 19:42:10.000000000 -0400
>> @@ -18,8 +18,8 @@
>>   *
>>   */
>>  
>> -static int sg_version_num = 30534;	/* 2 digits for each component */
>> -#define SG_VERSION_STR "3.5.34"
>> +static int sg_version_num = 30535;	/* 2 digits for each component */
>> +#define SG_VERSION_STR "3.5.35"
>>  
>>  /*
>>   *  D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes:
>> @@ -61,7 +61,7 @@
>>  
>>  #ifdef CONFIG_SCSI_PROC_FS
>>  #include <linux/proc_fs.h>
>> -static char *sg_version_date = "20061027";
>> +static char *sg_version_date = "20100319";
>>  
>>  static int sg_proc_init(void);
>>  static void sg_proc_cleanup(void);
>> @@ -710,8 +710,11 @@
> 
> I wish you would have used diff "-p" option that shows us the function
> this hunk is at. (git diff does that by default)
> 
>>  	int k, data_dir;
>>  	Sg_device *sdp = sfp->parentdp;
>>  	sg_io_hdr_t *hp = &srp->header;
>> +	int at_head = 1;
>>  
>>  	srp->data.cmd_opcode = cmnd[0];	/* hold opcode of command */
>> +	if ('\0' != hp->interface_id)	/* old interface misuses flags */
>> +		at_head = (SG_FLAG_Q_AT_TAIL & hp->flags) ? 0 : 1;
>>  	hp->status = 0;
>>  	hp->masked_status = 0;
>>  	hp->msg_status = 0;
>> @@ -753,7 +756,7 @@
>>  	srp->rq->timeout = timeout;
>>  	kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */
>>  	blk_execute_rq_nowait(sdp->device->request_queue, sdp->disk,
>> -			      srp->rq, 1, sg_rq_end_io);
>> +			      srp->rq, at_head, sg_rq_end_io);
> 
> Grate, this simple thing does wonders to performance.
> 
>>  	return 0;
>>  }
>>  
> 
> Thanks for doing this
> Boaz
> 


  reply	other threads:[~2010-03-21 17:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-20 19:15 [PATCH] sg: retrofit SG_FLAG_Q_AT_TAIL flag Douglas Gilbert
2010-03-21 11:36 ` Boaz Harrosh
2010-03-21 17:56   ` Douglas Gilbert [this message]
2010-03-22  7:39     ` Mike Hayward
2010-03-22  8:07     ` Boaz Harrosh
2010-03-22  8:32       ` 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=4BA65DC1.2020102@interlog.com \
    --to=dgilbert@interlog.com \
    --cc=James.Bottomley@suse.de \
    --cc=bharrosh@panasas.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mh-linux-kernel@loup.net \
    /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