From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "target-devel@vger.kernel.org" <target-devel@vger.kernel.org>,
"nab@linux-iscsi.org" <nab@linux-iscsi.org>
Cc: "linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"mchristi@redhat.com" <mchristi@redhat.com>,
"himanshu.madhani@cavium.com" <himanshu.madhani@cavium.com>,
"quinn.tran@cavium.com" <quinn.tran@cavium.com>,
"hare@suse.com" <hare@suse.com>, "hch@lst.de" <hch@lst.de>
Subject: Re: [PATCH 2/3] target: Add TARGET_SCF_LOOKUP_LUN_FROM_TAG support for ABORT_TASK
Date: Mon, 5 Jun 2017 15:57:30 +0000 [thread overview]
Message-ID: <1496678246.2623.5.camel@sandisk.com> (raw)
In-Reply-To: <1496527808-28789-3-git-send-email-nab@linux-iscsi.org>
On Sat, 2017-06-03 at 22:10 +0000, Nicholas A. Bellinger wrote:
> +static bool target_lookup_lun_from_tag(struct se_session *se_sess, u64 tag,
> + u64 *unpacked_lun)
> +{
> + struct se_cmd *se_cmd;
> + unsigned long flags;
> + bool ret = false;
> +
> + spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
> + list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list) {
> + if (se_cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)
> + continue;
> +
> + if (se_cmd->tag == tag) {
> + *unpacked_lun = se_cmd->orig_fe_lun;
> + ret = true;
> + break;
> + }
> + }
> + spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
> +
> + return ret;
> +}
> +
> /**
> * target_submit_tmr - lookup unpacked lun and submit uninitialized se_cmd
> * for TMR CDBs
> @@ -1639,19 +1662,31 @@ int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,
> core_tmr_release_req(se_cmd->se_tmr_req);
> return ret;
> }
> + /*
> + * If this is ABORT_TASK with no explicit fabric provided LUN,
> + * go ahead and search active session tags for a match to figure
> + * out unpacked_lun for the original se_cmd.
> + */
> + if (tm_type == TMR_ABORT_TASK && (flags & TARGET_SCF_LOOKUP_LUN_FROM_TAG)) {
> + if (!target_lookup_lun_from_tag(se_sess, tag, &unpacked_lun))
> + goto failure;
> + }
>
> ret = transport_lookup_tmr_lun(se_cmd, unpacked_lun);
> - if (ret) {
> - /*
> - * For callback during failure handling, push this work off
> - * to process context with TMR_LUN_DOES_NOT_EXIST status.
> - */
> - INIT_WORK(&se_cmd->work, target_complete_tmr_failure);
> - schedule_work(&se_cmd->work);
> - return 0;
> - }
> + if (ret)
> + goto failure;
> +
> transport_generic_handle_tmr(se_cmd);
> return 0;
Hello Nic,
So after LUN lookup has finished sess_cmd_lock lock is dropped, a context
switch occurs due to the queue_work() call in transport_generic_handle_tmr()
and next core_tmr_abort_task() reacquires that lock? Sorry but I'm afraid
that if after that lock is dropped and before it is reacquired a command
finishes and the initiator reuses the same tag for another command for the
same LUN that this may result in the wrong command being aborted.
Bart.
next prev parent reply other threads:[~2017-06-05 15:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-03 22:10 [PATCH 0/3] target: Add TARGET_SCF_LOOKUP_LUN_FROM_TAG support Nicholas A. Bellinger
2017-06-03 22:10 ` [PATCH 1/3] target: Add support for TMR percpu reference counting Nicholas A. Bellinger
2017-06-07 1:13 ` Tran, Quinn
2017-06-03 22:10 ` [PATCH 2/3] target: Add TARGET_SCF_LOOKUP_LUN_FROM_TAG support for ABORT_TASK Nicholas A. Bellinger
2017-06-05 15:57 ` Bart Van Assche [this message]
2017-06-09 5:52 ` Nicholas A. Bellinger
2017-06-09 18:15 ` Bart Van Assche
2017-06-07 1:13 ` Tran, Quinn
2017-06-03 22:10 ` [PATCH 3/3] qla2xxx: Convert QLA_TGT_ABTS to TARGET_SCF_LOOKUP_LUN_FROM_TAG Nicholas A. Bellinger
2017-06-07 1:12 ` Tran, Quinn
2017-06-05 15:38 ` [PATCH 0/3] target: Add TARGET_SCF_LOOKUP_LUN_FROM_TAG support Madhani, Himanshu
2017-06-07 5:02 ` Madhani, Himanshu
2017-06-09 5:39 ` Nicholas A. Bellinger
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=1496678246.2623.5.camel@sandisk.com \
--to=bart.vanassche@sandisk.com \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=himanshu.madhani@cavium.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=mchristi@redhat.com \
--cc=nab@linux-iscsi.org \
--cc=quinn.tran@cavium.com \
--cc=target-devel@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).