diff options
Diffstat (limited to 'drivers/scsi/libsas')
-rw-r--r-- | drivers/scsi/libsas/sas_discover.c | 28 | ||||
-rw-r--r-- | drivers/scsi/libsas/sas_scsi_host.c | 6 |
2 files changed, 13 insertions, 21 deletions
diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c index 5252143b6297..a18c0f6d6668 100644 --- a/drivers/scsi/libsas/sas_discover.c +++ b/drivers/scsi/libsas/sas_discover.c | |||
@@ -371,6 +371,7 @@ static int sas_issue_ata_cmd(struct domain_device *dev, u8 command, | |||
371 | 371 | ||
372 | task->dev = dev; | 372 | task->dev = dev; |
373 | 373 | ||
374 | task->ata_task.fis.fis_type = 0x27; | ||
374 | task->ata_task.fis.command = command; | 375 | task->ata_task.fis.command = command; |
375 | task->ata_task.fis.features = features; | 376 | task->ata_task.fis.features = features; |
376 | task->ata_task.fis.device = d2h_fis->device; | 377 | task->ata_task.fis.device = d2h_fis->device; |
@@ -483,11 +484,7 @@ cont1: | |||
483 | 484 | ||
484 | sas_fill_in_rphy(dev, dev->rphy); | 485 | sas_fill_in_rphy(dev, dev->rphy); |
485 | 486 | ||
486 | res = sas_rphy_add(dev->rphy); | 487 | return 0; |
487 | if (res) | ||
488 | goto out_err; | ||
489 | |||
490 | return res; | ||
491 | out_err: | 488 | out_err: |
492 | dev->sata_dev.identify_packet_device = NULL; | 489 | dev->sata_dev.identify_packet_device = NULL; |
493 | dev->sata_dev.identify_device = NULL; | 490 | dev->sata_dev.identify_device = NULL; |
@@ -555,7 +552,7 @@ int sas_discover_sata(struct domain_device *dev) | |||
555 | 552 | ||
556 | res = sas_notify_lldd_dev_found(dev); | 553 | res = sas_notify_lldd_dev_found(dev); |
557 | if (res) | 554 | if (res) |
558 | goto out_err2; | 555 | return res; |
559 | 556 | ||
560 | switch (dev->dev_type) { | 557 | switch (dev->dev_type) { |
561 | case SATA_DEV: | 558 | case SATA_DEV: |
@@ -567,23 +564,12 @@ int sas_discover_sata(struct domain_device *dev) | |||
567 | default: | 564 | default: |
568 | break; | 565 | break; |
569 | } | 566 | } |
570 | if (res) | ||
571 | goto out_err; | ||
572 | |||
573 | sas_notify_lldd_dev_gone(dev); | 567 | sas_notify_lldd_dev_gone(dev); |
574 | res = sas_notify_lldd_dev_found(dev); | 568 | if (!res) { |
575 | if (res) | 569 | sas_notify_lldd_dev_found(dev); |
576 | goto out_err2; | 570 | res = sas_rphy_add(dev->rphy); |
577 | 571 | } | |
578 | res = sas_rphy_add(dev->rphy); | ||
579 | if (res) | ||
580 | goto out_err; | ||
581 | |||
582 | return res; | ||
583 | 572 | ||
584 | out_err: | ||
585 | sas_notify_lldd_dev_gone(dev); | ||
586 | out_err2: | ||
587 | return res; | 573 | return res; |
588 | } | 574 | } |
589 | 575 | ||
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c index 5ff14ed9baf6..0dc7c02b3837 100644 --- a/drivers/scsi/libsas/sas_scsi_host.c +++ b/drivers/scsi/libsas/sas_scsi_host.c | |||
@@ -812,6 +812,12 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc) | |||
812 | task->task_proto = SAS_PROTOCOL_STP; | 812 | task->task_proto = SAS_PROTOCOL_STP; |
813 | task->task_done = sas_ata_task_done; | 813 | task->task_done = sas_ata_task_done; |
814 | 814 | ||
815 | if (qc->tf.command == ATA_CMD_FPDMA_WRITE || | ||
816 | qc->tf.command == ATA_CMD_FPDMA_READ) { | ||
817 | /* Need to zero out the tag libata assigned us */ | ||
818 | qc->tf.nsect = 0; | ||
819 | } | ||
820 | |||
815 | ata_tf_to_fis(&qc->tf, (u8*)&task->ata_task.fis, 0); | 821 | ata_tf_to_fis(&qc->tf, (u8*)&task->ata_task.fis, 0); |
816 | task->uldd_task = qc; | 822 | task->uldd_task = qc; |
817 | if (is_atapi_taskfile(&qc->tf)) { | 823 | if (is_atapi_taskfile(&qc->tf)) { |