|
@@ -1332,7 +1332,7 @@ unsigned ata_exec_internal_sg(struct ata_device *dev,
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * ata_exec_internal_sg - execute libata internal command
|
|
|
+ * ata_exec_internal - execute libata internal command
|
|
|
* @dev: Device to which the command is sent
|
|
|
* @tf: Taskfile registers for the command and the result
|
|
|
* @cdb: CDB for packet command
|
|
@@ -1353,11 +1353,17 @@ unsigned ata_exec_internal(struct ata_device *dev,
|
|
|
struct ata_taskfile *tf, const u8 *cdb,
|
|
|
int dma_dir, void *buf, unsigned int buflen)
|
|
|
{
|
|
|
- struct scatterlist sg;
|
|
|
+ struct scatterlist *psg = NULL, sg;
|
|
|
+ unsigned int n_elem = 0;
|
|
|
|
|
|
- sg_init_one(&sg, buf, buflen);
|
|
|
+ if (dma_dir != DMA_NONE) {
|
|
|
+ WARN_ON(!buf);
|
|
|
+ sg_init_one(&sg, buf, buflen);
|
|
|
+ psg = &sg;
|
|
|
+ n_elem++;
|
|
|
+ }
|
|
|
|
|
|
- return ata_exec_internal_sg(dev, tf, cdb, dma_dir, &sg, 1);
|
|
|
+ return ata_exec_internal_sg(dev, tf, cdb, dma_dir, psg, n_elem);
|
|
|
}
|
|
|
|
|
|
/**
|