]> www.infradead.org Git - users/hch/misc.git/commitdiff
Revert "IB/srp: Avoid that a cable pull can trigger a kernel crash"
authorBart Van Assche <bart.vanassche@wdc.com>
Fri, 23 Feb 2018 22:09:25 +0000 (14:09 -0800)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 28 Feb 2018 20:57:39 +0000 (13:57 -0700)
The caller of srp_ib_lookup_path() is responsible for holding a reference
on the SCSI host. That means that commit 8a0d18c62121 was not necessary.
Hence revert it.

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/ulp/srp/ib_srp.c

index 4a1a489ce8bb316c47c03ab06fbb7ef55afece26..4021d608fe85ce7ea2d1ec5c5deae0d0d16dee9f 100644 (file)
@@ -765,19 +765,12 @@ static void srp_path_rec_completion(int status,
 static int srp_ib_lookup_path(struct srp_rdma_ch *ch)
 {
        struct srp_target_port *target = ch->target;
-       int ret = -ENODEV;
+       int ret;
 
        ch->ib_cm.path.numb_path = 1;
 
        init_completion(&ch->done);
 
-       /*
-        * Avoid that the SCSI host can be removed by srp_remove_target()
-        * before srp_path_rec_completion() is called.
-        */
-       if (!scsi_host_get(target->scsi_host))
-               goto out;
-
        ch->ib_cm.path_query_id = ib_sa_path_rec_get(&srp_sa_client,
                                               target->srp_host->srp_dev->dev,
                                               target->srp_host->port,
@@ -791,27 +784,21 @@ static int srp_ib_lookup_path(struct srp_rdma_ch *ch)
                                               GFP_KERNEL,
                                               srp_path_rec_completion,
                                               ch, &ch->ib_cm.path_query);
-       ret = ch->ib_cm.path_query_id;
-       if (ret < 0)
-               goto put;
+       if (ch->ib_cm.path_query_id < 0)
+               return ch->ib_cm.path_query_id;
 
        ret = wait_for_completion_interruptible(&ch->done);
        if (ret < 0)
-               goto put;
+               return ret;
 
-       ret = ch->status;
-       if (ret < 0)
+       if (ch->status < 0)
                shost_printk(KERN_WARNING, target->scsi_host,
                             PFX "Path record query failed: sgid %pI6, dgid %pI6, pkey %#04x, service_id %#16llx\n",
                             ch->ib_cm.path.sgid.raw, ch->ib_cm.path.dgid.raw,
                             be16_to_cpu(target->ib_cm.pkey),
                             be64_to_cpu(target->ib_cm.service_id));
 
-put:
-       scsi_host_put(target->scsi_host);
-
-out:
-       return ret;
+       return ch->status;
 }
 
 static int srp_rdma_lookup_path(struct srp_rdma_ch *ch)