linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Boaz Harrosh <bharrosh@panasas.com>
Cc: James Bottomley <James.Bottomley@steeleye.com>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Alan Stern <stern@rowland.harvard.edu>,
	Matthew Dharm <mdharm-usb@one-eyed-alien.net>,
	Russell King <rmk@arm.linux.org.uk>,
	Jeff Garzik <jeff@garzik.org>,
	"David S. Miller" <davem@davemloft.net>,
	YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	"Maciej W. Rozycki" <macro@linux-mips.org>,
	Mark Fortescue <mark@mtfhpc.demon.co.uk>
Subject: Re: [PATCH 24/24] ide-scsi.c: convert to data accessors and !use_sg cleanup
Date: Mon, 17 Sep 2007 13:04:08 +0200	[thread overview]
Message-ID: <200709171304.08503.bzolnier@gmail.com> (raw)
In-Reply-To: <46E72F13.3090200@panasas.com>

On Wednesday 12 September 2007, Boaz Harrosh wrote:
> 
>  - Convert ide-scsi to the new data accessors and cleanup
>    the !use_sg code paths.
> 
>   Inspecting old code I can see places that still assume
>   scsi_cmnd->request_buffer is a linear char pointer. Though I
>   admit this assumption is hidden behind a flag:
>   test_bit(PC_TRANSFORM, &pc->flags).

Sigh... somebody forgot to update ide-scsi.c while making SCSI use
only sg for REQ_TYPE_BLOCK_PC.

>   I have commented out the offending code and put a
>   WARN_ON(1) in it's place. So if there is missing functionality

in idescsi_transform_pc2():

        if (drive->media == ide_cdrom || drive->media == ide_optical) {
...
		WARN_ON(1) + #if/#endif 0 should be here
...
	}

rest of the changes look OK and you can add my ACK after fixing
idescsi_transform_pc2()

>   it will complain but will not crash the kernel.

