RE: [PATCH 08/10] stex: use sg buffer copy helper functions

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

 




>-----Original Message-----
>From: fujita [mailto:tomof@xxxxxxx] On Behalf Of FUJITA Tomonori
>Sent: Saturday, March 08, 2008 8:45 PM
>To: linux-scsi@xxxxxxxxxxxxxxx
>Cc: tomof@xxxxxxx; FUJITA Tomonori; Ed Lin; James Bottomley
>Subject: [PATCH 08/10] stex: use sg buffer copy helper functions
>
>
>This replaces stex_internal_copy with scsi_sg_copy_to/from_buffer.
>
>Signed-off-by: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx>
>Cc: Ed Lin <ed.lin@xxxxxxxxxxx>
>Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxx>
>---
> drivers/scsi/stex.c |   66 
>+++++++-------------------------------------------
> 1 files changed, 10 insertions(+), 56 deletions(-)
>
>diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
>index 654430e..8c7b183 100644
>--- a/drivers/scsi/stex.c
>+++ b/drivers/scsi/stex.c
>@@ -426,49 +426,13 @@ static int stex_map_sg(struct st_hba *hba,
> 	return 0;
> }
> 
>-static void stex_internal_copy(struct scsi_cmnd *cmd,
>-	const void *src, size_t *count, int sg_count, int direction)
>-{
>-	size_t lcount;
>-	size_t len;
>-	void *s, *d, *base = NULL;
>-	size_t offset;
>-
>-	if (*count > scsi_bufflen(cmd))
>-		*count = scsi_bufflen(cmd);
>-	lcount = *count;
>-	while (lcount) {
>-		len = lcount;
>-		s = (void *)src;
>-
>-		offset = *count - lcount;
>-		s += offset;
>-		base = scsi_kmap_atomic_sg(scsi_sglist(cmd),
>-					   sg_count, &offset, &len);
>-		if (!base) {
>-			*count -= lcount;
>-			return;
>-		}
>-		d = base + offset;
>-
>-		if (direction == ST_TO_CMD)
>-			memcpy(d, s, len);
>-		else
>-			memcpy(s, d, len);
>-
>-		lcount -= len;
>-		scsi_kunmap_atomic_sg(base);
>-	}
>-}
>-
> static void stex_controller_info(struct st_hba *hba, struct 
>st_ccb *ccb)
> {
> 	struct st_frame *p;
> 	size_t count = sizeof(struct st_frame);
> 
> 	p = hba->copy_buffer;
>-	stex_internal_copy(ccb->cmd, p, &count, scsi_sg_count(ccb->cmd),
>-			   ST_FROM_CMD);
>+	count = scsi_sg_copy_to_buffer(ccb->cmd, p, count);
> 	memset(p->base, 0, sizeof(u32)*6);
> 	*(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0);
> 	p->rom_addr = 0;
>@@ -486,8 +450,7 @@ static void stex_controller_info(struct 
>st_hba *hba, struct st_ccb *ccb)
> 	p->subid =
> 		hba->pdev->subsystem_vendor << 16 | 
>hba->pdev->subsystem_device;
> 
>-	stex_internal_copy(ccb->cmd, p, &count, scsi_sg_count(ccb->cmd),
>-			   ST_TO_CMD);
>+	count = scsi_sg_copy_from_buffer(ccb->cmd, p, count);
> }
> 
> static void
>@@ -554,10 +517,8 @@ stex_queuecommand(struct scsi_cmnd *cmd, 
>void (* done)(struct scsi_cmnd *))
> 		unsigned char page;
> 		page = cmd->cmnd[2] & 0x3f;
> 		if (page == 0x8 || page == 0x3f) {
>-			size_t cp_len = sizeof(ms10_caching_page);
>-			stex_internal_copy(cmd, ms10_caching_page,
>-					   &cp_len, scsi_sg_count(cmd),
>-					   ST_TO_CMD);
>+			scsi_sg_copy_from_buffer(cmd, ms10_caching_page,
>+						 
>sizeof(ms10_caching_page));
> 			cmd->result = DID_OK << 16 | 
>COMMAND_COMPLETE << 8;
> 			done(cmd);
> 		} else
>@@ -586,10 +547,8 @@ stex_queuecommand(struct scsi_cmnd *cmd, 
>void (* done)(struct scsi_cmnd *))
> 		if (id != host->max_id - 1)
> 			break;
> 		if (lun == 0 && (cmd->cmnd[1] & INQUIRY_EVPD) == 0) {
>-			size_t cp_len = sizeof(console_inq_page);
>-			stex_internal_copy(cmd, console_inq_page,
>-					   &cp_len, scsi_sg_count(cmd),
>-					   ST_TO_CMD);
>+			scsi_sg_copy_from_buffer(cmd, (void 
>*)console_inq_page,
>+						 
>sizeof(console_inq_page));
> 			cmd->result = DID_OK << 16 | 
>COMMAND_COMPLETE << 8;
> 			done(cmd);
> 		} else
>@@ -606,8 +565,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, 
>void (* done)(struct scsi_cmnd *))
> 			ver.signature[0] = PASSTHRU_SIGNATURE;
> 			ver.console_id = host->max_id - 1;
> 			ver.host_no = hba->host->host_no;
>-			stex_internal_copy(cmd, &ver, &cp_len,
>-					   scsi_sg_count(cmd), 
>ST_TO_CMD);
>+			cp_len = scsi_sg_copy_from_buffer(cmd, 
>&ver, cp_len);
> 			cmd->result = sizeof(ver) == cp_len ?
> 				DID_OK << 16 | COMMAND_COMPLETE << 8 :
> 				DID_ERROR << 16 | COMMAND_COMPLETE << 8;
>@@ -700,15 +658,12 @@ static void stex_copy_data(struct st_ccb *ccb,
> 
> 	if (ccb->cmd == NULL)
> 		return;
>-	stex_internal_copy(ccb->cmd,
>-		resp->variable, &count, 
>scsi_sg_count(ccb->cmd), ST_TO_CMD);
>+	count = scsi_sg_copy_from_buffer(ccb->cmd, 
>resp->variable, count);
> }
> 
> static void stex_ys_commands(struct st_hba *hba,
> 	struct st_ccb *ccb, struct status_msg *resp)
> {
>-	size_t count;
>-
> 	if (ccb->cmd->cmnd[0] == MGT_CMD &&
> 		resp->scsi_status != SAM_STAT_CHECK_CONDITION) {
> 		scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) -
>@@ -724,9 +679,8 @@ static void stex_ys_commands(struct st_hba *hba,
> 		resp->scsi_status == SAM_STAT_GOOD) {
> 		ST_INQ *inq_data;
> 
>-		count = STEX_EXTRA_SIZE;
>-		stex_internal_copy(ccb->cmd, hba->copy_buffer,
>-			&count, scsi_sg_count(ccb->cmd), ST_FROM_CMD);
>+		scsi_sg_copy_to_buffer(ccb->cmd, hba->copy_buffer,
>+				       STEX_EXTRA_SIZE);
> 		inq_data = (ST_INQ *)hba->copy_buffer;
> 		if (inq_data->DeviceTypeQualifier != 0)
> 			ccb->srb_status = SRB_STATUS_SELECTION_TIMEOUT;
>-- 
>1.5.3.7
>
>

ACK patch 8.

Ed Lin
--
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