libata: initialize qc->dma_dir to DMA_NONE
libata didn't used to init qc->dma_dir to any specific value on qc initialization and command translation path didn't set qc->dma_dir if the command doesn't need data transfer. This made non-data commands to have random qc->dma_dir. This usually doesn't cause problem because LLDs usually check qc->protocol first and look at qc->dma_dir iff the command needs data transfer but this doesn't hold for all LLDs. It might be worthwhile to rename qc->dma_dir to qc->data_dir as we use the field to tag data direction for both PIO and DMA protocols. This problem has been spotted by James Bottomley. Signed-off-by: Tejun Heo <htejun@gmail.com> Cc: James Bottomley <James.Bottomley@SteelEye.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
96bc103f4c
commit
501e0c5002
@ -1143,6 +1143,7 @@ static inline void ata_tf_init(struct ata_device *dev, struct ata_taskfile *tf)
|
|||||||
|
|
||||||
static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
|
static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
|
qc->dma_dir = DMA_NONE;
|
||||||
qc->__sg = NULL;
|
qc->__sg = NULL;
|
||||||
qc->flags = 0;
|
qc->flags = 0;
|
||||||
qc->cursect = qc->cursg = qc->cursg_ofs = 0;
|
qc->cursect = qc->cursg = qc->cursg_ofs = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user