mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
IB/srp: Don't schedule reconnect from srp
If there is a problem in the connection, the SCSI mid-layer will eventually call srp_reset_host(), which will call srp_reconnect(), so we do not need to schedule a call to srp_reconnect_work() from srp_completion(). Removing this prevents srp_reset_host() from failing if a reconnect scheduled from srp_completion() is already in progress, which in turn was causing crashes as both SCSI midlayer and srp_reconnect() were cancelling commands. Signed-off-by: Ishai Rabinovitz <ishai@mellanox.co.il> Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
63b98080da
commit
add7afc756
@ -799,13 +799,6 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
|
||||
spin_unlock_irqrestore(target->scsi_host->host_lock, flags);
|
||||
}
|
||||
|
||||
static void srp_reconnect_work(void *target_ptr)
|
||||
{
|
||||
struct srp_target_port *target = target_ptr;
|
||||
|
||||
srp_reconnect_target(target);
|
||||
}
|
||||
|
||||
static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc)
|
||||
{
|
||||
struct srp_iu *iu;
|
||||
@ -858,7 +851,6 @@ static void srp_completion(struct ib_cq *cq, void *target_ptr)
|
||||
{
|
||||
struct srp_target_port *target = target_ptr;
|
||||
struct ib_wc wc;
|
||||
unsigned long flags;
|
||||
|
||||
ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
|
||||
while (ib_poll_cq(cq, 1, &wc) > 0) {
|
||||
@ -866,10 +858,6 @@ static void srp_completion(struct ib_cq *cq, void *target_ptr)
|
||||
printk(KERN_ERR PFX "failed %s status %d\n",
|
||||
wc.wr_id & SRP_OP_RECV ? "receive" : "send",
|
||||
wc.status);
|
||||
spin_lock_irqsave(target->scsi_host->host_lock, flags);
|
||||
if (target->state == SRP_TARGET_LIVE)
|
||||
schedule_work(&target->work);
|
||||
spin_unlock_irqrestore(target->scsi_host->host_lock, flags);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1705,8 +1693,6 @@ static ssize_t srp_create_target(struct class_device *class_dev,
|
||||
target->scsi_host = target_host;
|
||||
target->srp_host = host;
|
||||
|
||||
INIT_WORK(&target->work, srp_reconnect_work, target);
|
||||
|
||||
INIT_LIST_HEAD(&target->free_reqs);
|
||||
INIT_LIST_HEAD(&target->req_queue);
|
||||
for (i = 0; i < SRP_SQ_SIZE; ++i) {
|
||||
|
Loading…
Reference in New Issue
Block a user