Skip to contentSkip to conversation

New: Race: host lock is not acquired before calling ql_icmd

Bugme-new Andrew Morton 1 participant 1 message Dec 7, 2006 SCSI

lore
Share & tools
lore
#0 lore raw

Does drivers/scsi/qlogicfas408.c have a maintainer?

Begin forwarded message:

Date: Wed, 6 Dec 2006 16:14:31 -0800
From: [email protected]
To: [email protected]
Subject: [Bugme-new] [Bug 7644] New: Race: host lock is not acquired before calling ql_icmd

http://bugzilla.kernel.org/show_bug.cgi?id=7644

Summary: Race: host lock is not acquired before calling ql_icmd
Kernel Version: 2.6.19
Status: NEW
Severity: normal
Owner: [email protected]
Submitter: [email protected]

The caller of ql_icmd() should hold the host lock (from the head comments of ql_icmd() shown below). But, the lock is not acquired in function qlogicfas408_queuecommand(). All of these code is in file drivers/scsi/qlogicfas408.c

/*
* Initiate scsi command - queueing handler
* caller must hold host lock
*/

static void ql_icmd(struct scsi_cmnd *cmd)

{
        struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
        int     qbase = priv->qbase;
        int     int_type = priv->int_type;
        unsigned int i;

        priv->qabort = 0;

        REG0;
        /* clearing of interrupts and the fifo is needed */

...

------------------------------------------------------

int qlogicfas408_queuecommand(struct scsi_cmnd *cmd,
void (*done) (struct scsi_cmnd *))

{
        struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
        if (scmd_id(cmd) == priv->qinitid) {
                cmd->result = DID_BAD_TARGET << 16;
                done(cmd);
                return 0;
        }

        cmd->scsi_done = done;
        /* wait for the last command's interrupt to finish */
        while (priv->qlcmd != NULL) {
                barrier();
                cpu_relax();
        }
        ql_icmd(cmd);
        return 0;
}

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.