public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
To: Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: David Dillow <dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org>,
	Vu Pham <vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Sebastian Riemer
	<sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>,
	linux-rdma <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH v2 02/15] IB/srp: Fix race between srp_queuecommand() and srp_claim_req()
Date: Fri, 28 Jun 2013 14:48:04 +0200	[thread overview]
Message-ID: <51CD8604.5010801@acm.org> (raw)
In-Reply-To: <51CD856A.3010102-HInyCGIudOg@public.gmane.org>

Avoid that srp_claim_command() can claim a command while
srp_queuecommand() is still busy queueing the same command.
Found this via source reading.

Signed-off-by: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
Cc: Roland Dreier <roland-BHEL68pLQRGGvPXPguhicg@public.gmane.org>
Cc: David Dillow <dillowda-1Heg1YXhbW8@public.gmane.org>
Cc: Vu Pham <vu-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: Sebastian Riemer <sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
---
 drivers/infiniband/ulp/srp/ib_srp.c |   14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 368d160..035167b 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1047,13 +1047,11 @@ map_complete:
 static void srp_put_tx_iu(struct srp_target_port *target, struct srp_iu *iu,
 			  enum srp_iu_type iu_type)
 {
-	unsigned long flags;
+	lockdep_assert_held(&target->lock);
 
-	spin_lock_irqsave(&target->lock, flags);
 	list_add(&iu->list, &target->free_tx);
 	if (iu_type != SRP_IU_RSP)
 		++target->req_lim;
-	spin_unlock_irqrestore(&target->lock, flags);
 }
 
 /*
@@ -1210,7 +1208,10 @@ static int srp_response_common(struct srp_target_port *target, s32 req_delta,
 	if (err) {
 		shost_printk(KERN_ERR, target->scsi_host, PFX
 			     "unable to post response: %d\n", err);
+
+		spin_lock_irqsave(&target->lock, flags);
 		srp_put_tx_iu(target, iu, SRP_IU_RSP);
+		spin_unlock_irqrestore(&target->lock, flags);
 	}
 
 	return err;
@@ -1367,7 +1368,6 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 
 	req = list_first_entry(&target->free_reqs, struct srp_request, list);
 	list_del(&req->list);
-	spin_unlock_irqrestore(&target->lock, flags);
 
 	dev = target->srp_host->srp_dev->dev;
 	ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_iu_len,
@@ -1401,6 +1401,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 		shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n");
 		goto err_unmap;
 	}
+	spin_unlock_irqrestore(&target->lock, flags);
 
 	return 0;
 
@@ -1409,8 +1410,6 @@ err_unmap:
 
 err_iu:
 	srp_put_tx_iu(target, iu, SRP_IU_CMD);
-
-	spin_lock_irqsave(&target->lock, flags);
 	list_add(&req->list, &target->free_reqs);
 
 err_unlock:
@@ -1729,7 +1728,10 @@ static int srp_send_tsk_mgmt(struct srp_target_port *target,
 	ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
 				      DMA_TO_DEVICE);
 	if (srp_post_send(target, iu, sizeof *tsk_mgmt)) {
+		spin_lock_irq(&target->lock);
 		srp_put_tx_iu(target, iu, SRP_IU_TSK_MGMT);
+		spin_unlock_irq(&target->lock);
+
 		return -1;
 	}
 
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2013-06-28 12:48 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-28 12:45 [PATCH v2 0/15] IB SRP initiator patches for kernel 3.11 Bart Van Assche
     [not found] ` <51CD856A.3010102-HInyCGIudOg@public.gmane.org>
2013-06-28 12:46   ` [PATCH v2 01/15] IB/srp: Fix remove_one crash due to resource exhaustion Bart Van Assche
2013-06-28 12:48   ` Bart Van Assche [this message]
     [not found]     ` <51CD8604.5010801-HInyCGIudOg@public.gmane.org>
2013-06-28 14:42       ` [PATCH v2 02/15] IB/srp: Fix race between srp_queuecommand() and srp_claim_req() Sebastian Riemer
     [not found]         ` <51CDA0CD.6060504-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
2013-06-28 14:51           ` Bart Van Assche
     [not found]             ` <51CDA2E5.2010704-HInyCGIudOg@public.gmane.org>
2013-06-28 15:08               ` Sebastian Riemer
2013-06-30 19:59       ` David Dillow
     [not found]         ` <1372622347.12468.9.camel-a7a0dvSY7KqLUyTwlgNVppKKF0rrzTr+@public.gmane.org>
2013-07-01  7:10           ` Bart Van Assche
2013-06-28 12:49   ` [PATCH v2 03/15] IB/srp: Avoid that srp_reset_host() is skipped after a TL error Bart Van Assche
     [not found]     ` <51CD8644.5080600-HInyCGIudOg@public.gmane.org>
2013-06-30 20:00       ` David Dillow
2013-06-28 12:49   ` [PATCH v2 04/15] IB/srp: Fail I/O fast if target offline Bart Van Assche
     [not found]     ` <51CD8676.6080205-HInyCGIudOg@public.gmane.org>
2013-06-30 20:02       ` David Dillow
2013-07-01  9:07       ` Sebastian Riemer
     [not found]         ` <51D146EE.6010209-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
2013-07-01 11:33           ` Bart Van Assche
     [not found]             ` <51D16918.60600-HInyCGIudOg@public.gmane.org>
2013-07-01 11:53               ` Sebastian Riemer
2013-07-01  9:25       ` Sebastian Riemer
     [not found]         ` <51D14AF1.4000803-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
2013-07-01 11:38           ` Bart Van Assche
     [not found]             ` <51D16A39.4050709-HInyCGIudOg@public.gmane.org>
2013-07-01 12:31               ` Sebastian Riemer
     [not found]                 ` <51D176B5.90609-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
2013-07-01 12:57                   ` Bart Van Assche
2013-07-02  8:30       ` Sebastian Riemer
2013-06-28 12:50   ` [PATCH v2 05/15] IB/srp: Skip host settle delay Bart Van Assche
2013-06-28 12:51   ` [PATCH v2 06/15] IB/srp: Maintain a single connection per I_T nexus Bart Van Assche
     [not found]     ` <51CD86CE.8080804-HInyCGIudOg@public.gmane.org>
2013-06-30 20:10       ` David Dillow
2013-06-28 12:52   ` [PATCH v2 07/15] IB/srp: Keep rport as long as the IB transport layer Bart Van Assche
2013-06-30 21:06     ` David Dillow
2013-06-28 12:54   ` [PATCH v2 09/15] IB/srp: Add srp_terminate_io() Bart Van Assche
     [not found]     ` <51CD877E.80606-HInyCGIudOg@public.gmane.org>
2013-06-30 21:10       ` David Dillow
2013-06-28 12:55   ` [PATCH v2 10/15] IB/srp: Use SRP transport layer error recovery Bart Van Assche
     [not found]     ` <51CD87A9.2090702-HInyCGIudOg@public.gmane.org>
2013-06-30 21:20       ` David Dillow
2013-06-28 12:55   ` [PATCH v2 11/15] IB/srp: Start timers if a transport layer error occurs Bart Van Assche
     [not found]     ` <51CD87D7.3050300-HInyCGIudOg@public.gmane.org>
2013-06-30 21:21       ` David Dillow
2013-06-28 12:57   ` [PATCH v2 13/15] IB/srp: Make HCA completion vector configurable Bart Van Assche
     [not found]     ` <51CD8846.4070400-HInyCGIudOg@public.gmane.org>
2013-06-30 21:26       ` David Dillow
2013-06-28 12:58   ` [PATCH v2 14/15] IB/srp: Make transport layer retry count configurable Bart Van Assche
     [not found]     ` <51CD8876.9020307-HInyCGIudOg@public.gmane.org>
2013-06-30 21:48       ` David Dillow
     [not found]         ` <1372628891.12468.52.camel-a7a0dvSY7KqLUyTwlgNVppKKF0rrzTr+@public.gmane.org>
2013-07-01  8:18           ` Bart Van Assche
     [not found]             ` <51D13B52.5060803-HInyCGIudOg@public.gmane.org>
2013-07-01 11:26               ` David Dillow
     [not found]                 ` <1372677965.12468.57.camel-a7a0dvSY7KqLUyTwlgNVppKKF0rrzTr+@public.gmane.org>
2013-07-01 11:44                   ` Bart Van Assche
2013-07-02 19:18                   ` Jason Gunthorpe
     [not found]                     ` <20130702191842.GD14625-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2013-07-03 14:26                       ` David Dillow
2013-06-28 12:59   ` [PATCH v2 15/15] IB/srp: Bump driver version and release date Bart Van Assche
2013-06-28 12:53 ` [PATCH v2 08/15] scsi_transport_srp: Add transport layer error handling Bart Van Assche
2013-06-30 21:05   ` David Dillow
     [not found]     ` <1372626334.12468.34.camel-a7a0dvSY7KqLUyTwlgNVppKKF0rrzTr+@public.gmane.org>
2013-07-01  7:01       ` Bart Van Assche
     [not found]         ` <51D12941.3050105-HInyCGIudOg@public.gmane.org>
2013-07-01 11:19           ` David Dillow
2013-06-28 12:56 ` [PATCH v2 12/15] IB/srp: Fail SCSI commands silently Bart Van Assche
     [not found]   ` <51CD8812.20107-HInyCGIudOg@public.gmane.org>
2013-06-30 21:25     ` David Dillow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51CD8604.5010801@acm.org \
    --to=bvanassche-hinycgiudog@public.gmane.org \
    --cc=dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
    --cc=vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox