Commit 09a4460b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Martin K. Petersen

scsi: IB/iser: set virt_boundary_mask in the scsi host

This ensures all proper DMA layer handling is taken care of by the SCSI
midlayer.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarMax Gurtovoy <maxg@mellanox.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 83eed459
...@@ -613,6 +613,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, ...@@ -613,6 +613,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
struct Scsi_Host *shost; struct Scsi_Host *shost;
struct iser_conn *iser_conn = NULL; struct iser_conn *iser_conn = NULL;
struct ib_conn *ib_conn; struct ib_conn *ib_conn;
struct ib_device *ib_dev;
u32 max_fr_sectors; u32 max_fr_sectors;
shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0); shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0);
...@@ -643,16 +644,19 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, ...@@ -643,16 +644,19 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
} }
ib_conn = &iser_conn->ib_conn; ib_conn = &iser_conn->ib_conn;
ib_dev = ib_conn->device->ib_device;
if (ib_conn->pi_support) { if (ib_conn->pi_support) {
u32 sig_caps = ib_conn->device->ib_device->attrs.sig_prot_cap; u32 sig_caps = ib_dev->attrs.sig_prot_cap;
scsi_host_set_prot(shost, iser_dif_prot_caps(sig_caps)); scsi_host_set_prot(shost, iser_dif_prot_caps(sig_caps));
scsi_host_set_guard(shost, SHOST_DIX_GUARD_IP | scsi_host_set_guard(shost, SHOST_DIX_GUARD_IP |
SHOST_DIX_GUARD_CRC); SHOST_DIX_GUARD_CRC);
} }
if (iscsi_host_add(shost, if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
ib_conn->device->ib_device->dev.parent)) { shost->virt_boundary_mask = ~MASK_4K;
if (iscsi_host_add(shost, ib_dev->dev.parent)) {
mutex_unlock(&iser_conn->state_mutex); mutex_unlock(&iser_conn->state_mutex);
goto free_host; goto free_host;
} }
...@@ -958,30 +962,6 @@ static umode_t iser_attr_is_visible(int param_type, int param) ...@@ -958,30 +962,6 @@ static umode_t iser_attr_is_visible(int param_type, int param)
return 0; return 0;
} }
static int iscsi_iser_slave_alloc(struct scsi_device *sdev)
{
struct iscsi_session *session;
struct iser_conn *iser_conn;
struct ib_device *ib_dev;
mutex_lock(&unbind_iser_conn_mutex);
session = starget_to_session(scsi_target(sdev))->dd_data;
iser_conn = session->leadconn->dd_data;
if (!iser_conn) {
mutex_unlock(&unbind_iser_conn_mutex);
return -ENOTCONN;
}
ib_dev = iser_conn->ib_conn.device->ib_device;
if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
blk_queue_virt_boundary(sdev->request_queue, ~MASK_4K);
mutex_unlock(&unbind_iser_conn_mutex);
return 0;
}
static struct scsi_host_template iscsi_iser_sht = { static struct scsi_host_template iscsi_iser_sht = {
.module = THIS_MODULE, .module = THIS_MODULE,
.name = "iSCSI Initiator over iSER", .name = "iSCSI Initiator over iSER",
...@@ -994,7 +974,6 @@ static struct scsi_host_template iscsi_iser_sht = { ...@@ -994,7 +974,6 @@ static struct scsi_host_template iscsi_iser_sht = {
.eh_device_reset_handler= iscsi_eh_device_reset, .eh_device_reset_handler= iscsi_eh_device_reset,
.eh_target_reset_handler = iscsi_eh_recover_target, .eh_target_reset_handler = iscsi_eh_recover_target,
.target_alloc = iscsi_target_alloc, .target_alloc = iscsi_target_alloc,
.slave_alloc = iscsi_iser_slave_alloc,
.proc_name = "iscsi_iser", .proc_name = "iscsi_iser",
.this_id = -1, .this_id = -1,
.track_queue_depth = 1, .track_queue_depth = 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment