Re: [PATCH] sg: retrofit SG_FLAG_Q_AT_TAIL flag

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

 



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@xxxxxxxxxxxx>

Review-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx>

> --- 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@xxxxxxxxxxxx, dougg@xxxxxxxxxxxxx), 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
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux