aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.c12
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.h1
2 files changed, 10 insertions, 3 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 2ec9c05814f6..3294f10316a0 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2614,6 +2614,8 @@ static ssize_t srp_create_target(struct device *dev,
2614 target->tl_retry_count = 7; 2614 target->tl_retry_count = 7;
2615 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; 2615 target->queue_size = SRP_DEFAULT_QUEUE_SIZE;
2616 2616
2617 mutex_lock(&host->add_target_mutex);
2618
2617 ret = srp_parse_options(buf, target); 2619 ret = srp_parse_options(buf, target);
2618 if (ret) 2620 if (ret)
2619 goto err; 2621 goto err;
@@ -2682,7 +2684,11 @@ static ssize_t srp_create_target(struct device *dev,
2682 be64_to_cpu(target->service_id), 2684 be64_to_cpu(target->service_id),
2683 target->path.sgid.raw, target->path.dgid.raw); 2685 target->path.sgid.raw, target->path.dgid.raw);
2684 2686
2685 return count; 2687 ret = count;
2688
2689out:
2690 mutex_unlock(&host->add_target_mutex);
2691 return ret;
2686 2692
2687err_disconnect: 2693err_disconnect:
2688 srp_disconnect_target(target); 2694 srp_disconnect_target(target);
@@ -2698,8 +2704,7 @@ err_free_mem:
2698 2704
2699err: 2705err:
2700 scsi_host_put(target_host); 2706 scsi_host_put(target_host);
2701 2707 goto out;
2702 return ret;
2703} 2708}
2704 2709
2705static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target); 2710static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
@@ -2735,6 +2740,7 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
2735 INIT_LIST_HEAD(&host->target_list); 2740 INIT_LIST_HEAD(&host->target_list);
2736 spin_lock_init(&host->target_lock); 2741 spin_lock_init(&host->target_lock);
2737 init_completion(&host->released); 2742 init_completion(&host->released);
2743 mutex_init(&host->add_target_mutex);
2738 host->srp_dev = device; 2744 host->srp_dev = device;
2739 host->port = port; 2745 host->port = port;
2740 2746
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index 575681063f38..aad27b7b4a46 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -105,6 +105,7 @@ struct srp_host {
105 spinlock_t target_lock; 105 spinlock_t target_lock;
106 struct completion released; 106 struct completion released;
107 struct list_head list; 107 struct list_head list;
108 struct mutex add_target_mutex;
108}; 109};
109 110
110struct srp_request { 111struct srp_request {