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: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Родитель
07c53dac49
Коммит
7a801184fa
|
@ -372,7 +372,7 @@ struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
|
|||
if (cmd->use_sg) {
|
||||
qc->__sg = (struct scatterlist *) cmd->request_buffer;
|
||||
qc->n_elem = cmd->use_sg;
|
||||
} else {
|
||||
} else if (cmd->request_bufflen) {
|
||||
qc->__sg = &qc->sgent;
|
||||
qc->n_elem = 1;
|
||||
}
|
||||
|
|
|
@ -1149,6 +1149,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
|
|||
qc->cursect = qc->cursg = qc->cursg_ofs = 0;
|
||||
qc->nsect = 0;
|
||||
qc->nbytes = qc->curbytes = 0;
|
||||
qc->n_elem = 0;
|
||||
qc->err_mask = 0;
|
||||
|
||||
ata_tf_init(qc->dev, &qc->tf);
|
||||
|
|
Загрузка…
Ссылка в новой задаче