On Mon, 2012-05-07 at 16:59 +0300, Dan Carpenter wrote:
> Hello Nicholas Bellinger,
>
> This is a semi-automatic email about new static checker warnings.
>
Hey Dan,
> The patch 2c0532cbbbb5: "qla2xxx: Add LLD target-mode infrastructure
> for >= 24xx series" from May 3, 2012, leads to the following Smatch
> complaint:
>
> drivers/scsi/qla2xxx/qla_target.c:2965 qlt_abort_task()
> error: we previously assumed 'sess' could be null (see line 2958)
>
> drivers/scsi/qla2xxx/qla_target.c
> 2957 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id);
> 2958 if (sess == NULL) {
> ^^^^^^^^^^^^
> New check.
>
> 2959 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf025,
> 2960 "qla_target(%d): task abort for unexisting "
> 2961 "session\n", vha->vp_idx);
> 2962 res = qlt_sched_sess_work(ha->tgt.qla_tgt,
> 2963 QLA_TGT_SESS_WORK_ABORT, iocb, sizeof(*iocb));
> 2964 if (res != 0)
> 2965 sess->tgt->tm_to_unknown = 1;
> ^^^^^^^^^
> New dereference.
>
So it looks like ->tm_to_unknown is actually left-over cruft before the
conversion to proper workqueue usage in qla_target.c, and now it's safe
to go ahead and drop this plus other unnecessary sess_works_pending
bitfield..
I'm committing the following patch into lio-core.git, and will fold into
for-next-merge for reference.
Qlogic folks, please also fold into your linux-scsi submission, or let
me know if you would prefer an updated target series.
Thanks!
--nab
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 2baef81..d1d5380 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -421,7 +421,6 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd)
"Using sess for qla_tgt_reset: %p\n", sess);
if (!sess) {
res = -ESRCH;
- ha->tgt.qla_tgt->tm_to_unknown = 1;
return res;
}
@@ -1066,10 +1065,7 @@ static int qlt_sched_sess_work(struct qla_tgt *tgt, int type,
memcpy(&prm->tm_iocb, param, param_size);
spin_lock_irqsave(&tgt->sess_work_lock, flags);
- if (!tgt->sess_works_pending)
- tgt->tm_to_unknown = 0;
list_add_tail(&prm->sess_works_list_entry, &tgt->sess_works_list);
- tgt->sess_works_pending = 1;
spin_unlock_irqrestore(&tgt->sess_work_lock, flags);
schedule_work(&tgt->sess_work);
@@ -1343,7 +1339,6 @@ static void qlt_24xx_handle_abts(struct scsi_qla_host *vha,
rc = qlt_sched_sess_work(ha->tgt.qla_tgt,
QLA_TGT_SESS_WORK_ABORT, abts, sizeof(*abts));
if (rc != 0) {
- ha->tgt.qla_tgt->tm_to_unknown = 1;
qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED,
false);
}
@@ -2897,8 +2892,6 @@ static int qlt_handle_task_mgmt(struct scsi_qla_host *vha, void *iocb)
"non-existant session\n", vha->vp_idx, fn);
res = qlt_sched_sess_work(tgt, QLA_TGT_SESS_WORK_TM, iocb,
sizeof(atio_from_isp_t));
- if (res != 0)
- tgt->tm_to_unknown = 1;
return res;
}
@@ -2961,8 +2954,6 @@ static int qlt_abort_task(struct scsi_qla_host *vha, imm_ntfy_from_isp_t *iocb)
"session\n", vha->vp_idx);
res = qlt_sched_sess_work(ha->tgt.qla_tgt,
QLA_TGT_SESS_WORK_ABORT, iocb, sizeof(*iocb));
- if (res != 0)
- sess->tgt->tm_to_unknown = 1;
return res;
}
@@ -4254,7 +4245,6 @@ static void qlt_sess_work_fn(struct work_struct *work)
{
struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_work);
struct scsi_qla_host *vha = tgt->vha;
- struct qla_hw_data *ha = vha->hw;
unsigned long flags;
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt);
@@ -4290,15 +4280,6 @@ static void qlt_sess_work_fn(struct work_struct *work)
kfree(prm);
}
spin_unlock_irqrestore(&tgt->sess_work_lock, flags);
-
- spin_lock_irqsave(&ha->hardware_lock, flags);
- spin_lock(&tgt->sess_work_lock);
- if (list_empty(&tgt->sess_works_list)) {
- tgt->sess_works_pending = 0;
- tgt->tm_to_unknown = 0;
- }
- spin_unlock(&tgt->sess_work_lock);
- spin_unlock_irqrestore(&ha->hardware_lock, flags);
}
/* Must be called under tgt_host_action_mutex */
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index f0280ae..7d5849f 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -763,8 +763,6 @@ struct qla_tgt {
/* Target's flags, serialized by pha->hardware_lock */
unsigned int tgt_enable_64bit_addr:1; /* 64-bits PCI addr enabled */
unsigned int link_reinit_iocb_pending:1;
- unsigned int tm_to_unknown:1; /* TM to unknown session was sent */
- unsigned int sess_works_pending:1; /* there are sess_work entries */
/*
* Protected by tgt_mutex AND hardware_lock for writing and tgt_mutex
--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux SCSI]
[Kernel Newbies]
[Linux SCSI Target Infrastructure]
[Share Photos]
[IDE]
[Security]
[Git]
[Netfilter]
[Bugtraq]
[Photos]
[Yosemite]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Linux ATA RAID]
[Linux IIO]
[Samba]
[Video 4 Linux]
[Device Mapper]
[Linux Resources]