tcm_fc: Check for aborted sequence
Add a check for an aborted sequence, which has a NULL sequence pointer, to avoid target crashes. The most relevant messages from the crash (entered from video capture) include: BUG: unable to handle kernel paging request at ffffffffffffffdf IP: [<ffffffffa02d514c>] fc_seq_send+0x3c/0x150 [libfc] ... Call Trace: [<ffffffffa0443de6>] ft_queue_data_in+0x266/0x560 [tcm_fc] Signed-off-by: Mark Rustad <mark.d.rustad@intel.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
72438cddd6
commit
d3682b1aeb
|
@ -103,6 +103,13 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
|
|||
use_sg = !(remaining % 4);
|
||||
|
||||
while (remaining) {
|
||||
struct fc_seq *seq = cmd->seq;
|
||||
|
||||
if (!seq) {
|
||||
pr_debug("%s: Command aborted, xid 0x%x\n",
|
||||
__func__, ep->xid);
|
||||
break;
|
||||
}
|
||||
if (!mem_len) {
|
||||
sg = sg_next(sg);
|
||||
mem_len = min((size_t)sg->length, remaining);
|
||||
|
@ -169,7 +176,7 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
|
|||
f_ctl |= FC_FC_END_SEQ;
|
||||
fc_fill_fc_hdr(fp, FC_RCTL_DD_SOL_DATA, ep->did, ep->sid,
|
||||
FC_TYPE_FCP, f_ctl, fh_off);
|
||||
error = lport->tt.seq_send(lport, cmd->seq, fp);
|
||||
error = lport->tt.seq_send(lport, seq, fp);
|
||||
if (error) {
|
||||
/* XXX For now, initiator will retry */
|
||||
pr_err_ratelimited("%s: Failed to send frame %p, "
|
||||
|
|
Loading…
Reference in New Issue