public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] aha1542: queuecommand: change panic() to return
@ 2004-01-25  6:00 Randy.Dunlap
  2004-01-25 19:34 ` James Bottomley
  0 siblings, 1 reply; 3+ messages in thread
From: Randy.Dunlap @ 2004-01-25  6:00 UTC (permalink / raw)
  To: linux-scsi; +Cc: jejb


Hi,
Please apply to 2.6.current.

Thanks,
--
~Randy


From: Timmy Yee <shoujun@masterofpi.org>


Hi,

The aha1542 driver calls panic() if kmalloc() fails, which it shouldn't
do. This patch changes that by having the code return a nonzero value, so
it tells the SCSI mid-layer to retry the command, as suggested by Randy.

diff -puN drivers/scsi/aha1542.c~aha1542_qcommand_return drivers/scsi/aha1542.c


 linux-262-rc1-bk1-rddunlap/drivers/scsi/aha1542.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/scsi/aha1542.c~aha1542_qcommand_return drivers/scsi/aha1542.c
--- linux-262-rc1-bk1/drivers/scsi/aha1542.c~aha1542_qcommand_return	2004-01-23 15:51:47.000000000 -0800
+++ linux-262-rc1-bk1-rddunlap/drivers/scsi/aha1542.c	2004-01-23 15:51:47.000000000 -0800
@@ -708,7 +708,7 @@ static int aha1542_queuecommand(Scsi_Cmn
 		sgpnt = (struct scatterlist *) SCpnt->request_buffer;
 		cptr = (struct chain *) SCpnt->host_scribble;
 		if (cptr == NULL)
-			panic("aha1542.c: unable to allocate DMA memory\n");
+			return 1;
 		for (i = 0; i < SCpnt->use_sg; i++) {
 			if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 ||
 			    (((int) sgpnt[i].offset) & 1) || (sgpnt[i].length & 1)) {

_

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] aha1542: queuecommand: change panic() to return
  2004-01-25  6:00 [PATCH] aha1542: queuecommand: change panic() to return Randy.Dunlap
@ 2004-01-25 19:34 ` James Bottomley
  2004-01-25 20:36   ` Randy.Dunlap
  0 siblings, 1 reply; 3+ messages in thread
From: James Bottomley @ 2004-01-25 19:34 UTC (permalink / raw)
  To: Randy.Dunlap; +Cc: SCSI Mailing List

On Sun, 2004-01-25 at 00:00, Randy.Dunlap wrote:
>  		cptr = (struct chain *) SCpnt->host_scribble;
>  		if (cptr == NULL)
> -			panic("aha1542.c: unable to allocate DMA memory\n");
> +			return 1;
>  		for (i = 0; i < SCpnt->use_sg; i++) {
>  			if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 ||

This is really not right.  If you look, the driver has already claimed a
cdb for the command, so it will leak scarce resources in this error
path.

Also a better return might be SCSI_MLQUEUE_HOST_BUSY, since this would
be a global resource shortage for all commands.

James



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] aha1542: queuecommand: change panic() to return
  2004-01-25 19:34 ` James Bottomley
@ 2004-01-25 20:36   ` Randy.Dunlap
  0 siblings, 0 replies; 3+ messages in thread
From: Randy.Dunlap @ 2004-01-25 20:36 UTC (permalink / raw)
  To: James Bottomley; +Cc: linux-scsi

On 25 Jan 2004 13:34:11 -0600 James Bottomley <James.Bottomley@steeleye.com> wrote:

| On Sun, 2004-01-25 at 00:00, Randy.Dunlap wrote:
| >  		cptr = (struct chain *) SCpnt->host_scribble;
| >  		if (cptr == NULL)
| > -			panic("aha1542.c: unable to allocate DMA memory\n");
| > +			return 1;
| >  		for (i = 0; i < SCpnt->use_sg; i++) {
| >  			if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 ||
| 
| This is really not right.  If you look, the driver has already claimed a
| cdb for the command, so it will leak scarce resources in this error
| path.
| 
| Also a better return might be SCSI_MLQUEUE_HOST_BUSY, since this would
| be a global resource shortage for all commands.

Ah, an opportunity to update scsi_mid_low_api.txt also... (queued for later).

OK, here's a corrected patch.  Comments on it?

Thanks,
--
~Randy



From: Timmy Yee <shoujun@masterofpi.org>

Hi,

The aha1542 driver calls panic() if kmalloc() fails, which it shouldn't
do. This patch changes that by having the code return a nonzero value, so
it tells the SCSI mid-layer to retry the command, as suggested by Randy.


diffstat:=
 drivers/scsi/aha1542.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff -Naurp ./drivers/scsi/aha1542.c~qcommand_err ./drivers/scsi/aha1542.c
--- ./drivers/scsi/aha1542.c~qcommand_err	2004-01-08 22:59:42.000000000 -0800
+++ ./drivers/scsi/aha1542.c	2004-01-25 12:31:07.000000000 -0800
@@ -707,8 +707,11 @@ static int aha1542_queuecommand(Scsi_Cmn
 		SCpnt->host_scribble = (unsigned char *) kmalloc(512, GFP_DMA);
 		sgpnt = (struct scatterlist *) SCpnt->request_buffer;
 		cptr = (struct chain *) SCpnt->host_scribble;
-		if (cptr == NULL)
-			panic("aha1542.c: unable to allocate DMA memory\n");
+		if (cptr == NULL) {
+			/* free the claimed mailbox slot */
+			HOSTDATA(SCpnt->device->host)->SCint[mbo] = NULL;
+			return SCSI_MLQUEUE_HOST_BUSY;
+		}
 		for (i = 0; i < SCpnt->use_sg; i++) {
 			if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 ||
 			    (((int) sgpnt[i].offset) & 1) || (sgpnt[i].length & 1)) {

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-01-25 20:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-25  6:00 [PATCH] aha1542: queuecommand: change panic() to return Randy.Dunlap
2004-01-25 19:34 ` James Bottomley
2004-01-25 20:36   ` Randy.Dunlap

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox