[PATCH v2] iser: explicitly set shost max_segment_size if non virtual boundary devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



if the rdma device supports sg gaps, we don't need to set a virtual
boundary but we then need to explicitly set the max_segment_size, otherwise
scsi takes BLK_MAX_SEGMENT_SIZE and sets it using dma_set_max_seg_size()
and this affects all the rdma device consumers.

Fix it by setting shost max_segment_size according to the device
capability if SG_GAPS are not supported.

Reported-by: Jason Gunthorpe <jgg@xxxxxxxx>
Suggested-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Sagi Grimberg <sagi@xxxxxxxxxxx>
---
Changes from v1:
- set max_segment_size only for non virtual boundary devices

 drivers/infiniband/ulp/iser/iscsi_iser.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 841b66397a57..a3a4b956bbb9 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -653,7 +653,9 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
 						   SHOST_DIX_GUARD_CRC);
 		}
 
-		if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
+		if (ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG)
+			shost->max_segment_size = ib_dma_max_seg_size(ib_dev);
+		else
 			shost->virt_boundary_mask = ~MASK_4K;
 
 		if (iscsi_host_add(shost, ib_dev->dev.parent)) {
-- 
2.17.1




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux