linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* cciss update [1/2] updates our SCSI support to not use deprecated headers
@ 2004-10-13 21:13 mike.miller
  2004-10-13 21:21 ` Jeff Garzik
  0 siblings, 1 reply; 5+ messages in thread
From: mike.miller @ 2004-10-13 21:13 UTC (permalink / raw)
  To: akpm, axboe; +Cc: linux-kernel, linux-scsi

The following patch updates the cciss scsi support to no longer use the deprecated APIs. This is almost identical to the patch sent in by Christoph Hellwig. I had trouble with his patch, maybe my mailer munged it up????

This patch applies to 2.6.9-rc4. Please apply in order.
Please consider this for inclusion.

Thanks,
mikem
------------------------------------------------------------------------------

diff -burNp lx269-rc4.orig/drivers/block/cciss_scsi.c lx269-rc4/drivers/block/cciss_scsi.c
--- lx269-rc4.orig/drivers/block/cciss_scsi.c	2004-08-14 00:36:32.000000000 -0500
+++ lx269-rc4/drivers/block/cciss_scsi.c	2004-10-13 13:19:22.155575536 -0500
@@ -28,7 +28,9 @@
    through the array controller.  Note in particular, neither 
    physical nor logical disks are presented through the scsi layer. */
 
-#include "../scsi/scsi.h" 
+#include <scsi/scsi.h> 
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h> 
 #include <asm/atomic.h>
 #include <linux/timer.h>
@@ -61,15 +63,8 @@ int cciss_scsi_proc_info(
 		int length, 	   /* length of data in buffer */
 		int func);	   /* 0 == read, 1 == write */
 
-int cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *));
-#if 0
-int cciss_scsi_abort(Scsi_Cmnd *cmd);
-#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
-int cciss_scsi_reset(Scsi_Cmnd *cmd, unsigned int reset_flags);
-#else
-int cciss_scsi_reset(Scsi_Cmnd *cmd);
-#endif
-#endif
+int cciss_scsi_queue_command (struct scsi_cmnd *cmd, 
+		void (* done)(struct scsi_cmnd *));
 
 static struct cciss_scsi_hba_t ccissscsi[MAX_CTLR] = {
 	{ .name = "cciss0", .ndevices = 0 },
@@ -82,7 +77,7 @@ static struct cciss_scsi_hba_t ccissscsi
 	{ .name = "cciss7", .ndevices = 0 },
 };
 
-static Scsi_Host_Template cciss_driver_template = {
+static struct scsi_host_template cciss_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= "cciss",
 	.proc_name		= "cciss",
@@ -552,11 +547,12 @@ cciss_scsi_setup(int cntl_num)
 static void
 complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
 {
-	Scsi_Cmnd *cmd;
+	struct scsi_cmnd *cmd;
 	ctlr_info_t *ctlr;
 	u64bit addr64;
 	ErrorInfo_struct *ei;
 
+	cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_KERNEL);
 	ei = cp->err_info;
 
 	/* First, see if it was a message rather than a command */
@@ -565,7 +561,7 @@ complete_scsi_command( CommandList_struc
 		return;
 	}
 
-	cmd = (Scsi_Cmnd *) cp->scsi_cmd;	
+	cmd = (struct scsi_cmnd *) cp->scsi_cmd;	
 	ctlr = hba[cp->ctlr];
 
 	/* undo the DMA mappings */
@@ -573,14 +569,14 @@ complete_scsi_command( CommandList_struc
 	if (cmd->use_sg) {
 		pci_unmap_sg(ctlr->pdev,
 			cmd->buffer, cmd->use_sg,
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	}
 	else if (cmd->request_bufflen) {
 		addr64.val32.lower = cp->SG[0].Addr.lower;
                 addr64.val32.upper = cp->SG[0].Addr.upper;
                 pci_unmap_single(ctlr->pdev, (dma_addr_t) addr64.val,
                 	cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction));
+				cmd->sc_data_direction);
 	}
 
 	cmd->result = (DID_OK << 16); 		/* host byte */
@@ -783,9 +779,8 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	cp->Request.Type.Direction = direction;
 
 	/* Fill in the SG list and do dma mapping */
-	cciss_map_one(c->pdev, cp, 
-			(unsigned char *) buf, bufsize,
-			scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
+	cciss_map_one(c->pdev, cp, (unsigned char *) buf,
+			bufsize, DMA_FROM_DEVICE); 
 
 	cp->waiting = &wait;
 
@@ -799,9 +794,7 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	wait_for_completion(&wait);
 
 	/* undo the dma mapping */
-	cciss_unmap_one(c->pdev, cp, bufsize,
-				scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
-
+	cciss_unmap_one(c->pdev, cp, bufsize, DMA_FROM_DEVICE);
 	return(0);
 }
 
@@ -1180,14 +1173,14 @@ cciss_scsi_info(struct Scsi_Host *sa)
 }
 
 
-/* cciss_scatter_gather takes a Scsi_Cmnd, (cmd), and does the pci 
+/* cciss_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci 
    dma mapping  and fills in the scatter gather entries of the 
    cciss command, cp. */
 
 static void
 cciss_scatter_gather(struct pci_dev *pdev, 
 		CommandList_struct *cp,	
-		Scsi_Cmnd *cmd)
+		struct scsi_cmnd *cmd)
 {
 	unsigned int use_sg, nsegs=0, len;
 	struct scatterlist *scatter = (struct scatterlist *) cmd->buffer;
@@ -1200,7 +1193,7 @@ cciss_scatter_gather(struct pci_dev *pde
 			addr64 = (__u64) pci_map_single(pdev, 
 				cmd->request_buffer, 
 				cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	
 			cp->SG[0].Addr.lower = 
 			  (__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
@@ -1213,7 +1206,7 @@ cciss_scatter_gather(struct pci_dev *pde
 	else if (cmd->use_sg <= MAXSGENTRIES) {	/* not too many addrs? */
 
 		use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, 
-			scsi_to_pci_dma_dir(cmd->sc_data_direction));
+			cmd->sc_data_direction);
 
 		for (nsegs=0; nsegs < use_sg; nsegs++) {
 			addr64 = (__u64) sg_dma_address(&scatter[nsegs]);
@@ -1234,7 +1227,7 @@ cciss_scatter_gather(struct pci_dev *pde
 
 
 int 
-cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
+cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
 {
 	ctlr_info_t **c;
 	int ctlr, rc;
@@ -1302,11 +1295,10 @@ cciss_scsi_queue_command (Scsi_Cmnd *cmd
 	cp->Request.Type.Attribute = ATTR_SIMPLE;
 	switch(cmd->sc_data_direction)
 	{
-	  case SCSI_DATA_WRITE: cp->Request.Type.Direction = XFER_WRITE; break;
-	  case SCSI_DATA_READ: cp->Request.Type.Direction = XFER_READ; break;
-	  case SCSI_DATA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
-
-	  case SCSI_DATA_UNKNOWN:
+	  case DMA_TO_DEVICE: cp->Request.Type.Direction = XFER_WRITE; break;
+	  case DMA_FROM_DEVICE: cp->Request.Type.Direction = XFER_READ; break;
+	  case DMA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
+	  case DMA_BIDIRECTIONAL:
 		// This can happen if a buggy application does a scsi passthru
 		// and sets both inlen and outlen to non-zero. ( see
 		// ../scsi/scsi_ioctl.c:scsi_ioctl_send_command() )

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

* Re: cciss update [1/2] updates our SCSI support to not use deprecated headers
  2004-10-13 21:13 cciss update [1/2] updates our SCSI support to not use deprecated headers mike.miller
@ 2004-10-13 21:21 ` Jeff Garzik
  2004-10-13 21:36   ` mikem
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Garzik @ 2004-10-13 21:21 UTC (permalink / raw)
  To: mikem; +Cc: akpm, axboe, linux-kernel, linux-scsi

On Wed, Oct 13, 2004 at 04:13:02PM -0500, mike.miller@hjp.com wrote:
> @@ -552,11 +547,12 @@ cciss_scsi_setup(int cntl_num)
>  static void
>  complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
>  {
> -	Scsi_Cmnd *cmd;
> +	struct scsi_cmnd *cmd;
>  	ctlr_info_t *ctlr;
>  	u64bit addr64;
>  	ErrorInfo_struct *ei;
>  
> +	cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_KERNEL);
>  	ei = cp->err_info;
>  

This can get called from the interrupt handler, so GFP_KERNEL won't
work.  GFP_ATOMIC works, but you need to check kmalloc() return for
NULL.

	Jeff




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

* Re: cciss update [1/2] updates our SCSI support to not use deprecated headers
  2004-10-13 21:21 ` Jeff Garzik
