Commit 7a801184 authored by Brian King's avatar Brian King Committed by Jeff Garzik

libata: Fixup n_elem initialization

Fixup the inialization of qc->n_elem. It currently gets
initialized to 1 for commands that do not transfer any data.
Fix this by initializing n_elem to 0 and only setting to 1
in ata_scsi_qc_new when there is data to transfer. This fixes
some problems seen with SATA devices attached to ipr adapters.
Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 07c53dac
...@@ -372,7 +372,7 @@ struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev, ...@@ -372,7 +372,7 @@ struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
if (cmd->use_sg) { if (cmd->use_sg) {
qc->__sg = (struct scatterlist *) cmd->request_buffer; qc->__sg = (struct scatterlist *) cmd->request_buffer;
qc->n_elem = cmd->use_sg; qc->n_elem = cmd->use_sg;
} else { } else if (cmd->request_bufflen) {
qc->__sg = &qc->sgent; qc->__sg = &qc->sgent;
qc->n_elem = 1; qc->n_elem = 1;
} }
......
...@@ -1149,6 +1149,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc) ...@@ -1149,6 +1149,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
qc->cursect = qc->cursg = qc->cursg_ofs = 0; qc->cursect = qc->cursg = qc->cursg_ofs = 0;
qc->nsect = 0; qc->nsect = 0;
qc->nbytes = qc->curbytes = 0; qc->nbytes = qc->curbytes = 0;
qc->n_elem = 0;
qc->err_mask = 0; qc->err_mask = 0;
ata_tf_init(qc->dev, &qc->tf); ata_tf_init(qc->dev, &qc->tf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment