Re: [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue

Sergei Shtylyov
2012-03-22T11:24:23Z

Hello.

On 22-03-2012 9:52, Lin Ming wrote:

> Currently, __scsi_alloc_queue uses SCSI host's parent device
> as DMA device to set segment boundary. But the parent device may not
> refer to the DMA device. For example, for ATA disk, SCSI host's parent
> device now refers to ATA port.

> Since commit d139b9b([SCSI] scsi_lib_dma: fix bug with dma maps on
> nested scsi objects), a new field Scsi_Host->dma_device was introduced

Only the field is named 'dma_dev', isn't it?

> to refer to the real DMA device.

> Use ->dma_device in __scsi_alloc_queue to correctly set segment
> boundary.

> And use scsi_add_host_with_dma in ata_scsi_add_hosts to pass in the
> correct DMA device.

Perhaps this should be split into two patches.

> Bug report: http://marc.info/?l=linux-ide&m=133177818318187&w=2

> Reported-and-tested-by: Jörg Sommer<joerg@alea.gnuu.de>
> Signed-off-by: Lin Ming<ming.m.lin@intel.com>
[...]

> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index f85cfa6..486088b 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -1642,7 +1642,7 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,
> request_fn_proc *request_fn)
> {
> struct request_queue *q;
> - struct device *dev = shost->shost_gendev.parent;
> + struct device *dev = shost->dma_dev;
>
> q = blk_init_queue(request_fn, NULL);
> if (!q)

WBR, Sergei