scsi: IB/srp: set virt_boundary_mask in the scsi host
authorChristoph Hellwig <hch@lst.de>
Mon, 17 Jun 2019 12:19:58 +0000 (14:19 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 17 Jul 2019 03:02:11 +0000 (23:02 -0400)
This ensures all proper DMA layer handling is taken care of by the SCSI
midlayer.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Acked-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/infiniband/ulp/srp/ib_srp.c

index b7c5a35..9c5b406 100644 (file)
@@ -3044,20 +3044,6 @@ static int srp_target_alloc(struct scsi_target *starget)
        return 0;
 }
 
-static int srp_slave_alloc(struct scsi_device *sdev)
-{
-       struct Scsi_Host *shost = sdev->host;
-       struct srp_target_port *target = host_to_target(shost);
-       struct srp_device *srp_dev = target->srp_host->srp_dev;
-       struct ib_device *ibdev = srp_dev->dev;
-
-       if (!(ibdev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
-               blk_queue_virt_boundary(sdev->request_queue,
-                                       ~srp_dev->mr_page_mask);
-
-       return 0;
-}
-
 static int srp_slave_configure(struct scsi_device *sdev)
 {
        struct Scsi_Host *shost = sdev->host;
@@ -3260,7 +3246,6 @@ static struct scsi_host_template srp_template = {
        .name                           = "InfiniBand SRP initiator",
        .proc_name                      = DRV_NAME,
        .target_alloc                   = srp_target_alloc,
-       .slave_alloc                    = srp_slave_alloc,
        .slave_configure                = srp_slave_configure,
        .info                           = srp_target_info,
        .queuecommand                   = srp_queuecommand,
@@ -3795,6 +3780,9 @@ static ssize_t srp_create_target(struct device *dev,
        target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
        target_host->max_segment_size = ib_dma_max_seg_size(ibdev);
 
+       if (!(ibdev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
+               target_host->virt_boundary_mask = ~srp_dev->mr_page_mask;
+
        target = host_to_target(target_host);
 
        target->net             = kobj_ns_grab_current(KOBJ_NS_TYPE_NET);