Skip to content

Commit

Permalink
[QLOGICPTI]: Handle INQUIRY response sniffing correctly.
Browse files Browse the repository at this point in the history
These days, in 2.6.x, even INQUIRY commands are sent using
scatter gather lists.

Bug reported by Tom 'spot' Callaway.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Oct 14, 2005
1 parent 688cb30 commit f75884d
Showing 1 changed file with 35 additions and 4 deletions.
39 changes: 35 additions & 4 deletions drivers/scsi/qlogicpti.c
Original file line number Diff line number Diff line change
Expand Up @@ -1119,6 +1119,36 @@ static inline void update_can_queue(struct Scsi_Host *host, u_int in_ptr, u_int
host->sg_tablesize = QLOGICPTI_MAX_SG(num_free);
}

static unsigned int scsi_rbuf_get(struct scsi_cmnd *cmd, unsigned char **buf_out)
{
unsigned char *buf;
unsigned int buflen;

if (cmd->use_sg) {
struct scatterlist *sg;

sg = (struct scatterlist *) cmd->request_buffer;
buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
buflen = sg->length;
} else {
buf = cmd->request_buffer;
buflen = cmd->request_bufflen;
}

*buf_out = buf;
return buflen;
}

static void scsi_rbuf_put(struct scsi_cmnd *cmd, unsigned char *buf)
{
if (cmd->use_sg) {
struct scatterlist *sg;

sg = (struct scatterlist *) cmd->request_buffer;
kunmap_atomic(buf - sg->offset, KM_IRQ0);
}
}

/*
* Until we scan the entire bus with inquiries, go throught this fella...
*/
Expand All @@ -1145,11 +1175,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
int ok = host_byte(Cmnd->result) == DID_OK;
if (Cmnd->cmnd[0] == 0x12 && ok) {
unsigned char *iqd;
unsigned int iqd_len;

if (Cmnd->use_sg != 0)
BUG();

iqd = ((unsigned char *)Cmnd->buffer);
iqd_len = scsi_rbuf_get(Cmnd, &iqd);

/* tags handled in midlayer */
/* enable sync mode? */
Expand All @@ -1163,6 +1191,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
if (iqd[7] & 0x20) {
qpti->dev_param[tgt].device_flags |= 0x20;
}

scsi_rbuf_put(Cmnd, iqd);

qpti->sbits |= (1 << tgt);
} else if (!ok) {
qpti->sbits |= (1 << tgt);
Expand Down

0 comments on commit f75884d

Please sign in to comment.