@ 2004-10-13 21:36   ` mikem
       [not found]     ` <1097704228.3062.1.camel@localhost.localdomain>
  0 siblings, 1 reply; 5+ messages in thread
From: mikem @ 2004-10-13 21:36 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: akpm, axboe, linux-kernel, linux-scsi

On Wed, Oct 13, 2004 at 05:21:05PM -0400, Jeff Garzik wrote:
> On Wed, Oct 13, 2004 at 04:13:02PM -0500, mike.miller@hjp.com wrote:
> > @@ -552,11 +547,12 @@ cciss_scsi_setup(int cntl_num)
> >  static void
> >  complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
> >  {
> > -	Scsi_Cmnd *cmd;
> > +	struct scsi_cmnd *cmd;
> >  	ctlr_info_t *ctlr;
> >  	u64bit addr64;
> >  	ErrorInfo_struct *ei;
> >  
> > +	cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_KERNEL);
> >  	ei = cp->err_info;
> >  
> 
> This can get called from the interrupt handler, so GFP_KERNEL won't
> work.  GFP_ATOMIC works, but you need to check kmalloc() return for
> NULL.
> 
> 	Jeff
> 
Hopefully this addresses this concern. Thanks, Jeff.

mikem
-------------------------------------------------------------------------------

diff -burNp lx269-rc4.orig/drivers/block/cciss_scsi.c lx269-rc4-p001/drivers/block/cciss_scsi.c
--- lx269-rc4.orig/drivers/block/cciss_scsi.c	2004-08-14 00:36:32.000000000 -0500
+++ lx269-rc4-p001/drivers/block/cciss_scsi.c	2004-10-13 16:32:48.840091288 -0500
@@ -28,7 +28,9 @@
    through the array controller.  Note in particular, neither 
    physical nor logical disks are presented through the scsi layer. */
 
