diff options
Diffstat (limited to 'drivers/scsi/scsi_debug.c')
-rw-r--r-- | drivers/scsi/scsi_debug.c | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 46cae5a212de..82c06f0a9d02 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c | |||
@@ -329,7 +329,7 @@ int scsi_debug_queuecommand(struct scsi_cmnd * SCpnt, done_funct_t done) | |||
329 | if (done == NULL) | 329 | if (done == NULL) |
330 | return 0; /* assume mid level reprocessing command */ | 330 | return 0; /* assume mid level reprocessing command */ |
331 | 331 | ||
332 | SCpnt->resid = 0; | 332 | scsi_set_resid(SCpnt, 0); |
333 | if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmd) { | 333 | if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmd) { |
334 | printk(KERN_INFO "scsi_debug: cmd "); | 334 | printk(KERN_INFO "scsi_debug: cmd "); |
335 | for (k = 0, len = SCpnt->cmd_len; k < len; ++k) | 335 | for (k = 0, len = SCpnt->cmd_len; k < len; ++k) |
@@ -603,26 +603,16 @@ static int fill_from_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr, | |||
603 | void * kaddr_off; | 603 | void * kaddr_off; |
604 | struct scatterlist * sg; | 604 | struct scatterlist * sg; |
605 | 605 | ||
606 | if (0 == scp->request_bufflen) | 606 | if (0 == scsi_bufflen(scp)) |
607 | return 0; | 607 | return 0; |
608 | if (NULL == scp->request_buffer) | 608 | if (NULL == scsi_sglist(scp)) |
609 | return (DID_ERROR << 16); | 609 | return (DID_ERROR << 16); |
610 | if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) || | 610 | if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) || |
611 | (scp->sc_data_direction == DMA_FROM_DEVICE))) | 611 | (scp->sc_data_direction == DMA_FROM_DEVICE))) |
612 | return (DID_ERROR << 16); | 612 | return (DID_ERROR << 16); |
613 | if (0 == scp->use_sg) { | ||
614 | req_len = scp->request_bufflen; | ||
615 | act_len = (req_len < arr_len) ? req_len : arr_len; | ||
616 | memcpy(scp->request_buffer, arr, act_len); | ||
617 | if (scp->resid) | ||
618 | scp->resid -= act_len; | ||
619 | else | ||
620 | scp->resid = req_len - act_len; | ||
621 | return 0; | ||
622 | } | ||
623 | active = 1; | 613 | active = 1; |
624 | req_len = act_len = 0; | 614 | req_len = act_len = 0; |
625 | scsi_for_each_sg(scp, sg, scp->use_sg, k) { | 615 | scsi_for_each_sg(scp, sg, scsi_sg_count(scp), k) { |
626 | if (active) { | 616 | if (active) { |
627 | kaddr = (unsigned char *) | 617 | kaddr = (unsigned char *) |
628 | kmap_atomic(sg_page(sg), KM_USER0); | 618 | kmap_atomic(sg_page(sg), KM_USER0); |
@@ -640,10 +630,10 @@ static int fill_from_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr, | |||
640 | } | 630 | } |
641 | req_len += sg->length; | 631 | req_len += sg->length; |
642 | } | 632 | } |
643 | if (scp->resid) | 633 | if (scsi_get_resid(scp)) |
644 | scp->resid -= act_len; | 634 | scsi_set_resid(scp, scsi_get_resid(scp) - act_len); |
645 | else | 635 | else |
646 | scp->resid = req_len - act_len; | 636 | scsi_set_resid(scp, req_len - act_len); |
647 | return 0; | 637 | return 0; |
648 | } | 638 | } |
649 | 639 | ||
@@ -656,22 +646,15 @@ static int fetch_to_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr, | |||
656 | void * kaddr_off; | 646 | void * kaddr_off; |
657 | struct scatterlist * sg; | 647 | struct scatterlist * sg; |
658 | 648 | ||
659 | if (0 == scp->request_bufflen) | 649 | if (0 == scsi_bufflen(scp)) |
660 | return 0; | 650 | return 0; |
661 | if (NULL == scp->request_buffer) | 651 | if (NULL == scsi_sglist(scp)) |
662 | return -1; | 652 | return -1; |
663 | if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) || | 653 | if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) || |
664 | (scp->sc_data_direction == DMA_TO_DEVICE))) | 654 | (scp->sc_data_direction == DMA_TO_DEVICE))) |
665 | return -1; | 655 | return -1; |
666 | if (0 == scp->use_sg) { | ||
667 | req_len = scp->request_bufflen; | ||
668 | len = (req_len < max_arr_len) ? req_len : max_arr_len; | ||
669 | memcpy(arr, scp->request_buffer, len); | ||
670 | return len; | ||
671 | } | ||
672 | sg = scsi_sglist(scp); | ||
673 | req_len = fin = 0; | 656 | req_len = fin = 0; |
674 | for (k = 0; k < scp->use_sg; ++k, sg = sg_next(sg)) { | 657 | scsi_for_each_sg(scp, sg, scsi_sg_count(scp), k) { |
675 | kaddr = (unsigned char *)kmap_atomic(sg_page(sg), KM_USER0); | 658 | kaddr = (unsigned char *)kmap_atomic(sg_page(sg), KM_USER0); |
676 | if (NULL == kaddr) | 659 | if (NULL == kaddr) |
677 | return -1; | 660 | return -1; |