From: Luben Tuikov <ltuikov@yahoo.com>
To: Christoph Hellwig <hch@lst.de>, jejb@steeleye.com
Cc: linux-scsi@vger.kernel.org
Subject: Re: [PATCH] use one-element sg list in scsi_send_eh_cmnd
Date: Sat, 4 Nov 2006 12:15:58 -0800 (PST) [thread overview]
Message-ID: <809856.67393.qm@web31801.mail.mud.yahoo.com> (raw)
In-Reply-To: <20061104190421.GA23477@lst.de>
--- Christoph Hellwig <hch@lst.de> wrote:
> scsi_send_eh_cmnd is the last user of non-sg commands currently.
> This patch switches it to a one-element SG list. Also updates the
> kerneldoc comment for scsi_send_eh_cmnd to reflect reality while we're
> at it.
So now "use_sg" means "always yes".
In this case I'd suggest you rename "use_sg" to something like
"num_sg" or "num_scatter" or "num_scatter_elements" or something
to this effect.
This will unambiguate its meaning and use.
Luben
> Test on my mptsas card, but this should get testing with as many
> drivers as possible.
>
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> Index: scsi-misc-2.6/drivers/scsi/scsi_error.c
> ===================================================================
> --- scsi-misc-2.6.orig/drivers/scsi/scsi_error.c 2006-10-30 17:00:23.000000000 +0100
> +++ scsi-misc-2.6/drivers/scsi/scsi_error.c 2006-11-04 17:30:33.000000000 +0100
> @@ -453,9 +453,18 @@
> }
>
> /**
> - * scsi_send_eh_cmnd - send a cmd to a device as part of error recovery.
> - * @scmd: SCSI Cmd to send.
> - * @timeout: Timeout for cmd.
> + * scsi_send_eh_cmnd - submit a scsi command as part of error recory
> + * @scmd: SCSI command structure to hijack
> + * @cmnd: CDB to send
> + * @cmnd_size: size if bytes of @cmnd
> + * @timeout: timeout for this request
> + * @copy_sense: request sense data if set to 1
> + *
> + * This function is used to send a scsi command down to a target device
> + * as part of the error recovery process. If @copy_sense is 0 the command
> + * sent must be one that does not transfer any data. If @copy_sense is 1
> + * the command must be REQUEST_SENSE and this functions copies out the
> + * sense buffer it got into @scmd->sense_buffer.
> *
> * Return value:
> * SUCCESS or FAILED or NEEDS_RETRY
> @@ -469,6 +478,7 @@
> DECLARE_COMPLETION_ONSTACK(done);
> unsigned long timeleft;
> unsigned long flags;
> + struct scatterlist sgl;
> unsigned char old_cmnd[MAX_COMMAND_SIZE];
> enum dma_data_direction old_data_direction;
> unsigned short old_use_sg;
> @@ -500,19 +510,24 @@
> if (shost->hostt->unchecked_isa_dma)
> gfp_mask |= __GFP_DMA;
>
> - scmd->sc_data_direction = DMA_FROM_DEVICE;
> - scmd->request_bufflen = 252;
> - scmd->request_buffer = kzalloc(scmd->request_bufflen, gfp_mask);
> - if (!scmd->request_buffer)
> + sgl.page = alloc_page(gfp_mask);
> + if (!sgl.page)
> return FAILED;
> + sgl.offset = 0;
> + sgl.length = 252;
> +
> + scmd->sc_data_direction = DMA_FROM_DEVICE;
> + scmd->request_bufflen = sgl.length;
> + scmd->request_buffer = &sgl;
> + scmd->use_sg = 1;
> } else {
> scmd->request_buffer = NULL;
> scmd->request_bufflen = 0;
> scmd->sc_data_direction = DMA_NONE;
> + scmd->use_sg = 0;
> }
>
> scmd->underflow = 0;
> - scmd->use_sg = 0;
> scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]);
>
> if (sdev->scsi_level <= SCSI_2)
> @@ -583,7 +598,7 @@
> memcpy(scmd->sense_buffer, scmd->request_buffer,
> sizeof(scmd->sense_buffer));
> }
> - kfree(scmd->request_buffer);
> + __free_page(sgl.page);
> }
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2006-11-04 20:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-04 19:04 [PATCH] use one-element sg list in scsi_send_eh_cmnd Christoph Hellwig
2006-11-03 17:13 ` Rolf Eike Beer
2006-11-06 8:51 ` Stefan Richter
2006-11-04 20:15 ` Luben Tuikov [this message]
2006-11-04 20:28 ` Christoph Hellwig
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=809856.67393.qm@web31801.mail.mud.yahoo.com \
--to=ltuikov@yahoo.com \
--cc=hch@lst.de \
--cc=jejb@steeleye.com \
--cc=linux-scsi@vger.kernel.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