-#include "../scsi/scsi.h" 
+#include <scsi/scsi.h> 
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h> 
 #include <asm/atomic.h>
 #include <linux/timer.h>
@@ -61,15 +63,8 @@ int cciss_scsi_proc_info(
 		int length, 	   /* length of data in buffer */
 		int func);	   /* 0 == read, 1 == write */
 
-int cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *));
-#if 0
-int cciss_scsi_abort(Scsi_Cmnd *cmd);
-#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
-int cciss_scsi_reset(Scsi_Cmnd *cmd, unsigned int reset_flags);
-#else
-int cciss_scsi_reset(Scsi_Cmnd *cmd);
-#endif
-#endif
+int cciss_scsi_queue_command (struct scsi_cmnd *cmd, 
+		void (* done)(struct scsi_cmnd *));
 
 static struct cciss_scsi_hba_t ccissscsi[MAX_CTLR] = {
 	{ .name = "cciss0", .ndevices = 0 },
@@ -82,7 +77,7 @@ static struct cciss_scsi_hba_t ccissscsi
 	{ .name = "cciss7", .ndevices = 0 },
 };
 
-static Scsi_Host_Template cciss_driver_template = {
+static struct scsi_host_template cciss_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= "cciss",
 	.proc_name		= "cciss",
@@ -552,11 +547,15 @@ cciss_scsi_setup(int cntl_num)
 static void
 complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
 {
-	Scsi_Cmnd *cmd;
+	struct scsi_cmnd *cmd;
 	ctlr_info_t *ctlr;
 	u64bit addr64;
 	ErrorInfo_struct *ei;
 
+	if(cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_ATOMIC) == NULL) {
+		printk(KERN_WARNING "out of memory\n");
+		return -ENOMEM;
+	}
 	ei = cp->err_info;
 
 	/* First, see if it was a message rather than a command */
@@ -565,7 +564,7 @@ complete_scsi_command( CommandList_struc
 		return;
 	}
 
-	cmd = (Scsi_Cmnd *) cp->scsi_cmd;	
+	cmd = (struct scsi_cmnd *) cp->scsi_cmd;	
 	ctlr = hba[cp->ctlr];
 
 	/* undo the DMA mappings */
@@ -573,14 +572,14 @@ complete_scsi_command( CommandList_struc
 	if (cmd->use_sg) {
 		pci_unmap_sg(ctlr->pdev,
 			cmd->buffer, cmd->use_sg,
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	}
 	else if (cmd->request_bufflen) {
 		addr64.val32.lower = cp->SG[0].Addr.lower;
                 addr64.val32.upper = cp->SG[0].Addr.upper;
                 pci_unmap_single(ctlr->pdev, (dma_addr_t) addr64.val,
                 	cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction));
+				cmd->sc_data_direction);
 	}
 
 	cmd->result = (DID_OK << 16); 		/* host byte */
@@ -783,9 +782,8 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	cp->Request.Type.Direction = direction;
 
 	/* Fill in the SG list and do dma mapping */
-	cciss_map_one(c->pdev, cp, 
-			(unsigned char *) buf, bufsize,
-			scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
+	cciss_map_one(c->pdev, cp, (unsigned char *) buf,
+			bufsize, DMA_FROM_DEVICE); 
 
 	cp->waiting = &wait;
 
@@ -799,9 +797,7 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	wait_for_completion(&wait);
 
 	/* undo the dma mapping */
-	cciss_unmap_one(c->pdev, cp, bufsize,
-				scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
-
+	cciss_unmap_one(c->pdev, cp, bufsize, DMA_FROM_DEVICE);
 	return(0);
 }
 
@@ -1180,14 +1176,14 @@ cciss_scsi_info(struct Scsi_Host *sa)
 }
 
 
-/* cciss_scatter_gather takes a Scsi_Cmnd, (cmd), and does the pci 
+/* cciss_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci 
    dma mapping  and fills in the scatter gather entries of the 
    cciss command, cp. */
 
 static void
 cciss_scatter_gather(struct pci_dev *pdev, 
 		CommandList_struct *cp,	
-		Scsi_Cmnd *cmd)
+		struct scsi_cmnd *cmd)
 {
 	unsigned int use_sg, nsegs=0, len;
 	struct scatterlist *scatter = (struct scatterlist *) cmd->buffer;
@@ -1200,7 +1196,7 @@ cciss_scatter_gather(struct pci_dev *pde
 			addr64 = (__u64) pci_map_single(pdev, 
 				cmd->request_buffer, 
 				cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	
 			cp->SG[0].Addr.lower = 
 			  (__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
@@ -1213,7 +1209,7 @@ cciss_scatter_gather(struct pci_dev *pde
 	else if (cmd->use_sg <= MAXSGENTRIES) {	/* not too many addrs? */
 
 		use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, 
-			scsi_to_pci_dma_dir(cmd->sc_data_direction));
+			cmd->sc_data_direction);
 
 		for (nsegs=0; nsegs < use_sg; nsegs++) {
 			addr64 = (__u64) sg_dma_address(&scatter[nsegs]);
@@ -1234,7 +1230,7 @@ cciss_scatter_gather(struct pci_dev *pde
 
 
 int 
-cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
+cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
 {
 	ctlr_info_t **c;
 	int ctlr, rc;
@@ -1302,11 +1298,10 @@ cciss_scsi_queue_command (Scsi_Cmnd *cmd
 	cp->Request.Type.Attribute = ATTR_SIMPLE;
 	switch(cmd->sc_data_direction)
 	{
-	  case SCSI_DATA_WRITE: cp->Request.Type.Direction = XFER_WRITE; break;
-	  case SCSI_DATA_READ: cp->Request.Type.Direction = XFER_READ; break;
-	  case SCSI_DATA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
-
-	  case SCSI_DATA_UNKNOWN:
+	  case DMA_TO_DEVICE: cp->Request.Type.Direction = XFER_WRITE; break;
+	  case DMA_FROM_DEVICE: cp->Request.Type.Direction = XFER_READ; break;
+	  case DMA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
+	  case DMA_BIDIRECTIONAL:
 		// This can happen if a buggy application does a scsi passthru
 		// and sets both inlen and outlen to non-zero. ( see
 		// ../scsi/scsi_ioctl.c:scsi_ioctl_send_command() )

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

* Re: cciss update [1/2] updates our SCSI support to not use deprecated headers pass 3
       [not found]     ` <1097704228.3062.1.camel@localhost.localdomain>
@ 2004-10-13 22:33       ` mike.miller
  2004-10-14  0:08         ` Jens Axboe
  0 siblings, 1 reply; 5+ messages in thread
From: mike.miller @ 2004-10-13 22:33 UTC (permalink / raw)
  To: Joe Perches; +Cc: akpm, axboe, linux-kernel, linux-scsi

On Wed, Oct 13, 2004 at 02:50:28PM -0700, Joe Perches wrote:
> On Wed, 2004-10-13 at 16:36 -0500, mikem wrote:
> > @@ -552,11 +547,15 @@ cciss_scsi_setup(int cntl_num)
> >  static void
> >  complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
> >  {
> > -	Scsi_Cmnd *cmd;
> > +	struct scsi_cmnd *cmd;
> >  	ctlr_info_t *ctlr;
> >  	u64bit addr64;
> >  	ErrorInfo_struct *ei;
> >  
> > +	if(cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_ATOMIC) == NULL) {
> > +		printk(KERN_WARNING "out of memory\n");
> > +		return -ENOMEM;
> > +	}
> 
> q: Do you even bother to compile this?
> a: no
> 
> function is static void
> 
> 1:	don't return anything
> 2:	put kmalloc and test on 2 separate lines
> 
Sorry, I was in too much of a hurry. This time its been compiled AND tested.

mikem
------------------------------------------------------------------------------

diff -burNp lx269-rc4.orig/drivers/block/cciss_scsi.c lx269-rc4-p001/drivers/block/cciss_scsi.c
--- lx269-rc4.orig/drivers/block/cciss_scsi.c	2004-08-14 00:36:32.000000000 -0500
+++ lx269-rc4-p001/drivers/block/cciss_scsi.c	2004-10-13 17:07:55.269865288 -0500
@@ -28,7 +28,9 @@
    through the array controller.  Note in particular, neither 
    physical nor logical disks are presented through the scsi layer. */
 
-#include "../scsi/scsi.h" 
+#include <scsi/scsi.h> 
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h> 
 #include <asm/atomic.h>
 #include <linux/timer.h>
@@ -61,15 +63,8 @@ int cciss_scsi_proc_info(
 		int length, 	   /* length of data in buffer */
 		int func);	   /* 0 == read, 1 == write */
 
-int cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *));
-#if 0
-int cciss_scsi_abort(Scsi_Cmnd *cmd);
-#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
-int cciss_scsi_reset(Scsi_Cmnd *cmd, unsigned int reset_flags);
-#else
-int cciss_scsi_reset(Scsi_Cmnd *cmd);
-#endif
-#endif
+int cciss_scsi_queue_command (struct scsi_cmnd *cmd, 
+		void (* done)(struct scsi_cmnd *));
 
 static struct cciss_scsi_hba_t ccissscsi[MAX_CTLR] = {
 	{ .name = "cciss0", .ndevices = 0 },
@@ -82,7 +77,7 @@ static struct cciss_scsi_hba_t ccissscsi
 	{ .name = "cciss7", .ndevices = 0 },
 };
 
-static Scsi_Host_Template cciss_driver_template = {
+static struct scsi_host_template cciss_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= "cciss",
 	.proc_name		= "cciss",
@@ -552,11 +547,16 @@ cciss_scsi_setup(int cntl_num)
 static void
 complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
 {
-	Scsi_Cmnd *cmd;
+	struct scsi_cmnd *cmd;
 	ctlr_info_t *ctlr;
 	u64bit addr64;
 	ErrorInfo_struct *ei;
 
+	cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_ATOMIC);
+	if(cmd == NULL) {
+		printk(KERN_WARNING "out of memory\n");
+		return;
+	}
 	ei = cp->err_info;
 
 	/* First, see if it was a message rather than a command */
@@ -565,7 +565,7 @@ complete_scsi_command( CommandList_struc
 		return;
 	}
 
-	cmd = (Scsi_Cmnd *) cp->scsi_cmd;	
+	cmd = (struct scsi_cmnd *) cp->scsi_cmd;	
 	ctlr = hba[cp->ctlr];
 
 	/* undo the DMA mappings */
@@ -573,14 +573,14 @@ complete_scsi_command( CommandList_struc
 	if (cmd->use_sg) {
 		pci_unmap_sg(ctlr->pdev,
 			cmd->buffer, cmd->use_sg,
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	}
 	else if (cmd->request_bufflen) {
 		addr64.val32.lower = cp->SG[0].Addr.lower;
                 addr64.val32.upper = cp->SG[0].Addr.upper;
                 pci_unmap_single(ctlr->pdev, (dma_addr_t) addr64.val,
                 	cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction));
+				cmd->sc_data_direction);
 	}
 
 	cmd->result = (DID_OK << 16); 		/* host byte */
@@ -783,9 +783,8 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	cp->Request.Type.Direction = direction;
 
 	/* Fill in the SG list and do dma mapping */
-	cciss_map_one(c->pdev, cp, 
-			(unsigned char *) buf, bufsize,
-			scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
+	cciss_map_one(c->pdev, cp, (unsigned char *) buf,
+			bufsize, DMA_FROM_DEVICE); 
 
 	cp->waiting = &wait;
 
@@ -799,9 +798,7 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
 	wait_for_completion(&wait);
 
 	/* undo the dma mapping */
-	cciss_unmap_one(c->pdev, cp, bufsize,
-				scsi_to_pci_dma_dir(SCSI_DATA_READ)); 
-
+	cciss_unmap_one(c->pdev, cp, bufsize, DMA_FROM_DEVICE);
 	return(0);
 }
 
@@ -1180,14 +1177,14 @@ cciss_scsi_info(struct Scsi_Host *sa)
 }
 
 
-/* cciss_scatter_gather takes a Scsi_Cmnd, (cmd), and does the pci 
+/* cciss_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci 
    dma mapping  and fills in the scatter gather entries of the 
    cciss command, cp. */
 
 static void
 cciss_scatter_gather(struct pci_dev *pdev, 
 		CommandList_struct *cp,	
-		Scsi_Cmnd *cmd)
+		struct scsi_cmnd *cmd)
 {
 	unsigned int use_sg, nsegs=0, len;
 	struct scatterlist *scatter = (struct scatterlist *) cmd->buffer;
@@ -1200,7 +1197,7 @@ cciss_scatter_gather(struct pci_dev *pde
 			addr64 = (__u64) pci_map_single(pdev, 
 				cmd->request_buffer, 
 				cmd->request_bufflen, 
-				scsi_to_pci_dma_dir(cmd->sc_data_direction)); 
+				cmd->sc_data_direction); 
 	
 			cp->SG[0].Addr.lower = 
 			  (__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
@@ -1213,7 +1210,7 @@ cciss_scatter_gather(struct pci_dev *pde
 	else if (cmd->use_sg <= MAXSGENTRIES) {	/* not too many addrs? */
 
 		use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, 
-			scsi_to_pci_dma_dir(cmd->sc_data_direction));
+			cmd->sc_data_direction);
 
 		for (nsegs=0; nsegs < use_sg; nsegs++) {
 			addr64 = (__u64) sg_dma_address(&scatter[nsegs]);
@@ -1234,7 +1231,7 @@ cciss_scatter_gather(struct pci_dev *pde
 
 
 int 
-cciss_scsi_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
+cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
 {
 	ctlr_info_t **c;
 	int ctlr, rc;
@@ -1302,11 +1299,10 @@ cciss_scsi_queue_command (Scsi_Cmnd *cmd
 	cp->Request.Type.Attribute = ATTR_SIMPLE;
 	switch(cmd->sc_data_direction)
 	{
-	  case SCSI_DATA_WRITE: cp->Request.Type.Direction = XFER_WRITE; break;
-	  case SCSI_DATA_READ: cp->Request.Type.Direction = XFER_READ; break;
-	  case SCSI_DATA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
-
-	  case SCSI_DATA_UNKNOWN:
+	  case DMA_TO_DEVICE: cp->Request.Type.Direction = XFER_WRITE; break;
+	  case DMA_FROM_DEVICE: cp->Request.Type.Direction = XFER_READ; break;
+	  case DMA_NONE: cp->Request.Type.Direction = XFER_NONE; break;
+	  case DMA_BIDIRECTIONAL:
 		// This can happen if a buggy application does a scsi passthru
 		// and sets both inlen and outlen to non-zero. ( see
 		// ../scsi/scsi_ioctl.c:scsi_ioctl_send_command() )

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

* Re: cciss update [1/2] updates our SCSI support to not use deprecated headers pass 3
  2004-10-13 22:33       ` cciss update [1/2] updates our SCSI support to not use deprecated headers pass 3 mike.miller
@ 2004-10-14  0:08         ` Jens Axboe
  0 siblings, 0 replies; 5+ messages in thread
From: Jens Axboe @ 2004-10-14  0:08 UTC (permalink / raw)
  To: mikem; +Cc: Joe Perches, akpm, linux-kernel, linux-scsi

On Wed, Oct 13 2004, mike.miller@hp.com wrote:
> @@ -552,11 +547,16 @@ cciss_scsi_setup(int cntl_num)
>  static void
>  complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
>  {
> -	Scsi_Cmnd *cmd;
> +	struct scsi_cmnd *cmd;
>  	ctlr_info_t *ctlr;
>  	u64bit addr64;
>  	ErrorInfo_struct *ei;
>  
> +	cmd = kmalloc(sizeof(struct scsi_cmnd), GFP_ATOMIC);
> +	if(cmd == NULL) {
> +		printk(KERN_WARNING "out of memory\n");
> +		return;
> +	}
>  	ei = cp->err_info;
>  
>  	/* First, see if it was a message rather than a command */
> @@ -565,7 +565,7 @@ complete_scsi_command( CommandList_struc
>  		return;
>  	}
>  
> -	cmd = (Scsi_Cmnd *) cp->scsi_cmd;	
> +	cmd = (struct scsi_cmnd *) cp->scsi_cmd;	
>  	ctlr = hba[cp->ctlr];

This makes zero sense. First of all, you can't just quit out of
completing a command based on a weird allocation failure. Secondly, why
are you allocation cmd at completion time (??) and then overwriting it a
few lines later.

-- 
Jens Axboe


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

end of thread, other threads:[~2004-10-14  0:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-13 21:13 cciss update [1/2] updates our SCSI support to not use deprecated headers mike.miller
2004-10-13 21:21 ` Jeff Garzik
2004-10-13 21:36   ` mikem
     [not found]     ` <1097704228.3062.1.camel@localhost.localdomain>
2004-10-13 22:33       ` cciss update [1/2] updates our SCSI support to not use deprecated headers pass 3 mike.miller
2004-10-14  0:08         ` Jens Axboe

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).