aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/scsi_debug.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 1c475e9a46ab..2b6d447ad6d6 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -2743,6 +2743,13 @@ static int stop_queued_cmnd(struct scsi_cmnd *cmnd)
2743 if (test_bit(k, queued_in_use_bm)) { 2743 if (test_bit(k, queued_in_use_bm)) {
2744 sqcp = &queued_arr[k]; 2744 sqcp = &queued_arr[k];
2745 if (cmnd == sqcp->a_cmnd) { 2745 if (cmnd == sqcp->a_cmnd) {
2746 devip = (struct sdebug_dev_info *)
2747 cmnd->device->hostdata;
2748 if (devip)
2749 atomic_dec(&devip->num_in_q);
2750 sqcp->a_cmnd = NULL;
2751 spin_unlock_irqrestore(&queued_arr_lock,
2752 iflags);
2746 if (scsi_debug_ndelay > 0) { 2753 if (scsi_debug_ndelay > 0) {
2747 if (sqcp->sd_hrtp) 2754 if (sqcp->sd_hrtp)
2748 hrtimer_cancel( 2755 hrtimer_cancel(
@@ -2755,18 +2762,13 @@ static int stop_queued_cmnd(struct scsi_cmnd *cmnd)
2755 if (sqcp->tletp) 2762 if (sqcp->tletp)
2756 tasklet_kill(sqcp->tletp); 2763 tasklet_kill(sqcp->tletp);
2757 } 2764 }
2758 __clear_bit(k, queued_in_use_bm); 2765 clear_bit(k, queued_in_use_bm);
2759 devip = (struct sdebug_dev_info *) 2766 return 1;
2760 cmnd->device->hostdata;
2761 if (devip)
2762 atomic_dec(&devip->num_in_q);
2763 sqcp->a_cmnd = NULL;
2764 break;
2765 } 2767 }
2766 } 2768 }
2767 } 2769 }
2768 spin_unlock_irqrestore(&queued_arr_lock, iflags); 2770 spin_unlock_irqrestore(&queued_arr_lock, iflags);
2769 return (k < qmax) ? 1 : 0; 2771 return 0;
2770} 2772}
2771 2773
2772/* Deletes (stops) timers or tasklets of all queued commands */ 2774/* Deletes (stops) timers or tasklets of all queued commands */
@@ -2782,6 +2784,13 @@ static void stop_all_queued(void)
2782 if (test_bit(k, queued_in_use_bm)) { 2784 if (test_bit(k, queued_in_use_bm)) {
2783 sqcp = &queued_arr[k]; 2785 sqcp = &queued_arr[k];
2784 if (sqcp->a_cmnd) { 2786 if (sqcp->a_cmnd) {
2787 devip = (struct sdebug_dev_info *)
2788 sqcp->a_cmnd->device->hostdata;
2789 if (devip)
2790 atomic_dec(&devip->num_in_q);
2791 sqcp->a_cmnd = NULL;
2792 spin_unlock_irqrestore(&queued_arr_lock,
2793 iflags);
2785 if (scsi_debug_ndelay > 0) { 2794 if (scsi_debug_ndelay > 0) {
2786 if (sqcp->sd_hrtp) 2795 if (sqcp->sd_hrtp)
2787 hrtimer_cancel( 2796 hrtimer_cancel(
@@ -2794,12 +2803,8 @@ static void stop_all_queued(void)
2794 if (sqcp->tletp) 2803 if (sqcp->tletp)
2795 tasklet_kill(sqcp->tletp); 2804 tasklet_kill(sqcp->tletp);
2796 } 2805 }
2797 __clear_bit(k, queued_in_use_bm); 2806 clear_bit(k, queued_in_use_bm);
2798 devip = (struct sdebug_dev_info *) 2807 spin_lock_irqsave(&queued_arr_lock, iflags);
2799 sqcp->a_cmnd->device->hostdata;
2800 if (devip)
2801 atomic_dec(&devip->num_in_q);
2802 sqcp->a_cmnd = NULL;
2803 } 2808 }
2804 } 2809 }
2805 } 2810 }