[bug report] nvme sends invalid command capsule over rdma transport for 5KiB write when target supports MSDBD > 1
Max Gurtovoy
mgurtovoy at nvidia.com
Wed May 26 07:49:41 PDT 2021
On 5/26/2021 5:10 PM, Christoph Hellwig wrote:
> On Wed, May 26, 2021 at 02:12:08AM -0700, Sagi Grimberg wrote:
>> {
>> - struct nvme_sgl_desc *sg = &c->common.dptr.sgl;
>> - struct scatterlist *sgl = req->data_sgl.sg_table.sgl;
>> + struct nvme_sgl_desc *sgl = &c->common.dptr.sgl;
>> + struct scatterlist *sg, *scat = req->data_sgl.sg_table.sgl;
>> struct ib_sge *sge = &req->sge[1];
>> u32 len = 0;
>> int i;
>>
>> - for (i = 0; i < count; i++, sgl++, sge++) {
>> - sge->addr = sg_dma_address(sgl);
>> - sge->length = sg_dma_len(sgl);
>> + for_each_sg(scat, sg, count, i) {
>> + sge->addr = sg_dma_address(sg);
>> + sge->length = sg_dma_len(sg);
>> sge->lkey = queue->device->pd->local_dma_lkey;
>> len += sge->length;
>> }
> We do need for_each_sg here indeed, but you also need to keep
> incrementing sge for each loop iteration. I think we can also
> drop the scat local variable with just a single users and all the
> renaming while we're at it.
Is the above fixing the issue ?
Seems like code refactoring to me, right ?
More information about the Linux-nvme
mailing list