aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavem <davem>2001-12-17 07:49:21 +0000
committerdavem <davem>2001-12-17 07:49:21 +0000
commitc7ed952798088e7e6f8dfc6a8f741560332961c0 (patch)
tree8a5a19eac08f9c535fcdc55cd5c8b6d554684468
parent2af6979fc28a26c497fa06087c7957041080fbc8 (diff)
downloadnetdev-vger-cvs-c7ed952798088e7e6f8dfc6a8f741560332961c0.tar.gz
Fix some remaining references to dead 'address'
member of scatterlist. INQUIRY scsi commands never use scatterlists so consider such a case a BUG in aic7xxx_old.c
-rw-r--r--drivers/ieee1394/sbp2.c8
-rw-r--r--drivers/scsi/aic7xxx_old.c15
-rw-r--r--drivers/scsi/qlogicpti.c11
-rw-r--r--drivers/scsi/sg.c56
-rw-r--r--drivers/usb/hpusbscsi.c3
-rw-r--r--drivers/usb/microtek.c11
-rw-r--r--drivers/usb/storage/freecom.c4
-rw-r--r--drivers/usb/storage/isd200.c8
-rw-r--r--drivers/usb/storage/protocol.c9
-rw-r--r--drivers/usb/storage/scsiglue.c34
-rw-r--r--drivers/usb/storage/sddr09.c29
-rw-r--r--drivers/usb/storage/shuttle_usbat.c16
-rw-r--r--drivers/usb/storage/transport.c4
-rw-r--r--drivers/usb/storage/usb.c4
14 files changed, 110 insertions, 102 deletions
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
index fe95a129e..c6a184248 100644
--- a/drivers/ieee1394/sbp2.c
+++ b/drivers/ieee1394/sbp2.c
@@ -1804,9 +1804,11 @@ static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi,
SBP2_DEBUG("Only one s/g element");
command->dma_dir = dma_dir;
command->dma_size = sgpnt[0].length;
- command->cmd_dma = pci_map_single (hi->host->pdev, sgpnt[0].address,
- command->dma_size,
- command->dma_dir);
+ command->cmd_dma = pci_map_page(hi->host->pdev,
+ sgpnt[0].page,
+ sgpnt[0].offset,
+ command->dma_size,
+ command->dma_dir);
SBP2_DMA_ALLOC("single scatter element");
command_orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
index 013cefb85..b6cef7a3b 100644
--- a/drivers/scsi/aic7xxx_old.c
+++ b/drivers/scsi/aic7xxx_old.c
@@ -2835,20 +2835,9 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
char *buffer;
if(cmd->use_sg)
- {
- struct scatterlist *sg;
-
- sg = (struct scatterlist *)cmd->request_buffer;
-
- /* XXX Assumes not highmem page. XXX */
- buffer = (char *) (page_address(sg[0].page) +
- sg[0].offset);
- }
- else
- {
- buffer = (char *)cmd->request_buffer;
- }
+ BUG();
+ buffer = (char *)cmd->request_buffer;
if ( (buffer[7] & WIDE_INQUIRY_BITS) &&
(p->features & AHC_WIDE) )
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 1b8acd2fa..29826358a 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -1138,11 +1138,12 @@ static void ourdone(Scsi_Cmnd *Cmnd)
int ok = host_byte(Cmnd->result) == DID_OK;
if (Cmnd->cmnd[0] == 0x12 && ok) {
unsigned char *iqd;
- if (Cmnd->use_sg == 0) {
- iqd = ((unsigned char *)Cmnd->buffer);
- } else {
- iqd = ((struct scatterlist *) Cmnd->request_buffer)->address;
- }
+
+ if (Cmnd->use_sg != 0)
+ BUG();
+
+ iqd = ((unsigned char *)Cmnd->buffer);
+
/* tags handled in midlayer */
/* enable sync mode? */
if (iqd[7] & 0x10) {
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 2c2a9fa43..ef1207d0a 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1064,8 +1064,7 @@ static void sg_rb_correct4mmap(Sg_scatter_hold * rsv_schp, int startFinish)
for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sclp) {
for (m = PAGE_SIZE; m < sclp->length; m += PAGE_SIZE) {
- page_ptr = (unsigned char *)sclp->address + m;
- page = virt_to_page(page_ptr);
+ page = sclp->page;
if (startFinish)
get_page(page); /* increment page count */
else {
@@ -1117,9 +1116,7 @@ static struct page * sg_vma_nopage(struct vm_area_struct *vma,
len = vma->vm_end - sa;
len = (len < sclp->length) ? len : sclp->length;
if (offset < len) {
- page_ptr = (unsigned char *)sclp->address + offset;
- page = virt_to_page(page_ptr);
- get_page(page); /* increment page count */
+ get_page(sclp->page); /* increment page count */
break;
}
sa += len;
@@ -1162,7 +1159,7 @@ static int sg_mmap(struct file * filp, struct vm_area_struct *vma)
for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end);
++k, ++sclp) {
- if ((unsigned long)sclp->address & (PAGE_SIZE - 1))
+ if ((unsigned long)sclp->offset & (PAGE_SIZE - 1))
return -EFAULT; /* non page aligned memory ?? */
len = vma->vm_end - sa;
len = (len < sclp->length) ? len : sclp->length;
@@ -1709,16 +1706,14 @@ static int sg_build_dir(Sg_request * srp, Sg_fd * sfp, int dxfer_len)
offset = (0 == k) ? kp->offset : 0;
num = (rem_sz > (PAGE_SIZE - offset)) ? (PAGE_SIZE - offset) :
rem_sz;
- sclp->address = page_address(kp->maplist[k]) + offset;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
- sclp->page = NULL;
-#endif
+ sclp->page = kp->maplist[k];
+ sclp->offset = offset;
sclp->length = num;
mem_src_arr[k] = SG_USER_MEM;
rem_sz -= num;
SCSI_LOG_TIMEOUT(5,
- printk("sg_build_dir: k=%d, a=0x%p, len=%d, ms=%d\n",
- k, sclp->address, num, mem_src_arr[k]));
+ printk("sg_build_dir: k=%d, a=0x%p, off=%d, len=%d, ms=%d\n",
+ k, page_address(sclp->page), sclp->offset, num, mem_src_arr[k]));
}
schp->k_use_sg = k;
SCSI_LOG_TIMEOUT(5,
@@ -1798,16 +1793,14 @@ static int sg_build_indi(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
if (! p)
break;
}
- sclp->address = p;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
- sclp->page = NULL;
-#endif
+ sclp->page = virt_to_page(p);
+ sclp->offset = ((unsigned long)p & ~PAGE_MASK);
sclp->length = ret_sz;
mem_src_arr[k] = mem_src;
SCSI_LOG_TIMEOUT(5,
printk("sg_build_build: k=%d, a=0x%p, len=%d, ms=%d\n",
- k, sclp->address, ret_sz, mem_src));
+ k, page_address(sclp->page), ret_sz, mem_src));
} /* end of for loop */
schp->k_use_sg = k;
SCSI_LOG_TIMEOUT(5,
@@ -1872,14 +1865,15 @@ static int sg_write_xfer(Sg_request * srp)
struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
char * mem_src_arr = sg_get_sgat_msa(schp);
ksglen = (int)sclp->length;
- p = sclp->address;
+ p = page_address(sclp->page) + sclp->offset;
for (j = 0, k = 0; j < onum; ++j) {
res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up);
if (res) return res;
for (; (k < schp->k_use_sg) && p;
- ++k, ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
+ ++k, ++sclp, ksglen = (int)sclp->length,
+ p = page_address(sclp->page) + sclp->offset) {
ok = (SG_USER_MEM != mem_src_arr[k]);
if (usglen <= 0)
break;
@@ -1953,16 +1947,13 @@ static void sg_remove_scat(Sg_scatter_hold * schp)
struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
char * mem_src_arr = sg_get_sgat_msa(schp);
- for (k = 0; (k < schp->k_use_sg) && sclp->address; ++k, ++sclp) {
+ for (k = 0; (k < schp->k_use_sg) && sclp->page; ++k, ++sclp) {
mem_src = mem_src_arr[k];
SCSI_LOG_TIMEOUT(5,
printk("sg_remove_scat: k=%d, a=0x%p, len=%d, ms=%d\n",
- k, sclp->address, sclp->length, mem_src));
- sg_free(sclp->address, sclp->length, mem_src);
- sclp->address = NULL;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
- sclp->page = NULL;
-#endif
+ k, page_address(sclp->page), sclp->length, mem_src));
+ sg_free(page_address(sclp->page) + sclp->offset, sclp->length, mem_src);
+ sclp->page = NULL;
sclp->length = 0;
}
sg_free(schp->buffer, schp->sglist_len, schp->buffer_mem_src);
@@ -2025,14 +2016,15 @@ static int sg_read_xfer(Sg_request * srp)
struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
char * mem_src_arr = sg_get_sgat_msa(schp);
ksglen = (int)sclp->length;
- p = sclp->address;
+ p = page_address(sclp->page) + sclp->offset;
for (j = 0, k = 0; j < onum; ++j) {
res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up);
if (res) return res;
for (; (k < schp->k_use_sg) && p;
- ++k, ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
+ ++k, ++sclp, ksglen = (int)sclp->length,
+ p = page_address(sclp->page) + sclp->offset) {
ok = (SG_USER_MEM != mem_src_arr[k]);
if (usglen <= 0)
break;
@@ -2073,14 +2065,14 @@ static void sg_read_oxfer(Sg_request * srp, char * outp, int num_read_xfer)
int k, num;
struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
- for (k = 0; (k < schp->k_use_sg) && sclp->address; ++k, ++sclp) {
+ for (k = 0; (k < schp->k_use_sg) && sclp->page; ++k, ++sclp) {
num = (int)sclp->length;
if (num > num_read_xfer) {
- __copy_to_user(outp, sclp->address, num_read_xfer);
+ __copy_to_user(outp, page_address(sclp->page) + sclp->offset, num_read_xfer);
break;
}
else {
- __copy_to_user(outp, sclp->address, num);
+ __copy_to_user(outp, page_address(sclp->page) + sclp->offset, num);
num_read_xfer -= num;
if (num_read_xfer <= 0)
break;
@@ -2126,7 +2118,7 @@ static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
if (rem <= num) {
if (0 == k) {
req_schp->k_use_sg = 0;
- req_schp->buffer = sclp->address;
+ req_schp->buffer = page_address(sclp->page) + sclp->offset;
}
else {
sfp->save_scat_len = num;
diff --git a/drivers/usb/hpusbscsi.c b/drivers/usb/hpusbscsi.c
index a26312419..97fe6cdb9 100644
--- a/drivers/usb/hpusbscsi.c
+++ b/drivers/usb/hpusbscsi.c
@@ -445,7 +445,8 @@ static void scatter_gather_callback(struct urb *u)
u,
hpusbscsi->dev,
hpusbscsi->current_data_pipe,
- sg[hpusbscsi->fragment].address,
+ page_address(sg[hpusbscsi->fragment].page) +
+ sg[hpusbscsi->fragment].offset,
sg[hpusbscsi->fragment++].length,
callback,
hpusbscsi
diff --git a/drivers/usb/microtek.c b/drivers/usb/microtek.c
index 2e5d06a92..00d086603 100644
--- a/drivers/usb/microtek.c
+++ b/drivers/usb/microtek.c
@@ -613,10 +613,11 @@ static void mts_do_sg (struct urb* transfer)
sg = context->srb->buffer;
context->fragment++;
mts_int_submit_urb(transfer,
- context->data_pipe,
- sg[context->fragment].address,
- sg[context->fragment].length,
- context->fragment + 1 == context->srb->use_sg ? mts_data_done : mts_do_sg);
+ context->data_pipe,
+ page_address(sg[context->fragment].page) +
+ sg[context->fragment].offset,
+ sg[context->fragment].length,
+ context->fragment + 1 == context->srb->use_sg ? mts_data_done : mts_do_sg);
return;
}
@@ -658,7 +659,7 @@ mts_build_transfer_context( Scsi_Cmnd *srb, struct mts_desc* desc )
} else {
MTS_DEBUG("Using scatter/gather\n");
sg = srb->buffer;
- desc->context.data = sg[0].address;
+ desc->context.data = page_address(sg[0].page) + sg[0].offset;
desc->context.data_length = sg[0].length;
}
diff --git a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c
index 28de67b24..0a747f933 100644
--- a/drivers/usb/storage/freecom.c
+++ b/drivers/usb/storage/freecom.c
@@ -144,11 +144,11 @@ static void us_transfer_freecom(Scsi_Cmnd *srb, struct us_data* us, int transfer
if (transfer_amount - total_transferred >=
sg[i].length) {
result = usb_stor_transfer_partial(us,
- sg[i].address, sg[i].length);
+ page_address(sg[i].page) + sg[i].offset, sg[i].length);
total_transferred += sg[i].length;
} else {
result = usb_stor_transfer_partial(us,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
transfer_amount - total_transferred);
total_transferred += transfer_amount - total_transferred;
}
diff --git a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c
index baab4d50d..d7840dc8f 100644
--- a/drivers/usb/storage/isd200.c
+++ b/drivers/usb/storage/isd200.c
@@ -518,13 +518,13 @@ static void isd200_transfer( struct us_data *us, Scsi_Cmnd *srb )
sg[i].length) {
result = isd200_transfer_partial(us,
srb->sc_data_direction,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
sg[i].length);
total_transferred += sg[i].length;
} else
result = isd200_transfer_partial(us,
srb->sc_data_direction,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
transfer_amount - total_transferred);
/* if we get an error, end the loop here */
@@ -1415,10 +1415,10 @@ void isd200_data_copy(Scsi_Cmnd *srb, char * src, int length)
/* transfer the lesser of the next buffer or the
* remaining data */
if (len - total >= sg[i].length) {
- memcpy(sg[i].address, src + total, sg[i].length);
+ memcpy(page_address(sg[i].page) + sg[i].offset, src + total, sg[i].length);
total += sg[i].length;
} else {
- memcpy(sg[i].address, src + total, len - total);
+ memcpy(page_address(sg[i].page) + sg[i].offset, src + total, len - total);
total = len;
}
}
diff --git a/drivers/usb/storage/protocol.c b/drivers/usb/storage/protocol.c
index 7b8172850..486af88dd 100644
--- a/drivers/usb/storage/protocol.c
+++ b/drivers/usb/storage/protocol.c
@@ -67,13 +67,10 @@ void fix_inquiry_data(Scsi_Cmnd *srb)
US_DEBUGP("Fixing INQUIRY data to show SCSI rev 2\n");
/* find the location of the data */
- if (srb->use_sg) {
- struct scatterlist *sg;
+ if (srb->use_sg)
+ BUG();
- sg = (struct scatterlist *) srb->request_buffer;
- data_ptr = (unsigned char *) sg[0].address;
- } else
- data_ptr = (unsigned char *)srb->request_buffer;
+ data_ptr = (unsigned char *) srb->request_buffer;
/* Change the SCSI revision number */
data_ptr[2] |= 0x2;
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 44e6cf0a9..8611a366d 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -564,7 +564,12 @@ int usb_stor_scsiSense10to6( Scsi_Cmnd* the10 )
}
/* copy one byte */
- sg[db].address[di] = sg[sb].address[si];
+ {
+ char *src = page_address(sg[sb].page) + sg[sb].offset + si;
+ char *dst = page_address(sg[db].page) + sg[db].offset + di;
+
+ *dst = *src;
+ }
/* get next destination */
if ( sg[db].length-1 == di )
@@ -602,7 +607,7 @@ int usb_stor_scsiSense10to6( Scsi_Cmnd* the10 )
break;
}
- sg[db].address[di] = 0;
+ *(char *)(page_address(sg[db].page) + sg[db].offset) = 0;
/* get next destination */
if ( sg[db].length-1 == di )
@@ -752,7 +757,12 @@ int usb_stor_scsiSense6to10( Scsi_Cmnd* the6 )
}
/* copy one byte */
- sg[db].address[di] = sg[sb].address[si];
+ {
+ char *src = page_address(sg[sb].page) + sg[sb].offset + si;
+ char *dst = page_address(sg[db].page) + sg[db].offset + di;
+
+ *dst = *src;
+ }
/* get next destination */
if ( di == 0 )
@@ -789,7 +799,11 @@ int usb_stor_scsiSense6to10( Scsi_Cmnd* the6 )
break;
}
- sg[db].address[di] = tempBuffer[element-USB_STOR_SCSI_SENSE_HDRSZ];
+ {
+ char *dst = page_address(sg[db].page) + sg[db].offset + di;
+
+ *dst = tempBuffer[element-USB_STOR_SCSI_SENSE_HDRSZ];
+ }
/* get next destination */
if ( di == 0 )
@@ -839,13 +853,19 @@ void usb_stor_scsiSenseParseBuffer( Scsi_Cmnd* srb, Usb_Stor_Scsi_Sense_Hdr_u* t
if ( element < USB_STOR_SCSI_SENSE_HDRSZ )
{
/* fill in the pointers for both header types */
- the6->array[element] = &(sg[i].address[j]);
- the10->array[element] = &(sg[i].address[j]);
+ the6->array[element] =
+ page_address(sg[i].page) +
+ sg[i].offset + j;
+ the10->array[element] =
+ page_address(sg[i].page) +
+ sg[i].offset + j;
}
else if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ )
{
/* only the longer headers still cares now */
- the10->array[element] = &(sg[i].address[j]);
+ the10->array[element] =
+ page_address(sg[i].page) +
+ sg[i].offset + j;
}
/* increase element counter */
element++;
diff --git a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c
index 7235400dd..de35f0d33 100644
--- a/drivers/usb/storage/sddr09.c
+++ b/drivers/usb/storage/sddr09.c
@@ -239,7 +239,7 @@ static int sddr09_bulk_transport(struct us_data *us,
sg = (struct scatterlist *)data;
for (i=0; i<use_sg && transferred<len; i++) {
result = sddr09_raw_bulk(us, direction,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
len-transferred > sg[i].length ?
sg[i].length : len-transferred);
if (result!=US_BULK_TRANSFER_GOOD)
@@ -384,7 +384,7 @@ int sddr09_read_data(struct us_data *us,
if (use_sg) {
transferred = 0;
for (i=0; i<use_sg && transferred<len; i++) {
- memcpy(sg[i].address, buffer+transferred,
+ memcpy(page_address(sg[i].page) + sg[i].offset, buffer+transferred,
len-transferred > sg[i].length ?
sg[i].length : len-transferred);
transferred += sg[i].length;
@@ -636,21 +636,24 @@ int sddr09_read_map(struct us_data *us) {
for (i=0; i<alloc_blocks; i++) {
if (i<alloc_blocks-1) {
- sg[i].address = kmalloc( (1<<17), GFP_KERNEL );
- sg[i].page = NULL;
+ char *vaddr = kmalloc(1 << 17, GFP_KERNEL);
+ sg[i].page = virt_to_page(vaddr);
+ sg[i].offset = ((unsigned long)vaddr & ~PAGE_MASK);
sg[i].length = (1<<17);
} else {
- sg[i].address = kmalloc(alloc_len, GFP_KERNEL);
- sg[i].page = NULL;
+ char *vaddr = kmalloc(alloc_len, GFP_KERNEL);
+ sg[i].page = virt_to_page(vaddr);
+ sg[i].offset = ((unsigned long)vaddr & ~PAGE_MASK);
sg[i].length = alloc_len;
}
alloc_len -= sg[i].length;
}
+
for (i=0; i<alloc_blocks; i++)
- if (sg[i].address == NULL) {
+ if (sg[i].page == NULL) {
for (i=0; i<alloc_blocks; i++)
- if (sg[i].address != NULL)
- kfree(sg[i].address);
+ if (sg[i].page != NULL)
+ kfree(page_address(sg[i].page) + sg[i].offset);
kfree(sg);
return 0;
}
@@ -661,7 +664,7 @@ int sddr09_read_map(struct us_data *us) {
(unsigned char *)sg, alloc_blocks)) !=
USB_STOR_TRANSPORT_GOOD) {
for (i=0; i<alloc_blocks; i++)
- kfree(sg[i].address);
+ kfree(page_address(sg[i].page) + sg[i].offset);
kfree(sg);
return -1;
}
@@ -683,7 +686,7 @@ int sddr09_read_map(struct us_data *us) {
info->lba_to_pba = NULL;
info->pba_to_lba = NULL;
for (i=0; i<alloc_blocks; i++)
- kfree(sg[i].address);
+ kfree(page_address(sg[i].page) + sg[i].offset);
kfree(sg);
return 0;
}
@@ -695,7 +698,7 @@ int sddr09_read_map(struct us_data *us) {
// scatterlist block i*64/128k = i*(2^6)*(2^-17) = i*(2^-11)
for (i=0; i<numblocks; i++) {
- ptr = sg[i>>11].address+((i&0x7ff)<<6);
+ ptr = page_address(sg[i>>11].page)+sg[i>>11].offset+((i&0x7ff)<<6);
if (ptr[0]!=0xFF || ptr[1]!=0xFF || ptr[2]!=0xFF ||
ptr[3]!=0xFF || ptr[4]!=0xFF || ptr[5]!=0xFF) {
US_DEBUGP("PBA %04X has no logical mapping: reserved area = "
@@ -748,7 +751,7 @@ int sddr09_read_map(struct us_data *us) {
}
for (i=0; i<alloc_blocks; i++)
- kfree(sg[i].address);
+ kfree(page_address(sg[i].page)+sg[i].offset);
kfree(sg);
return 0;
}
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
index 1b8926727..0592f929c 100644
--- a/drivers/usb/storage/shuttle_usbat.c
+++ b/drivers/usb/storage/shuttle_usbat.c
@@ -214,7 +214,7 @@ static int usbat_bulk_transport(struct us_data *us,
sg = (struct scatterlist *)data;
for (i=0; i<use_sg && transferred<len; i++) {
result = usbat_raw_bulk(us, direction,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
len-transferred > sg[i].length ?
sg[i].length : len-transferred);
if (result!=US_BULK_TRANSFER_GOOD)
@@ -733,17 +733,19 @@ int usbat_handle_read10(struct us_data *us,
while (amount<len) {
if (len - amount >=
sg[sg_segment].length-sg_offset) {
- memcpy(sg[sg_segment].address + sg_offset,
- buffer + amount,
- sg[sg_segment].length - sg_offset);
+ memcpy(page_address(sg[sg_segment].page) +
+ sg[sg_segment].offset + sg_offset,
+ buffer + amount,
+ sg[sg_segment].length - sg_offset);
amount +=
sg[sg_segment].length-sg_offset;
sg_segment++;
sg_offset=0;
} else {
- memcpy(sg[sg_segment].address + sg_offset,
- buffer + amount,
- len - amount);
+ memcpy(page_address(sg[sg_segment].page) +
+ sg[sg_segment].offset + sg_offset,
+ buffer + amount,
+ len - amount);
sg_offset += (len - amount);
amount = len;
}
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index 4b6dd33be..b13c83423 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -584,11 +584,11 @@ void usb_stor_transfer(Scsi_Cmnd *srb, struct us_data* us)
if (transfer_amount - total_transferred >=
sg[i].length) {
result = usb_stor_transfer_partial(us,
- sg[i].address, sg[i].length);
+ page_address(sg[i].page) + sg[i].offset, sg[i].length);
total_transferred += sg[i].length;
} else
result = usb_stor_transfer_partial(us,
- sg[i].address,
+ page_address(sg[i].page) + sg[i].offset,
transfer_amount - total_transferred);
/* if we get an error, end the loop here */
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 72447a713..e09641ee5 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -288,13 +288,13 @@ void fill_inquiry_response(struct us_data *us, unsigned char *data,
if (us->srb->use_sg) {
sg = (struct scatterlist *)us->srb->request_buffer;
for (i=0; i<us->srb->use_sg; i++)
- memset(sg[i].address, 0, sg[i].length);
+ memset(page_address(sg[i].page) + sg[i].offset, 0, sg[i].length);
for (i=0, transferred=0;
i<us->srb->use_sg && transferred < len;
i++) {
amt = sg[i].length > len-transferred ?
len-transferred : sg[i].length;
- memcpy(sg[i].address, data+transferred, amt);
+ memcpy(page_address(sg[i].page) + sg[i].offset, data+transferred, amt);
transferred -= amt;
}
} else {