All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Estrin, Alex" <alex.estrin-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Bart Van Assche
	<bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>,
	Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>,
	"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: RE: [PATCH 06/15] IB/srpt: Simplify srpt_handle_tsk_mgmt()
Date: Tue, 26 Jan 2016 16:57:32 +0000	[thread overview]
Message-ID: <F3529576D8E232409F431C309E29399328F6B06A@CRSMSX102.amr.corp.intel.com> (raw)
In-Reply-To: <568BD1D2.1030609-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>

Hi Doug, Bart,

Is it possible to expedite this patch as it actually fixes a real bug in ib_srpt?

If srp target receives ABORT TASK, it will crash the kernel while trying to respond.
We were able to reproduce it under quite heavy load:

[78395.442496] BUG: unable to handle kernel NULL pointer dereference at
0000000000000001
[78395.442534] IP: [<ffffffffa0565f37>] srpt_handle_new_iu+0x6d7/0x790
[ib_srpt]
[78395.442564] PGD 0
[78395.442574] Oops: 0002 [#1] SMP
....
[78395.443443] Call Trace:
[78395.443457]  [<ffffffffa05660ce>] srpt_process_completion+0xde/0x570
[ib_srpt]
[78395.443484]  [<ffffffffa056669f>] srpt_compl_thread+0x13f/0x160 [ib_srpt]
[78395.444406]  [<ffffffff81098230>] ? wake_up_bit+0x30/0x30
[78395.445307]  [<ffffffffa0566560>] ? srpt_process_completion+0x570/0x570
[ib_srpt]
[78395.446218]  [<ffffffff8109726f>] kthread+0xcf/0xe0
[78395.447125]  [<ffffffff810971a0>] ? kthread_create_on_node+0x140/0x140
[78395.448033]  [<ffffffff81613cfc>] ret_from_fork+0x7c/0xb0
[78395.448927]  [<ffffffff810971a0>] ? kthread_create_on_node+0x140/0x140
[78395.449814] Code: 1a 01 00 00 01 74 a3 48 8b 7d a0 89 55 b8 48 89 4d c0 e8
fd 20 00 00 8b 55 b8 48 8b 4d c0 eb 8a 0f 1f 40 00 49 8b 85 f8 00 00 00 <c6> 40
01 01 e9 44 fd ff ff 49 8b b
4 24 b8 04 00 00 49 8d 94 24
[78395.451693] RIP  [<ffffffffa0565f37>] srpt_handle_new_iu+0x6d7/0x790
[ib_srpt]
[78395.452603]  RSP <ffff88083e80fd70>
[78395.453498] CR2: 0000000000000001

Trace was obtained on RHEL7.1 distro, but could happened on any kernel,
so I believe this patch should go to stable as well.
Please see below the hit scenario(fixed by this patch).

Fixes: 3e4f574857ee ("ib_srpt: Convert TMR path to target_submit_tmr")
Tested-by: Alex Estrin <alex.estrin@intel.com>


> -----Original Message-----
> From: linux-rdma-owner@vger.kernel.org [mailto:linux-rdma-owner@vger.kernel.org] On
> Behalf Of Bart Van Assche
> Sent: Tuesday, January 05, 2016 9:23 AM
> To: Doug Ledford
> Cc: Christoph Hellwig; linux-rdma@vger.kernel.org
> Subject: [PATCH 06/15] IB/srpt: Simplify srpt_handle_tsk_mgmt()
> 
> Let the target core check task existence instead of the SRP target
> driver.
> 
> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
> Cc: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/infiniband/ulp/srpt/ib_srpt.c | 54 ++---------------------------------
>  1 file changed, 2 insertions(+), 52 deletions(-)
> 
> diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c
> b/drivers/infiniband/ulp/srpt/ib_srpt.c
> index fc19203..9cb1a14 100644
> --- a/drivers/infiniband/ulp/srpt/ib_srpt.c
> +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
> @@ -1554,47 +1554,6 @@ send_sense:
>  	return -1;
>  }
> 
> -/**
> - * srpt_rx_mgmt_fn_tag() - Process a task management function by tag.
> - * @ch: RDMA channel of the task management request.
> - * @fn: Task management function to perform.
> - * @req_tag: Tag of the SRP task management request.
> - * @mgmt_ioctx: I/O context of the task management request.
> - *
> - * Returns zero if the target core will process the task management
> - * request asynchronously.
> - *
> - * Note: It is assumed that the initiator serializes tag-based task management
> - * requests.
> - */
> -static int srpt_rx_mgmt_fn_tag(struct srpt_send_ioctx *ioctx, u64 tag)
> -{
> -	struct srpt_device *sdev;
> -	struct srpt_rdma_ch *ch;
> -	struct srpt_send_ioctx *target;
> -	int ret, i;
> -
> -	ret = -EINVAL;
> -	ch = ioctx->ch;
> -	BUG_ON(!ch);
> -	BUG_ON(!ch->sport);
> -	sdev = ch->sport->sdev;
> -	BUG_ON(!sdev);
> -	spin_lock_irq(&sdev->spinlock);
> -	for (i = 0; i < ch->rq_size; ++i) {
> -		target = ch->ioctx_ring[i];
> -		if (target->cmd.se_lun == ioctx->cmd.se_lun &&
> -		    target->cmd.tag == tag &&
> -		    srpt_get_cmd_state(target) != SRPT_STATE_DONE) {
> -			ret = 0;
> -			/* now let the target core abort &target->cmd; */
> -			break;
> -		}
> -	}
> -	spin_unlock_irq(&sdev->spinlock);
> -	return ret;
> -}
> -
>  static int srp_tmr_to_tcm(int fn)
>  {
>  	switch (fn) {
> @@ -1628,7 +1587,6 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch,
>  	struct srp_tsk_mgmt *srp_tsk;
>  	struct se_cmd *cmd;
>  	struct se_session *sess = ch->sess;
> -	uint32_t tag = 0;
>  	int tcm_tmr;
>  	int rc;
> 
> @@ -1649,18 +1607,10 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch,
>  			TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED;
>  		goto fail;
>  	}
> -	if (srp_tsk->tsk_mgmt_func == SRP_TSK_ABORT_TASK) {
> -		rc = srpt_rx_mgmt_fn_tag(send_ioctx, srp_tsk->task_tag);
> -		if (rc < 0) {
> -			send_ioctx->cmd.se_tmr_req->response =
                                    ^^^^^^^^^^^^^^^^^^^^   !!!
se_tmr_req pointer was cleared a few lines of code earlier:

srpt_handle_new_iu() {
	.....
	send_ioctx = srpt_get_send_ioctx(ch) {
				.....
				memset(&ioctx->cmd, 0 ... !!! re-init se_cmd structure for response.
			}
	...
	srpt_handle_tsk_mgmt(ch, recv_ioctx, send_ioctx) {
	...
	And here we got it !!!
		send_ioctx->cmd.se_tmr_req->response =   
					TMR_TASK_DOES_NOT_EXIST;

> -			goto fail;
> -		}
> -		tag = srp_tsk->task_tag;
> -	}
>  	rc = target_submit_tmr(&send_ioctx->cmd, sess, NULL,
>  			       scsilun_to_int(&srp_tsk->lun), srp_tsk, tcm_tmr,
> -			       GFP_KERNEL, tag, TARGET_SCF_ACK_KREF);
> +			       GFP_KERNEL, srp_tsk->task_tag,
> +			       TARGET_SCF_ACK_KREF);
>  	if (rc != 0) {
>  		send_ioctx->cmd.se_tmr_req->response = TMR_FUNCTION_REJECTED;
>  		goto fail;
> --
> 2.1.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2016-01-26 16:57 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-05 14:19 [PATCH 00/15] Various ib_srpt patches Bart Van Assche
     [not found] ` <568BD0FC.70207-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-05 14:20   ` [PATCH 01/15] IB/srpt: Add parentheses around sizeof argument Bart Van Assche
     [not found]     ` <568BD142.3070900-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  4:58       ` Christoph Hellwig
2016-01-06 13:58       ` Sagi Grimberg
2016-01-05 14:21   ` [PATCH 02/15] IB/srpt: Inline srpt_sdev_name() Bart Van Assche
     [not found]     ` <568BD15F.6010909-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  4:58       ` Christoph Hellwig
2016-01-06 13:58       ` Sagi Grimberg
2016-01-05 14:21   ` [PATCH 03/15] IB/srpt: Inline srpt_get_ch_state() Bart Van Assche
     [not found]     ` <568BD181.5040009-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  4:58       ` Christoph Hellwig
2016-01-06 13:59       ` Sagi Grimberg
2016-01-05 14:22   ` [PATCH 04/15] IB/srpt: Introduce target_reverse_dma_direction() Bart Van Assche
     [not found]     ` <568BD19C.6060404-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  4:59       ` Christoph Hellwig
2016-01-06 14:00       ` Sagi Grimberg
2016-01-05 14:22   ` [PATCH 05/15] IB/srpt: Use scsilun_to_int() Bart Van Assche
     [not found]     ` <568BD1B6.4090308-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  4:59       ` Christoph Hellwig
2016-01-06 14:01       ` Sagi Grimberg
2016-01-05 14:23   ` [PATCH 06/15] IB/srpt: Simplify srpt_handle_tsk_mgmt() Bart Van Assche
     [not found]     ` <568BD1D2.1030609-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:00       ` Christoph Hellwig
2016-01-06 14:02       ` Sagi Grimberg
2016-01-26 16:57       ` Estrin, Alex [this message]
     [not found]         ` <F3529576D8E232409F431C309E29399328F6B06A-8k97q/ur5Z1cIJlls4ac1rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-01-26 17:32           ` Bart Van Assche
     [not found]             ` <56A7ADA3.5080507-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-26 18:35               ` Estrin, Alex
     [not found]                 ` <F3529576D8E232409F431C309E29399328F6B0C3-8k97q/ur5Z1cIJlls4ac1rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-01-26 18:46                   ` Bart Van Assche
     [not found]                     ` <56A7BF23.1060306-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-26 18:52                       ` Estrin, Alex
2016-01-05 14:23   ` [PATCH 07/15] IB/srpt: Simplify channel state management Bart Van Assche
     [not found]     ` <568BD1F1.5050107-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:01       ` Christoph Hellwig
2016-01-06 14:08       ` Sagi Grimberg
2016-01-05 14:24   ` [PATCH 08/15] IB/srpt: Simplify srpt_shutdown_session() Bart Van Assche
     [not found]     ` <568BD20F.7020101-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:07       ` Christoph Hellwig
2016-01-06 14:13       ` Sagi Grimberg
2016-01-05 14:24   ` [PATCH 09/15] IB/srpt: Fix srpt_close_session() Bart Van Assche
     [not found]     ` <568BD231.10205-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:08       ` Christoph Hellwig
2016-01-06 14:21       ` Sagi Grimberg
     [not found]         ` <568D22F6.4050803-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-01-06 14:34           ` Bart Van Assche
     [not found]             ` <568D25D9.3050809-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06 14:46               ` Sagi Grimberg
2016-01-05 14:25   ` [PATCH 10/15] IB/srpt: Fix srpt_handle_cmd() error paths Bart Van Assche
     [not found]     ` <568BD249.1000100-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:09       ` Christoph Hellwig
2016-01-06 14:31       ` Sagi Grimberg
     [not found]         ` <568D2553.8050302-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-01-06 14:36           ` Bart Van Assche
2016-01-05 14:25   ` [PATCH 11/15] IB/srpt: Fix how aborted commands are processed Bart Van Assche
     [not found]     ` <568BD26D.9080003-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:13       ` Christoph Hellwig
     [not found]         ` <20160106051305.GK15574-jcswGhMUV9g@public.gmane.org>
2016-01-06 13:30           ` Bart Van Assche
2016-01-05 14:26   ` [PATCH 12/15] IB/srpt: Eliminate srpt_find_channel() Bart Van Assche
     [not found]     ` <568BD28E.40302-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:15       ` Christoph Hellwig
2016-01-06 14:33       ` Sagi Grimberg
2016-01-05 14:26   ` [PATCH 13/15] IB/srpt: Detect session shutdown reliably Bart Van Assche
     [not found]     ` <568BD2A9.6070600-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:21       ` Christoph Hellwig
     [not found]         ` <20160106052138.GM15574-jcswGhMUV9g@public.gmane.org>
2016-01-06 13:34           ` Bart Van Assche
2016-01-06 14:39       ` Sagi Grimberg
     [not found]         ` <568D2707.9020309-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-01-06 14:46           ` Bart Van Assche
     [not found]             ` <568D28CA.8010804-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06 17:04               ` Christoph Hellwig
2016-01-05 14:27   ` [PATCH 14/15] IB/srpt: Fix srpt_write_pending() Bart Van Assche
     [not found]     ` <568BD2C2.6090808-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:22       ` Christoph Hellwig
2016-01-06 14:41       ` Sagi Grimberg
2016-01-05 14:27   ` [PATCH 15/15] IB/srpt: Fix a rare crash in srpt_close_session() Bart Van Assche
     [not found]     ` <568BD2E1.1060701-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2016-01-06  5:23       ` Christoph Hellwig
2016-01-06 14:47       ` Sagi Grimberg

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=F3529576D8E232409F431C309E29399328F6B06A@CRSMSX102.amr.corp.intel.com \
    --to=alex.estrin-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=hch-jcswGhMUV9g@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.