From: Tejun Heo Date: Wed, 17 Jan 2007 02:34:02 +0000 (+0900) Subject: libata: initialize qc->dma_dir to DMA_NONE X-Git-Tag: v2.6.20-rc6~53^2~2 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=501e0c500217e38276d61445ee0839b3f2c66d05;p=linux-2.6-omap-h63xx.git 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 Cc: James Bottomley Signed-off-by: Jeff Garzik --- diff --git a/include/linux/libata.h b/include/linux/libata.h index ab275483032..e53a13ba7f7 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -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) { + qc->dma_dir = DMA_NONE; qc->__sg = NULL; qc->flags = 0; qc->cursect = qc->cursg = qc->cursg_ofs = 0;