diff options
| -rw-r--r-- | drivers/scsi/gdth.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index 317a2826af05..fe5db2da26b7 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c | |||
| @@ -716,10 +716,12 @@ static void gdth_delay(int milliseconds) | |||
| 716 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) | 716 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) |
| 717 | static void gdth_scsi_done(struct scsi_cmnd *scp) | 717 | static void gdth_scsi_done(struct scsi_cmnd *scp) |
| 718 | { | 718 | { |
| 719 | TRACE2(("gdth_scsi_done()\n")); | 719 | TRACE2(("gdth_scsi_done()\n")); |
| 720 | 720 | ||
| 721 | if (IS_GDTH_INTERNAL_CMD(scp)) | 721 | if (IS_GDTH_INTERNAL_CMD(scp)) |
| 722 | complete((struct completion *)scp->request); | 722 | complete((struct completion *)scp->request); |
| 723 | else | ||
| 724 | scp->scsi_done(scp); | ||
| 723 | } | 725 | } |
| 724 | 726 | ||
| 725 | int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd, | 727 | int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd, |
| @@ -742,7 +744,7 @@ int __gdth_execute(struct scsi_device *sdev, gdth_cmd_str *gdtcmd, char *cmnd, | |||
| 742 | memcpy(scp->cmnd, cmnd, 12); | 744 | memcpy(scp->cmnd, cmnd, 12); |
| 743 | scp->SCp.this_residual = IOCTL_PRI; /* priority */ | 745 | scp->SCp.this_residual = IOCTL_PRI; /* priority */ |
| 744 | scp->underflow = GDTH_MAGIC; | 746 | scp->underflow = GDTH_MAGIC; |
| 745 | gdth_queuecommand(scp, gdth_scsi_done); | 747 | gdth_queuecommand(scp, NULL); |
| 746 | wait_for_completion(&wait); | 748 | wait_for_completion(&wait); |
| 747 | 749 | ||
| 748 | rval = scp->SCp.Status; | 750 | rval = scp->SCp.Status; |
| @@ -2508,7 +2510,7 @@ static void gdth_next(int hanum) | |||
| 2508 | if (!nscp->SCp.have_data_in) | 2510 | if (!nscp->SCp.have_data_in) |
| 2509 | nscp->SCp.have_data_in++; | 2511 | nscp->SCp.have_data_in++; |
| 2510 | else | 2512 | else |
| 2511 | nscp->scsi_done(nscp); | 2513 | gdth_scsi_done(nscp); |
| 2512 | } | 2514 | } |
| 2513 | } else if (IS_GDTH_INTERNAL_CMD(nscp)) { | 2515 | } else if (IS_GDTH_INTERNAL_CMD(nscp)) { |
| 2514 | if (!(cmd_index=gdth_special_cmd(hanum,nscp))) | 2516 | if (!(cmd_index=gdth_special_cmd(hanum,nscp))) |
| @@ -2527,7 +2529,7 @@ static void gdth_next(int hanum) | |||
| 2527 | if (!nscp->SCp.have_data_in) | 2529 | if (!nscp->SCp.have_data_in) |
| 2528 | nscp->SCp.have_data_in++; | 2530 | nscp->SCp.have_data_in++; |
| 2529 | else | 2531 | else |
| 2530 | nscp->scsi_done(nscp); | 2532 | gdth_scsi_done(nscp); |
| 2531 | } else { | 2533 | } else { |
| 2532 | switch (nscp->cmnd[0]) { | 2534 | switch (nscp->cmnd[0]) { |
| 2533 | case TEST_UNIT_READY: | 2535 | case TEST_UNIT_READY: |
| @@ -2553,9 +2555,9 @@ static void gdth_next(int hanum) | |||
| 2553 | if (!nscp->SCp.have_data_in) | 2555 | if (!nscp->SCp.have_data_in) |
| 2554 | nscp->SCp.have_data_in++; | 2556 | nscp->SCp.have_data_in++; |
| 2555 | else | 2557 | else |
| 2556 | nscp->scsi_done(nscp); | 2558 | gdth_scsi_done(nscp); |
| 2557 | } else if (gdth_internal_cache_cmd(hanum,nscp)) | 2559 | } else if (gdth_internal_cache_cmd(hanum, nscp)) |
| 2558 | nscp->scsi_done(nscp); | 2560 | gdth_scsi_done(nscp); |
| 2559 | break; | 2561 | break; |
| 2560 | 2562 | ||
| 2561 | case ALLOW_MEDIUM_REMOVAL: | 2563 | case ALLOW_MEDIUM_REMOVAL: |
| @@ -2569,7 +2571,7 @@ static void gdth_next(int hanum) | |||
| 2569 | if (!nscp->SCp.have_data_in) | 2571 | if (!nscp->SCp.have_data_in) |
| 2570 | nscp->SCp.have_data_in++; | 2572 | nscp->SCp.have_data_in++; |
| 2571 | else | 2573 | else |
| 2572 | nscp->scsi_done(nscp); | 2574 | gdth_scsi_done(nscp); |
| 2573 | } else { | 2575 | } else { |
| 2574 | nscp->cmnd[3] = (ha->hdr[t].devtype&1) ? 1:0; | 2576 | nscp->cmnd[3] = (ha->hdr[t].devtype&1) ? 1:0; |
| 2575 | TRACE(("Prevent/allow r. %d rem. drive %d\n", | 2577 | TRACE(("Prevent/allow r. %d rem. drive %d\n", |
| @@ -2605,8 +2607,8 @@ static void gdth_next(int hanum) | |||
| 2605 | if (!nscp->SCp.have_data_in) | 2607 | if (!nscp->SCp.have_data_in) |
| 2606 | nscp->SCp.have_data_in++; | 2608 | nscp->SCp.have_data_in++; |
| 2607 | else | 2609 | else |
| 2608 | nscp->scsi_done(nscp); | 2610 | gdth_scsi_done(nscp); |
| 2609 | } else if (!(cmd_index=gdth_fill_cache_cmd(hanum,nscp,t))) | 2611 | } else if (!(cmd_index=gdth_fill_cache_cmd(hanum, nscp, t))) |
| 2610 | this_cmd = FALSE; | 2612 | this_cmd = FALSE; |
| 2611 | break; | 2613 | break; |
| 2612 | 2614 | ||
| @@ -2620,7 +2622,7 @@ static void gdth_next(int hanum) | |||
| 2620 | if (!nscp->SCp.have_data_in) | 2622 | if (!nscp->SCp.have_data_in) |
| 2621 | nscp->SCp.have_data_in++; | 2623 | nscp->SCp.have_data_in++; |
| 2622 | else | 2624 | else |
| 2623 | nscp->scsi_done(nscp); | 2625 | gdth_scsi_done(nscp); |
| 2624 | break; | 2626 | break; |
| 2625 | } | 2627 | } |
| 2626 | } | 2628 | } |
| @@ -3633,7 +3635,7 @@ static irqreturn_t gdth_interrupt(int irq,void *dev_id) | |||
| 3633 | if (rval == 2) { | 3635 | if (rval == 2) { |
| 3634 | gdth_putq(hanum,scp,scp->SCp.this_residual); | 3636 | gdth_putq(hanum,scp,scp->SCp.this_residual); |
| 3635 | } else if (rval == 1) { | 3637 | } else if (rval == 1) { |
| 3636 | scp->scsi_done(scp); | 3638 | gdth_scsi_done(scp); |
| 3637 | } | 3639 | } |
| 3638 | 3640 | ||
| 3639 | #ifdef INT_COAL | 3641 | #ifdef INT_COAL |
| @@ -4928,14 +4930,15 @@ static int gdth_bios_param(Disk *disk,kdev_t dev,int *ip) | |||
| 4928 | } | 4930 | } |
| 4929 | 4931 | ||
| 4930 | 4932 | ||
| 4931 | static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *)) | 4933 | static int gdth_queuecommand(struct scsi_cmnd *scp, |
| 4934 | void (*done)(struct scsi_cmnd *)) | ||
| 4932 | { | 4935 | { |
| 4933 | int hanum; | 4936 | int hanum; |
| 4934 | int priority; | 4937 | int priority; |
| 4935 | 4938 | ||
| 4936 | TRACE(("gdth_queuecommand() cmd 0x%x\n", scp->cmnd[0])); | 4939 | TRACE(("gdth_queuecommand() cmd 0x%x\n", scp->cmnd[0])); |
| 4937 | 4940 | ||
| 4938 | scp->scsi_done = (void *)done; | 4941 | scp->scsi_done = done; |
| 4939 | scp->SCp.have_data_in = 1; | 4942 | scp->SCp.have_data_in = 1; |
| 4940 | scp->SCp.phase = -1; | 4943 | scp->SCp.phase = -1; |
| 4941 | scp->SCp.sent_command = -1; | 4944 | scp->SCp.sent_command = -1; |
