diff options
Diffstat (limited to 'drivers/firewire/fw-sbp2.c')
-rw-r--r-- | drivers/firewire/fw-sbp2.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index e5a2571a3671..661a5b66f661 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c | |||
@@ -606,13 +606,17 @@ static void sbp2_release_target(struct kref *kref) | |||
606 | struct sbp2_logical_unit *lu, *next; | 606 | struct sbp2_logical_unit *lu, *next; |
607 | struct Scsi_Host *shost = | 607 | struct Scsi_Host *shost = |
608 | container_of((void *)tgt, struct Scsi_Host, hostdata[0]); | 608 | container_of((void *)tgt, struct Scsi_Host, hostdata[0]); |
609 | struct fw_device *device = fw_device(tgt->unit->device.parent); | ||
609 | 610 | ||
610 | list_for_each_entry_safe(lu, next, &tgt->lu_list, link) { | 611 | list_for_each_entry_safe(lu, next, &tgt->lu_list, link) { |
611 | if (lu->sdev) | 612 | if (lu->sdev) |
612 | scsi_remove_device(lu->sdev); | 613 | scsi_remove_device(lu->sdev); |
613 | 614 | ||
614 | sbp2_send_management_orb(lu, tgt->node_id, lu->generation, | 615 | if (!fw_device_is_shutdown(device)) |
615 | SBP2_LOGOUT_REQUEST, lu->login_id, NULL); | 616 | sbp2_send_management_orb(lu, tgt->node_id, |
617 | lu->generation, SBP2_LOGOUT_REQUEST, | ||
618 | lu->login_id, NULL); | ||
619 | |||
616 | fw_core_remove_address_handler(&lu->address_handler); | 620 | fw_core_remove_address_handler(&lu->address_handler); |
617 | list_del(&lu->link); | 621 | list_del(&lu->link); |
618 | kfree(lu); | 622 | kfree(lu); |