cxgbit: fix sg_nents calculation
authorVarun Prakash <varun@chelsio.com>
Sat, 29 Jul 2017 15:31:49 +0000 (21:01 +0530)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sun, 30 Jul 2017 22:35:34 +0000 (15:35 -0700)
commitd96adb9b076a12d30500347e2e667689062f44a0
treef9c294b8c5824a197899a712869eb425a1c8c688
parent310d40a973c560a24c79f84cb5f16dc540a05686
cxgbit: fix sg_nents calculation

The current logic of calculating sg_nents can fail
if data_offset % PAGE_SIZE is not zero.

For example -
PAGE_SIZE = 4096
data_len = 3072
data_offset = 3072

As per current logic
sg_nents = max(1UL, DIV_ROUND_UP(data_len, PAGE_SIZE));
sg_nents = max(1UL, DIV_ROUND_UP(3072, 4096));
sg_nents = 1

But as data_offset % PAGE_SIZE = 3072 we should skip 3072 bytes
skip = 3K
sg_nents = max(1UL, DIV_ROUND_UP(3K(skip) + 3K(data_len), 4K(PAGE_SIZE));
sg_nents = 2;

This patch fixes this issue by adding skip to data_len.

Signed-off-by: Varun Prakash <varun@chelsio.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/iscsi/cxgbit/cxgbit_target.c