sr is likely to complain due to scsi_mode_sense() usage :(

>   Maintainer of this driver please inspect if this functionality
>   is still needed, if not then please remove the commented code.
> 
>   Thanks
> 
> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
> ---
>  drivers/scsi/ide-scsi.c |   53 ++++++++++++++++++++++++++++++----------------
>  1 files changed, 34 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
> index 1cc01ac..e3e7d65 100644
> --- a/drivers/scsi/ide-scsi.c
> +++ b/drivers/scsi/ide-scsi.c
> @@ -175,7 +175,8 @@ static void idescsi_input_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsigne
>  	char *buf;
>  
>  	while (bcount) {
> -		if (pc->sg - (struct scatterlist *) pc->scsi_cmd->request_buffer > pc->scsi_cmd->use_sg) {
> +		if (pc->sg - scsi_sglist(pc->scsi_cmd) >
> +		                                 scsi_sg_count(pc->scsi_cmd)) {
>  			printk (KERN_ERR "ide-scsi: scatter gather table too small, discarding data\n");
>  			idescsi_discard_data (drive, bcount);
>  			return;
> @@ -210,7 +211,8 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
>  	char *buf;
>  
>  	while (bcount) {
> -		if (pc->sg - (struct scatterlist *) pc->scsi_cmd->request_buffer > pc->scsi_cmd->use_sg) {
> +		if (pc->sg - scsi_sglist(pc->scsi_cmd) >
> +		                                 scsi_sg_count(pc->scsi_cmd)) {
>  			printk (KERN_ERR "ide-scsi: scatter gather table too small, padding with zeros\n");
>  			idescsi_output_zeros (drive, bcount);
>  			return;
> @@ -260,6 +262,10 @@ static inline void idescsi_transform_pc1 (ide_drive_t *drive, idescsi_pc_t *pc)
>  			unsigned short new_len;
>  			if (!scsi_buf)
>  				return;
> +			/* FIXME: see comment below at idescsi_transform_pc2 */
> +			WARN_ON(1);
> +
> +#if 0
>  			if ((atapi_buf = kmalloc(pc->buffer_size + 4, GFP_ATOMIC)) == NULL)
>  				return;
>  			memset(atapi_buf, 0, pc->buffer_size + 4);
> @@ -281,12 +287,28 @@ static inline void idescsi_transform_pc1 (ide_drive_t *drive, idescsi_pc_t *pc)
>  			pc->buffer = atapi_buf;
>  			pc->request_transfer += 4;
>  			pc->buffer_size += 4;
> +#endif
>  		}
>  	}
>  }
>  
>  static inline void idescsi_transform_pc2 (ide_drive_t *drive, idescsi_pc_t *pc)
>  {
> +	if (!test_bit(PC_TRANSFORM, &pc->flags))
> +		return;
> +
> +	/*
> +	 * FIXME: if code reached here then this driver is not
> +	 * working for sure. If it is dead code then it can
> +	 * surly be properly removed.
> +	 *
> +	 * Same is with above idescsi_transform_pc1() which
> +	 * assumes pc->buffer must have something which surly
> +	 * does not.
> +	 */
> +        WARN_ON(1);
> +
> +#if 0
>  	u8 *atapi_buf = pc->buffer;
>  	u8 *sc = pc->scsi_cmd->cmnd;
>  	u8 *scsi_buf = pc->scsi_cmd->request_buffer;
> @@ -308,6 +330,7 @@ static inline void idescsi_transform_pc2 (ide_drive_t *drive, idescsi_pc_t *pc)
>  	}
>  	if (atapi_buf && atapi_buf != scsi_buf)
>  		kfree(atapi_buf);
> +#endif
>  }
>  
>  static void hexdump(u8 *x, int len)
> @@ -435,6 +458,7 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
>  	} else {
>  		pc->scsi_cmd->result = DID_OK << 16;
>  		idescsi_transform_pc2 (drive, pc);
> +#if 0
>  		if (log) {
>  			printk ("ide-scsi: %s: suc %lu", drive->name, pc->scsi_cmd->serial_number);
>  			if (!test_bit(PC_WRITING, &pc->flags) && pc->actually_transferred && pc->actually_transferred <= 1024 && pc->buffer) {
> @@ -443,6 +467,7 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
>  				hexdump(scsi_buf, min_t(unsigned, 16, pc->scsi_cmd->request_bufflen));
>  			} else printk("\n");
>  		}
> +#endif
>  	}
>  	host = pc->scsi_cmd->device->host;
>  	spin_lock_irqsave(host->host_lock, flags);
> @@ -637,19 +662,14 @@ static int idescsi_map_sg(ide_drive_t *drive, idescsi_pc_t *pc)
>  		return 1;
>  
>  	sg = hwif->sg_table;
> -	scsi_sg = pc->scsi_cmd->request_buffer;
> -	segments = pc->scsi_cmd->use_sg;
> +	scsi_sg = scsi_sglist(pc->scsi_cmd);
> +	segments = scsi_sg_count(pc->scsi_cmd);
>  
>  	if (segments > hwif->sg_max_nents)
>  		return 1;
>  
> -	if (!segments) {
> -		hwif->sg_nents = 1;
> -		sg_init_one(sg, pc->scsi_cmd->request_buffer, pc->request_transfer);
> -	} else {
> -		hwif->sg_nents = segments;
> -		memcpy(sg, scsi_sg, sizeof(*sg) * segments);
> -	}
> +	hwif->sg_nents = segments;
> +	memcpy(sg, scsi_sg, sizeof(*sg) * segments);
>  
>  	return 0;
>  }
> @@ -905,15 +925,10 @@ static int idescsi_queue (struct scsi_cmnd *cmd,
>  	pc->flags = 0;
>  	pc->rq = rq;
>  	memcpy (pc->c, cmd->cmnd, cmd->cmd_len);
> -	if (cmd->use_sg) {
> -		pc->buffer = NULL;
> -		pc->sg = cmd->request_buffer;
> -	} else {
> -		pc->buffer = cmd->request_buffer;
> -		pc->sg = NULL;
> -	}
> +	pc->buffer = NULL;
> +	pc->sg = scsi_sglist(cmd);
>  	pc->b_count = 0;
> -	pc->request_transfer = pc->buffer_size = cmd->request_bufflen;
> +	pc->request_transfer = pc->buffer_size = scsi_bufflen(cmd);
>  	pc->scsi_cmd = cmd;
>  	pc->done = done;
>  	pc->timeout = jiffies + cmd->timeout_per_command;

  reply	other threads:[~2007-09-17 11:07 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-11 20:23 [patchset 0/24] Lots of the Accessors patches and !use_sg cleanup Boaz Harrosh
2007-09-11 20:50 ` Cameron, Steve
2007-09-11 21:05   ` Boaz Harrosh
2007-09-11 23:49 ` [PATCH 01/24] usb: transport - convert to accessors and !use_sg code path removal Boaz Harrosh
2007-09-11 23:50 ` [PATCH 02/24] usb: protocol.c " Boaz Harrosh
2007-09-11 23:51 ` [PATCH 03/24] usb: shuttle_usbat.c " Boaz Harrosh
2007-09-11 23:51 ` [PATCH 04/24] usb: freecom.c & sddr09.c - convert to accessors and !use_sg cleanup Boaz Harrosh
2007-09-11 23:53 ` [PATCH 05/24] isd200.c: use one-element sg list in issuing commands Boaz Harrosh
2007-09-11 23:54 ` [PATCH 06/24] NCR5380 familly convert to accessors & !use_sg cleanup Boaz Harrosh
2007-09-11 23:55 ` [PATCH 07/24] arm: scsi convert to accessors and " Boaz Harrosh
2007-09-12  7:42   ` Russell King
2007-09-18 15:04     ` Boaz Harrosh
2007-12-15  0:27       ` James Bottomley
2007-12-16 15:28         ` Boaz Harrosh
2008-02-01 20:10           ` Russell King
2008-01-31 18:09     ` James Bottomley
2007-09-11 23:56 ` [PATCH 08/24] nsp_cs.c convert to data " Boaz Harrosh
2007-09-11 23:58 ` [PATCH 09/24] libata-scsi: convert to use the data buffer accessors Boaz Harrosh
2007-09-12  0:09   ` Jeff Garzik
2007-09-12  0:25     ` Boaz Harrosh
2007-09-12  1:40     ` Matthew Dharm
2007-09-12  6:36       ` Boaz Harrosh
2007-09-18 15:46     ` [PATCH ver2 1/2] libata-scsi: Remove !use_sg code paths Boaz Harrosh
2007-09-20 21:12       ` Jeff Garzik
2007-09-18 15:48     ` [PATCH ver2 2/2] libata-scsi: convert to use the data buffer accessors Boaz Harrosh
2007-09-12  0:00 ` [PATCH 10/24] eata_pio.c: convert to accessors and !use_sg cleanup Boaz Harrosh
2007-09-12  0:00 ` [PATCH 11/24] a2091.c: " Boaz Harrosh
2007-09-12  0:01 ` [PATCH 12/24] a3000.c: " Boaz Harrosh
2007-09-12  0:02 ` [PATCH 13/24] aha1542.c: " Boaz Harrosh
2007-09-12  0:03 ` [PATCH 14/24] atp870u.c: " Boaz Harrosh
2007-09-12  0:04 ` [PATCH 15/24] fd_mcs.c: " Boaz Harrosh
2007-09-12  0:05 ` [PATCH 16/24] imm.c: " Boaz Harrosh
2007-09-12  0:06 ` [PATCH 17/24] in2000.c: " Boaz Harrosh
2007-09-12  0:07 ` [PATCH 18/24] ppa.c: " Boaz Harrosh
2007-09-12  0:07 ` [PATCH 19/24] wd33c93.c: " Boaz Harrosh
2007-09-12  0:09 ` Subject: [PATCH 20/24] scsi: esp family " Boaz Harrosh
2007-09-12  0:09 ` [PATCH 21/24] qlogicpti.c: " Boaz Harrosh
2007-10-10 18:25   ` [PATCH 21/24 ver2] " Boaz Harrosh
2007-10-10 22:58     ` David Miller
2007-09-12  0:10 ` Subject: [PATCH 22/24] Remove psi240i driver from kernel Boaz Harrosh
2007-09-12  0:11 ` [PATCH 23/24] wd7000.c - proper fix for boards without sg support Boaz Harrosh
2007-09-12  0:13 ` [PATCH 24/24] ide-scsi.c: convert to data accessors and !use_sg cleanup Boaz Harrosh
2007-09-17 11:04   ` Bartlomiej Zolnierkiewicz [this message]
2007-09-18  8:49     ` Boaz Harrosh
2007-09-18  9:03   ` [PATCH ver2 " Boaz Harrosh
2007-09-18  9:14     ` Christoph Hellwig
2007-09-18 10:24       ` Boaz Harrosh
2007-09-18 10:27   ` [PATCH 24/24 ver3 ] " Boaz Harrosh
2007-09-19 19:59     ` Bartlomiej Zolnierkiewicz
2007-09-12 16:00 ` [patchset 0/24] Lots of the Accessors patches " Maciej W. Rozycki
2007-09-17 10:46 ` Bartlomiej Zolnierkiewicz
2007-09-17 11:36   ` Boaz Harrosh
2007-09-17 13:51   ` James Bottomley
2007-09-17 20:05     ` Bartlomiej Zolnierkiewicz
2007-09-17 20:57       ` Jeff Garzik
2007-09-17 21:00         ` James Bottomley
2007-09-17 21:05           ` Jeff Garzik
2007-10-10 18:24 ` Boaz Harrosh
2007-10-10 19:14   ` Matthew Wilcox

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=200709171304.08503.bzolnier@gmail.com \
    --to=bzolnier@gmail.com \
    --cc=James.Bottomley@steeleye.com \
    --cc=bharrosh@panasas.com \
    --cc=davem@davemloft.net \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=gregkh@suse.de \
    --cc=jeff@garzik.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=macro@linux-mips.org \
    --cc=mark@mtfhpc.demon.co.uk \
    --cc=mdharm-usb@one-eyed-alien.net \
    --cc=rmk@arm.linux.org.uk \
    --cc=stern@rowland.harvard.edu \
    --cc=yokota@netlab.is.tsukuba.ac.jp \
    /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;
as well as URLs for NNTP newsgroup(s).