aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 3c64bf400c2..beb68786001 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -506,6 +506,17 @@ static void srp_del_scsi_host_attr(struct Scsi_Host *shost)
506 device_remove_file(&shost->shost_dev, *attr); 506 device_remove_file(&shost->shost_dev, *attr);
507} 507}
508 508
509static void srp_remove_target(struct srp_target_port *target)
510{
511 srp_del_scsi_host_attr(target->scsi_host);
512 srp_remove_host(target->scsi_host);
513 scsi_remove_host(target->scsi_host);
514 ib_destroy_cm_id(target->cm_id);
515 srp_free_target_ib(target);
516 srp_free_req_data(target);
517 scsi_host_put(target->scsi_host);
518}
519
509static void srp_remove_work(struct work_struct *work) 520static void srp_remove_work(struct work_struct *work)
510{ 521{
511 struct srp_target_port *target = 522 struct srp_target_port *target =
@@ -518,13 +529,7 @@ static void srp_remove_work(struct work_struct *work)
518 list_del(&target->list); 529 list_del(&target->list);
519 spin_unlock(&target->srp_host->target_lock); 530 spin_unlock(&target->srp_host->target_lock);
520 531
521 srp_del_scsi_host_attr(target->scsi_host); 532 srp_remove_target(target);
522 srp_remove_host(target->scsi_host);
523 scsi_remove_host(target->scsi_host);
524 ib_destroy_cm_id(target->cm_id);
525 srp_free_target_ib(target);
526 srp_free_req_data(target);
527 scsi_host_put(target->scsi_host);
528} 533}
529 534
530static int srp_connect_target(struct srp_target_port *target) 535static int srp_connect_target(struct srp_target_port *target)