diff options
author | davem <davem> | 2001-12-17 07:49:21 +0000 |
---|---|---|
committer | davem <davem> | 2001-12-17 07:49:21 +0000 |
commit | c7ed952798088e7e6f8dfc6a8f741560332961c0 (patch) | |
tree | 8a5a19eac08f9c535fcdc55cd5c8b6d554684468 | |
parent | 2af6979fc28a26c497fa06087c7957041080fbc8 (diff) | |
download | netdev-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.c | 8 | ||||
-rw-r--r-- | drivers/scsi/aic7xxx_old.c | 15 | ||||
-rw-r--r-- | drivers/scsi/qlogicpti.c | 11 | ||||
-rw-r--r-- | drivers/scsi/sg.c | 56 | ||||
-rw-r--r-- | drivers/usb/hpusbscsi.c | 3 | ||||
-rw-r--r-- | drivers/usb/microtek.c | 11 | ||||
-rw-r--r-- | drivers/usb/storage/freecom.c | 4 | ||||
-rw-r--r-- | drivers/usb/storage/isd200.c | 8 | ||||
-rw-r--r-- | drivers/usb/storage/protocol.c | 9 | ||||
-rw-r--r-- | drivers/usb/storage/scsiglue.c | 34 | ||||
-rw-r--r-- | drivers/usb/storage/sddr09.c | 29 | ||||
-rw-r--r-- | drivers/usb/storage/shuttle_usbat.c | 16 | ||||
-rw-r--r-- | drivers/usb/storage/transport.c | 4 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 4 |
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 { |