remove the "clustering" flag
Subsystems (70)
The block layer has been carrying around a magic clustering flag, which is an artefact of prehistoric scsi layer design decisions.
Originally it controller if any segment merging happens at all for a given LLLD, but with merging moving to the block layer and massively more complex now it now essentically means that no segment shall be larger than a page, and no segment shall cross a page boundary if clustering is not enabled. Unfortunately the SCSI layer historically defaults to disabled clustering, but fortunately most drivers actually enable it, and very few drivers do not set an explicit flag.
So this series first flips the default to be sensible, and then replaces the magic flag with setting an explicit dma boundary and max segment size to reuse the existing mechanisms. It also fixes up a few drivers where the no clustering setting was clearly bogus, although we can probably lift these limits for others as well eventually.
PATCH 1/9 scsi: flip the default on use_clustering
Most SCSI drivers want to enable "clustering", that is merging of segments so that they might span more than a single page. Remove the ENABLE_CLUSTERING define, and require drivers to explicitly set DISABLE_CLUSTERING to disable this feature. All drivers not setting use_clustering at all are switched to set DISABLE_CLUSTERING to keep the current behavior.
--- drivers/firewire/sbp2.c | 1 - drivers/infiniband/ulp/iser/iscsi_iser.c | 1 - drivers/infiniband/ulp/srp/ib_srp.c | 1 - drivers/message/fusion/mptfc.c | 1 - drivers/message/fusion/mptsas.c | 1 - drivers/message/fusion/mptspi.c | 1 - drivers/s390/scsi/zfcp_scsi.c | 1 - drivers/scsi/3w-9xxx.c | 1 - drivers/scsi/3w-sas.c | 1 - drivers/scsi/3w-xxxx.c | 1 - drivers/scsi/53c700.c | 1 - drivers/scsi/BusLogic.c | 1 - drivers/scsi/a100u2w.c | 1 - drivers/scsi/a3000.c | 1 - drivers/scsi/aacraid/linit.c | 1 - drivers/scsi/advansys.c | 8 -------- drivers/scsi/aha1542.c | 1 - drivers/scsi/aha1740.c | 1 - drivers/scsi/aic7xxx/aic79xx_osm.c | 1 - drivers/scsi/aic7xxx/aic7xxx_osm.c | 1 - drivers/scsi/aic94xx/aic94xx_init.c | 1 - drivers/scsi/arcmsr/arcmsr_hba.c | 1 - drivers/scsi/arm/powertec.c | 1 - drivers/scsi/atp870u.c | 1 - drivers/scsi/be2iscsi/be_main.c | 1 - drivers/scsi/bfa/bfad_im.c | 2 -- drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 1 - drivers/scsi/bnx2i/bnx2i_iscsi.c | 1 - drivers/scsi/csiostor/csio_scsi.c | 2 -- drivers/scsi/cxlflash/main.c | 1 - drivers/scsi/dpt_i2o.c | 1 - drivers/scsi/esas2r/esas2r_main.c | 1 - drivers/scsi/esp_scsi.c | 1 - drivers/scsi/fcoe/fcoe.c | 1 - drivers/scsi/fnic/fnic_main.c | 1 - drivers/scsi/gdth.c | 1 - drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 1 - drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 1 - drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 1 - drivers/scsi/hpsa.c | 1 - drivers/scsi/hptiop.c | 1 - drivers/scsi/ibmvscsi/ibmvfc.c | 1 - drivers/scsi/ibmvscsi/ibmvscsi.c | 1 - drivers/scsi/imm.c | 1 - drivers/scsi/initio.c | 1 - drivers/scsi/ipr.c | 1 - drivers/scsi/ips.c | 1 - drivers/scsi/isci/init.c | 1 - drivers/scsi/lpfc/lpfc_scsi.c | 4 ---- drivers/scsi/megaraid.c | 1 - drivers/scsi/megaraid/megaraid_mbox.c | 1 - drivers/scsi/megaraid/megaraid_sas_base.c | 1 - drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 -- drivers/scsi/mvme147.c | 1 - drivers/scsi/mvsas/mv_init.c | 1 - drivers/scsi/mvumi.c | 1 + drivers/scsi/myrb.c | 1 + drivers/scsi/myrs.c | 1 + drivers/scsi/ncr53c8xx.c | 1 - drivers/scsi/pcmcia/sym53c500_cs.c | 1 - drivers/scsi/pm8001/pm8001_init.c | 1 - drivers/scsi/pmcraid.c | 1 - drivers/scsi/ppa.c | 1 - drivers/scsi/ps3rom.c | 1 - drivers/scsi/qedf/qedf_main.c | 1 - drivers/scsi/qedi/qedi_iscsi.c | 1 - drivers/scsi/qla1280.c | 1 - drivers/scsi/qla2xxx/qla_os.c | 1 - drivers/scsi/qla4xxx/ql4_os.c | 1 - drivers/scsi/qlogicpti.c | 1 - drivers/scsi/scsi_debug.c | 5 ++--- drivers/scsi/scsi_lib.c | 2 +- drivers/scsi/smartpqi/smartpqi_init.c | 1 - drivers/scsi/snic/snic_main.c | 1 - drivers/scsi/stex.c | 1 + drivers/scsi/storvsc_drv.c | 1 - drivers/scsi/sym53c8xx_2/sym_glue.c | 1 - drivers/scsi/ufs/ufshcd.c | 1 + drivers/scsi/virtio_scsi.c | 1 - drivers/scsi/vmw_pvscsi.c | 1 - drivers/scsi/wd719x.c | 1 - drivers/staging/rts5208/rtsx.c | 6 ------ drivers/staging/unisys/visorhba/visorhba_main.c | 1 - drivers/usb/image/microtek.c | 1 - drivers/usb/storage/scsiglue.c | 7 ------- drivers/usb/storage/uas.c | 1 + include/linux/libata.h | 2 -- include/scsi/scsi_host.h | 3 +-- 88 files changed, 10 insertions(+), 110 deletions(-)
drivers/firewire/sbp2.c +0 -1
@@ -1610,7 +1610,6 @@ static struct scsi_host_template scsi_driver_template = { .eh_abort_handler = sbp2_scsi_abort, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, .can_queue = 1, .sdev_attrs = sbp2_scsi_sysfs_attrs, };
drivers/infiniband/ulp/iser/iscsi_iser.c +0 -1
@@ -997,7 +997,6 @@ static struct scsi_host_template iscsi_iser_sht = { .eh_device_reset_handler= iscsi_eh_device_reset, .eh_target_reset_handler = iscsi_eh_recover_target, .target_alloc = iscsi_target_alloc, - .use_clustering = ENABLE_CLUSTERING, .slave_alloc = iscsi_iser_slave_alloc, .proc_name = "iscsi_iser", .this_id = -1,
drivers/infiniband/ulp/srp/ib_srp.c +0 -1
@@ -3215,7 +3215,6 @@ static struct scsi_host_template srp_template = { .can_queue = SRP_DEFAULT_CMD_SQ_SIZE, .this_id = -1, .cmd_per_lun = SRP_DEFAULT_CMD_SQ_SIZE, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = srp_host_attrs, .track_queue_depth = 1, };
drivers/message/fusion/mptfc.c +0 -1
@@ -129,7 +129,6 @@ static struct scsi_host_template mptfc_driver_template = { .sg_tablesize = MPT_SCSI_SG_DEPTH, .max_sectors = 8192, .cmd_per_lun = 7, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = mptscsih_host_attrs, };
drivers/message/fusion/mptsas.c +0 -1
@@ -1992,7 +1992,6 @@ static struct scsi_host_template mptsas_driver_template = { .sg_tablesize = MPT_SCSI_SG_DEPTH, .max_sectors = 8192, .cmd_per_lun = 7, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = mptscsih_host_attrs, .no_write_same = 1, };
drivers/message/fusion/mptspi.c +0 -1
@@ -848,7 +848,6 @@ static struct scsi_host_template mptspi_driver_template = { .sg_tablesize = MPT_SCSI_SG_DEPTH, .max_sectors = 8192, .cmd_per_lun = 7, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = mptscsih_host_attrs, };
drivers/s390/scsi/zfcp_scsi.c +0 -1
@@ -425,7 +425,6 @@ static struct scsi_host_template zfcp_scsi_host_template = { * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2) * 8,/* GCD, adjusted later */ .dma_boundary = ZFCP_QDIO_SBALE_LEN - 1, - .use_clustering = 1, .shost_attrs = zfcp_sysfs_shost_attrs, .sdev_attrs = zfcp_sysfs_sdev_attrs, .track_queue_depth = 1,
drivers/scsi/3w-9xxx.c +0 -1
@@ -1998,7 +1998,6 @@ static struct scsi_host_template driver_template = { .sg_tablesize = TW_APACHE_MAX_SGL_LENGTH, .max_sectors = TW_MAX_SECTORS, .cmd_per_lun = TW_MAX_CMDS_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = twa_host_attrs, .emulated = 1, .no_write_same = 1,
drivers/scsi/3w-sas.c +0 -1
@@ -1550,7 +1550,6 @@ static struct scsi_host_template driver_template = { .sg_tablesize = TW_LIBERATOR_MAX_SGL_LENGTH, .max_sectors = TW_MAX_SECTORS, .cmd_per_lun = TW_MAX_CMDS_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = twl_host_attrs, .emulated = 1, .no_write_same = 1,
drivers/scsi/3w-xxxx.c +0 -1
@@ -2247,7 +2247,6 @@ static struct scsi_host_template driver_template = { .sg_tablesize = TW_MAX_SGL_LENGTH, .max_sectors = TW_MAX_SECTORS, .cmd_per_lun = TW_MAX_CMDS_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = tw_host_attrs, .emulated = 1, .no_write_same = 1,
drivers/scsi/53c700.c +0 -1
@@ -318,7 +318,6 @@ NCR_700_detect(struct scsi_host_template *tpnt, tpnt->can_queue =NCR_700_COMMAND_SLOTS_PER_HOST ; tpnt->sg_tablesize =NCR_700_SG_SEGMENTS ; tpnt->cmd_per_lun =NCR_700_CMD_PER_LUN ; - tpnt->use_clustering =ENABLE_CLUSTERING ; tpnt->slave_configure = NCR_700_slave_configure; tpnt->slave_destroy = NCR_700_slave_destroy; tpnt->slave_alloc = NCR_700_slave_alloc;
drivers/scsi/BusLogic.c +0 -1
@@ -3857,7 +3857,6 @@ static struct scsi_host_template blogic_template = {#endif .unchecked_isa_dma = 1, .max_sectors = 128, - .use_clustering = ENABLE_CLUSTERING, };/*
drivers/scsi/a100u2w.c +0 -1
@@ -1078,7 +1078,6 @@ static struct scsi_host_template inia100_template = { .can_queue = 1, .this_id = 1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, }; static int inia100_probe_one(struct pci_dev *pdev,
drivers/scsi/a3000.c +0 -1
@@ -175,7 +175,6 @@ static struct scsi_host_template amiga_a3000_scsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING };static int __init amiga_a3000_scsi_probe (struct platform_device *pdev)
drivers/scsi/aacraid/linit.c +0 -1
@@ -1540,7 +1540,6 @@ static struct scsi_host_template aac_driver_template = {#else .cmd_per_lun = AAC_NUM_IO_FIB, #endif - .use_clustering = ENABLE_CLUSTERING, .emulated = 1, .no_write_same = 1, };
drivers/scsi/advansys.c +0 -8
@@ -10808,14 +10808,6 @@ static struct scsi_host_template advansys_template = {* for non-ISA adapters. */ .unchecked_isa_dma = true, -/* -* All adapters controlled by this driver are capable of large -* scatter-gather lists. According to the mid-level SCSI documentation -* this obviates any performance gain provided by setting -* 'use_clustering'. But empirically while CPU utilization is increased -* by enabling clustering, I/O throughput increases as well. -*/ - .use_clustering = ENABLE_CLUSTERING, };static int advansys_wide_init_chip (struct Scsi_Host *shost)
drivers/scsi/aha1542.c +0 -1
@@ -1011,7 +1011,6 @@ static struct scsi_host_template driver_template = { .this_id = 7, .sg_tablesize = 16, .unchecked_isa_dma = 1, - .use_clustering = ENABLE_CLUSTERING, };static int aha1542_isa_match (struct device *pdev,unsigned int ndev)
drivers/scsi/aha1740.c +0 -1
@@ -545,7 +545,6 @@ static struct scsi_host_template aha1740_template = { .can_queue = AHA1740_ECBS, .this_id = 7, .sg_tablesize = AHA1740_SCATTER, - .use_clustering = ENABLE_CLUSTERING, .eh_abort_handler = aha1740_eh_abort_handler, };
drivers/scsi/aic7xxx/aic79xx_osm.c +0 -1
@@ -920,7 +920,6 @@ struct scsi_host_template aic79xx_driver_template = { .this_id = -1, .max_sectors = 8192, .cmd_per_lun = 2, - .use_clustering = ENABLE_CLUSTERING, .slave_alloc = ahd_linux_slave_alloc, .slave_configure = ahd_linux_slave_configure, .target_alloc = ahd_linux_target_alloc,
drivers/scsi/aic7xxx/aic7xxx_osm.c +0 -1
@@ -807,7 +807,6 @@ struct scsi_host_template aic7xxx_driver_template = { .this_id = -1, .max_sectors = 8192, .cmd_per_lun = 2, - .use_clustering = ENABLE_CLUSTERING, .slave_alloc = ahc_linux_slave_alloc, .slave_configure = ahc_linux_slave_configure, .target_alloc = ahc_linux_target_alloc,
drivers/scsi/aic94xx/aic94xx_init.c +0 -1
@@ -68,7 +68,6 @@ static struct scsi_host_template aic94xx_sht = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/arcmsr/arcmsr_hba.c +0 -1
@@ -156,7 +156,6 @@ static struct scsi_host_template arcmsr_scsi_host_template = { .sg_tablesize = ARCMSR_DEFAULT_SG_ENTRIES, .max_sectors = ARCMSR_MAX_XFER_SECTORS_C, .cmd_per_lun = ARCMSR_DEFAULT_CMD_PERLUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = arcmsr_host_attrs, .no_write_same = 1, };
drivers/scsi/arm/powertec.c +0 -1
@@ -294,7 +294,6 @@ static struct scsi_host_template powertecscsi_template = { .sg_tablesize = SG_MAX_SEGMENTS, .dma_boundary = IOMD_DMA_BOUNDARY, .cmd_per_lun = 2, - .use_clustering = ENABLE_CLUSTERING, .proc_name = "powertec", };
drivers/scsi/atp870u.c +0 -1
@@ -1681,7 +1681,6 @@ static struct scsi_host_template atp870u_template = { .can_queue = qcnt /* can_queue */, .this_id = 7 /* SCSI ID */, .sg_tablesize = ATP870U_SCATTER /*SG_ALL*/ /*SG_NONE*/, - .use_clustering = ENABLE_CLUSTERING, .max_sectors = ATP870U_MAX_SECTORS, };
drivers/scsi/be2iscsi/be_main.c +0 -1
@@ -405,7 +405,6 @@ static struct scsi_host_template beiscsi_sht = { .this_id = -1, .max_sectors = BEISCSI_MAX_SECTORS, .cmd_per_lun = BEISCSI_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .vendor_id = SCSI_NL_VID_TYPE_PCI | BE_VENDOR_ID, .track_queue_depth = 1, };
drivers/scsi/bfa/bfad_im.c +0 -2
@@ -817,7 +817,6 @@ struct scsi_host_template bfad_im_scsi_host_template = { .this_id = -1, .sg_tablesize = BFAD_IO_MAX_SGE, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = bfad_im_host_attrs, .max_sectors = BFAD_MAX_SECTORS, .vendor_id = BFA_PCI_VENDOR_ID_BROCADE,
@@ -840,7 +839,6 @@ struct scsi_host_template bfad_im_vport_template = { .this_id = -1, .sg_tablesize = BFAD_IO_MAX_SGE, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = bfad_im_vport_attrs, .max_sectors = BFAD_MAX_SECTORS, };
drivers/scsi/bnx2fc/bnx2fc_fcoe.c +0 -1
@@ -2970,7 +2970,6 @@ static struct scsi_host_template bnx2fc_shost_template = { .change_queue_depth = scsi_change_queue_depth, .this_id = -1, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = BNX2FC_MAX_BDS_PER_CMD, .max_sectors = 1024, .track_queue_depth = 1,
drivers/scsi/bnx2i/bnx2i_iscsi.c +0 -1
@@ -2263,7 +2263,6 @@ static struct scsi_host_template bnx2i_host_template = { .max_sectors = 127, .cmd_per_lun = 128, .this_id = -1, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = ISCSI_MAX_BDS_PER_CMD, .shost_attrs = bnx2i_dev_attributes, .track_queue_depth = 1,
drivers/scsi/csiostor/csio_scsi.c +0 -2
@@ -2280,7 +2280,6 @@ struct scsi_host_template csio_fcoe_shost_template = { .this_id = -1, .sg_tablesize = CSIO_SCSI_MAX_SGE, .cmd_per_lun = CSIO_MAX_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = csio_fcoe_lport_attrs, .max_sectors = CSIO_MAX_SECTOR_SIZE, };
@@ -2300,7 +2299,6 @@ struct scsi_host_template csio_fcoe_shost_vport_template = { .this_id = -1, .sg_tablesize = CSIO_SCSI_MAX_SGE, .cmd_per_lun = CSIO_MAX_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = csio_fcoe_vport_attrs, .max_sectors = CSIO_MAX_SECTOR_SIZE, };
drivers/scsi/cxlflash/main.c +0 -1
@@ -3180,7 +3180,6 @@ static struct scsi_host_template driver_template = { .this_id = -1, .sg_tablesize = 1, /* No scatter gather support */ .max_sectors = CXLFLASH_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = cxlflash_host_attrs, .sdev_attrs = cxlflash_dev_attrs, };
drivers/scsi/dpt_i2o.c +0 -1
@@ -3569,7 +3569,6 @@ static struct scsi_host_template driver_template = { .slave_configure = adpt_slave_configure, .can_queue = MAX_TO_IOP_MESSAGES, .this_id = 7, - .use_clustering = ENABLE_CLUSTERING, };static int __init adpt_init (void )
drivers/scsi/esas2r/esas2r_main.c +0 -1
@@ -250,7 +250,6 @@ static struct scsi_host_template driver_template = { ESAS2R_DEFAULT_CMD_PER_LUN, .present = 0, .unchecked_isa_dma = 0, - .use_clustering = ENABLE_CLUSTERING, .emulated = 0, .proc_name = ESAS2R_DRVR_NAME, .change_queue_depth = scsi_change_queue_depth,
drivers/scsi/esp_scsi.c +0 -1
@@ -2676,7 +2676,6 @@ struct scsi_host_template scsi_esp_template = { .can_queue = 7, .this_id = 7, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, .max_sectors = 0xffff, .skip_settle_delay = 1, };
drivers/scsi/fcoe/fcoe.c +0 -1
@@ -286,7 +286,6 @@ static struct scsi_host_template fcoe_shost_template = { .this_id = -1, .cmd_per_lun = 3, .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SG_ALL, .max_sectors = 0xffff, .track_queue_depth = 1,
drivers/scsi/fnic/fnic_main.c +0 -1
@@ -115,7 +115,6 @@ static struct scsi_host_template fnic_host_template = { .this_id = -1, .cmd_per_lun = 3, .can_queue = FNIC_DFLT_IO_REQ, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = FNIC_MAX_SG_DESC_CNT, .max_sectors = 0xffff, .shost_attrs = fnic_attrs,
drivers/scsi/gdth.c +0 -1
@@ -4680,7 +4680,6 @@ static struct scsi_host_template gdth_template = { .sg_tablesize = GDTH_MAXSG, .cmd_per_lun = GDTH_MAXC_P_L, .unchecked_isa_dma = 1, - .use_clustering = ENABLE_CLUSTERING, .no_write_same = 1, };
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +0 -1
@@ -1817,7 +1817,6 @@ static struct scsi_host_template sht_v1_hw = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +0 -1
@@ -3572,7 +3572,6 @@ static struct scsi_host_template sht_v2_hw = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +0 -1
@@ -2226,7 +2226,6 @@ static struct scsi_host_template sht_v3_hw = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/hpsa.c +0 -1
@@ -965,7 +965,6 @@ static struct scsi_host_template hpsa_driver_template = { .scan_finished = hpsa_scan_finished, .change_queue_depth = hpsa_change_queue_depth, .this_id = -1, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = hpsa_eh_device_reset_handler, .ioctl = hpsa_ioctl, .slave_alloc = hpsa_slave_alloc,
drivers/scsi/hptiop.c +0 -1
@@ -1180,7 +1180,6 @@ static struct scsi_host_template driver_template = { .eh_host_reset_handler = hptiop_reset, .info = hptiop_info, .emulated = 0, - .use_clustering = ENABLE_CLUSTERING, .proc_name = driver_name, .shost_attrs = hptiop_attrs, .slave_configure = hptiop_slave_config,
drivers/scsi/ibmvscsi/ibmvfc.c +0 -1
@@ -3100,7 +3100,6 @@ static struct scsi_host_template driver_template = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = IBMVFC_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = ibmvfc_attrs, .track_queue_depth = 1, };
drivers/scsi/ibmvscsi/ibmvscsi.c +0 -1
@@ -2079,7 +2079,6 @@ static struct scsi_host_template driver_template = { .can_queue = IBMVSCSI_MAX_REQUESTS_DEFAULT, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = ibmvscsi_attrs, };
drivers/scsi/imm.c +0 -1
@@ -1110,7 +1110,6 @@ static struct scsi_host_template imm_template = { .bios_param = imm_biosparam, .this_id = 7, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, .can_queue = 1, .slave_alloc = imm_adjust_queue, };
drivers/scsi/initio.c +0 -1
@@ -2817,7 +2817,6 @@ static struct scsi_host_template initio_template = { .can_queue = MAX_TARGETS * i91u_MAXQUEUE, .this_id = 1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, }; static int initio_probe_one(struct pci_dev *pdev,
drivers/scsi/ipr.c +0 -1
@@ -6754,7 +6754,6 @@ static struct scsi_host_template driver_template = { .sg_tablesize = IPR_MAX_SGLIST, .max_sectors = IPR_IOA_MAX_SECTORS, .cmd_per_lun = IPR_MAX_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = ipr_ioa_attrs, .sdev_attrs = ipr_dev_attrs, .proc_name = IPR_NAME,
drivers/scsi/ips.c +0 -1
@@ -365,7 +365,6 @@ static struct scsi_host_template ips_driver_template = { .this_id = -1, .sg_tablesize = IPS_MAX_SG, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .no_write_same = 1, };
drivers/scsi/isci/init.c +0 -1
@@ -163,7 +163,6 @@ static struct scsi_host_template isci_sht = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_abort_handler = sas_eh_abort_handler, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler,
drivers/scsi/lpfc/lpfc_scsi.c +0 -4
@@ -6036,7 +6036,6 @@ struct scsi_host_template lpfc_template_nvme = { .this_id = -1, .sg_tablesize = 1, .cmd_per_lun = 1, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = lpfc_hba_attrs, .max_sectors = 0xFFFF, .vendor_id = LPFC_NL_VENDOR_ID,
@@ -6061,7 +6060,6 @@ struct scsi_host_template lpfc_template_no_hr = { .this_id = -1, .sg_tablesize = LPFC_DEFAULT_SG_SEG_CNT, .cmd_per_lun = LPFC_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = lpfc_hba_attrs, .max_sectors = 0xFFFF, .vendor_id = LPFC_NL_VENDOR_ID,
@@ -6088,7 +6086,6 @@ struct scsi_host_template lpfc_template = { .this_id = -1, .sg_tablesize = LPFC_DEFAULT_SG_SEG_CNT, .cmd_per_lun = LPFC_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = lpfc_hba_attrs, .max_sectors = 0xFFFF, .vendor_id = LPFC_NL_VENDOR_ID,
@@ -6113,7 +6110,6 @@ struct scsi_host_template lpfc_vport_template = { .this_id = -1, .sg_tablesize = LPFC_DEFAULT_SG_SEG_CNT, .cmd_per_lun = LPFC_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = lpfc_vport_attrs, .max_sectors = 0xFFFF, .change_queue_depth = scsi_change_queue_depth,
drivers/scsi/megaraid.c +0 -1
@@ -4148,7 +4148,6 @@ static struct scsi_host_template megaraid_template = { .this_id = DEFAULT_INITIATOR_ID, .sg_tablesize = MAX_SGLIST, .cmd_per_lun = DEF_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .eh_abort_handler = megaraid_abort, .eh_device_reset_handler = megaraid_reset, .eh_bus_reset_handler = megaraid_reset,
drivers/scsi/megaraid/megaraid_mbox.c +0 -1
@@ -336,7 +336,6 @@ static struct scsi_host_template megaraid_template_g = { .eh_abort_handler = megaraid_abort_handler, .eh_host_reset_handler = megaraid_reset_handler, .change_queue_depth = scsi_change_queue_depth, - .use_clustering = ENABLE_CLUSTERING, .no_write_same = 1, .sdev_attrs = megaraid_sdev_attrs, .shost_attrs = megaraid_shost_attrs,
drivers/scsi/megaraid/megaraid_sas_base.c +0 -1
@@ -3189,7 +3189,6 @@ static struct scsi_host_template megasas_template = { .eh_timed_out = megasas_reset_timer, .shost_attrs = megaraid_host_attrs, .bios_param = megasas_bios_param, - .use_clustering = ENABLE_CLUSTERING, .change_queue_depth = scsi_change_queue_depth, .no_write_same = 1, };
drivers/scsi/mpt3sas/mpt3sas_scsih.c +0 -2
@@ -10173,7 +10173,6 @@ static struct scsi_host_template mpt2sas_driver_template = { .sg_tablesize = MPT2SAS_SG_DEPTH, .max_sectors = 32767, .cmd_per_lun = 7, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = mpt3sas_host_attrs, .sdev_attrs = mpt3sas_dev_attrs, .track_queue_depth = 1,
@@ -10212,7 +10211,6 @@ static struct scsi_host_template mpt3sas_driver_template = { .sg_tablesize = MPT3SAS_SG_DEPTH, .max_sectors = 32767, .cmd_per_lun = 7, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = mpt3sas_host_attrs, .sdev_attrs = mpt3sas_dev_attrs, .track_queue_depth = 1,
drivers/scsi/mvme147.c +0 -1
@@ -78,7 +78,6 @@ static struct scsi_host_template mvme147_host_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING };static struct Scsi_Host *mvme147_shost;
drivers/scsi/mvsas/mv_init.c +0 -1
@@ -59,7 +59,6 @@ static struct scsi_host_template mvs_sht = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/mvumi.c +1 -0
@@ -2197,6 +2197,7 @@ static struct scsi_host_template mvumi_template = { .eh_timed_out = mvumi_timed_out, .eh_host_reset_handler = mvumi_host_reset, .bios_param = mvumi_bios_param, + .use_clustering = DISABLE_CLUSTERING, .this_id = -1, };
drivers/scsi/myrb.c +1 -0
@@ -2236,6 +2236,7 @@ struct scsi_host_template myrb_template = { .shost_attrs = myrb_shost_attrs, .sdev_attrs = myrb_sdev_attrs, .this_id = -1, + .use_clustering = DISABLE_CLUSTERING, };/**
drivers/scsi/myrs.c +1 -0
@@ -1929,6 +1929,7 @@ struct scsi_host_template myrs_template = { .shost_attrs = myrs_shost_attrs, .sdev_attrs = myrs_sdev_attrs, .this_id = -1, + .use_clustering = DISABLE_CLUSTERING, }; static struct myrs_hba *myrs_alloc_host(struct pci_dev *pdev,
drivers/scsi/ncr53c8xx.c +0 -1
@@ -8313,7 +8313,6 @@ struct Scsi_Host * __init ncr_attach(struct scsi_host_template *tpnt, tpnt->this_id =7 ; tpnt->sg_tablesize =SCSI_NCR_SG_TABLESIZE ; tpnt->cmd_per_lun =SCSI_NCR_CMD_PER_LUN ; - tpnt->use_clustering =ENABLE_CLUSTERING ;if (device->differential) driver_setup.diff_support = device->differential;
drivers/scsi/pcmcia/sym53c500_cs.c +0 -1
@@ -680,7 +680,6 @@ static struct scsi_host_template sym53c500_driver_template = { .can_queue = 1, .this_id = 7, .sg_tablesize = 32, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = SYM53C500_shost_attrs };
drivers/scsi/pm8001/pm8001_init.c +0 -1
@@ -84,7 +84,6 @@ static struct scsi_host_template pm8001_sht = { .this_id = -1, .sg_tablesize = SG_ALL, .max_sectors = SCSI_DEFAULT_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = sas_eh_device_reset_handler, .eh_target_reset_handler = sas_eh_target_reset_handler, .target_destroy = sas_target_destroy,
drivers/scsi/pmcraid.c +0 -1
@@ -4149,7 +4149,6 @@ static struct scsi_host_template pmcraid_host_template = { .max_sectors = PMCRAID_IOA_MAX_SECTORS, .no_write_same = 1, .cmd_per_lun = PMCRAID_MAX_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = pmcraid_host_attrs, .proc_name = PMCRAID_DRIVER_NAME, };
drivers/scsi/ppa.c +0 -1
@@ -978,7 +978,6 @@ static struct scsi_host_template ppa_template = { .bios_param = ppa_biosparam, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, .can_queue = 1, .slave_alloc = ppa_adjust_queue, };
drivers/scsi/ps3rom.c +0 -1
@@ -349,7 +349,6 @@ static struct scsi_host_template ps3rom_host_template = { .sg_tablesize = SG_ALL, .emulated = 1, /* only sg driver uses this */ .max_sectors = PS3ROM_MAX_SECTORS, - .use_clustering = ENABLE_CLUSTERING, .module = THIS_MODULE, };
drivers/scsi/qedf/qedf_main.c +0 -1
@@ -785,7 +785,6 @@ static struct scsi_host_template qedf_host_template = { .name = QEDF_MODULE_NAME, .this_id = -1, .cmd_per_lun = 32, - .use_clustering = ENABLE_CLUSTERING, .max_sectors = 0xffff, .queuecommand = qedf_queuecommand, .shost_attrs = qedf_host_attrs,
drivers/scsi/qedi/qedi_iscsi.c +0 -1
@@ -61,7 +61,6 @@ struct scsi_host_template qedi_host_template = { .max_sectors = 0xffff, .dma_boundary = QEDI_HW_DMA_BOUNDARY, .cmd_per_lun = 128, - .use_clustering = ENABLE_CLUSTERING, .shost_attrs = qedi_shost_attrs, };
drivers/scsi/qla1280.c +0 -1
@@ -4203,7 +4203,6 @@ static struct scsi_host_template qla1280_driver_template = { .can_queue = MAX_OUTSTANDING_COMMANDS, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = ENABLE_CLUSTERING, };
drivers/scsi/qla2xxx/qla_os.c +0 -1
@@ -328,7 +328,6 @@ struct scsi_host_template qla2xxx_driver_template = { .map_queues = qla2xxx_map_queues, .this_id = -1, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SG_ALL, .max_sectors = 0xFFFF,
drivers/scsi/qla4xxx/ql4_os.c +0 -1
@@ -205,7 +205,6 @@ static struct scsi_host_template qla4xxx_driver_template = { .this_id = -1, .cmd_per_lun = 3, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SG_ALL, .max_sectors = 0xFFFF,
drivers/scsi/qlogicpti.c +0 -1
@@ -1287,7 +1287,6 @@ static struct scsi_host_template qpti_template = { .can_queue = QLOGICPTI_REQ_QUEUE_LEN, .this_id = 7, .sg_tablesize = QLOGICPTI_MAX_SG(QLOGICPTI_REQ_QUEUE_LEN), - .use_clustering = ENABLE_CLUSTERING, };static const struct of_device_id qpti_match[];
drivers/scsi/scsi_debug.c +2 -3
@@ -5851,7 +5851,6 @@ static struct scsi_host_template sdebug_driver_template = { .sg_tablesize = SG_MAX_SEGMENTS, .cmd_per_lun = DEF_CMD_PER_LUN, .max_sectors = -1U, - .use_clustering = DISABLE_CLUSTERING, .module = THIS_MODULE, .track_queue_depth = 1, };
@@ -5866,8 +5865,8 @@ static int sdebug_driver_probe(struct device *dev) sdbg_host =to_sdebug_host (dev); sdebug_driver_template.can_queue = sdebug_max_queue; -if (sdebug_clustering) - sdebug_driver_template.use_clustering =ENABLE_CLUSTERING ; +if (!sdebug_clustering) + sdebug_driver_template.use_clustering =DISABLE_CLUSTERING ; hpnt =scsi_host_alloc (&sdebug_driver_template,sizeof (sdbg_host));if (NULL == hpnt) {pr_err ("scsi_host_alloc failed\n" );
drivers/scsi/scsi_lib.c +1 -1
@@ -2229,7 +2229,7 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)blk_queue_max_segment_size (q,dma_get_max_seg_size (dev)); -if (!shost->use_clustering) +if (shost->use_clustering ==DISABLE_CLUSTERING ) q->limits.cluster =0 ;/*
drivers/scsi/smartpqi/smartpqi_init.c +0 -1
@@ -5779,7 +5779,6 @@ static struct scsi_host_template pqi_driver_template = { .scan_start = pqi_scan_start, .scan_finished = pqi_scan_finished, .this_id = -1, - .use_clustering = ENABLE_CLUSTERING, .eh_device_reset_handler = pqi_eh_device_reset_handler, .ioctl = pqi_ioctl, .slave_alloc = pqi_slave_alloc,
drivers/scsi/snic/snic_main.c +0 -1
@@ -127,7 +127,6 @@ static struct scsi_host_template snic_host_template = { .this_id = -1, .cmd_per_lun = SNIC_DFLT_QUEUE_DEPTH, .can_queue = SNIC_MAX_IO_REQ, - .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SNIC_MAX_SG_DESC_CNT, .max_sectors = 0x800, .shost_attrs = snic_attrs,
drivers/scsi/stex.c +1 -0
@@ -1489,6 +1489,7 @@ static struct scsi_host_template driver_template = { .eh_abort_handler = stex_abort, .eh_host_reset_handler = stex_reset, .this_id = -1, + .use_clustering = DISABLE_CLUSTERING, };static struct pci_device_id stex_pci_tbl[] = {
drivers/scsi/storvsc_drv.c +0 -1
@@ -1698,7 +1698,6 @@ static struct scsi_host_template scsi_driver = { .slave_configure = storvsc_device_configure, .cmd_per_lun = 2048, .this_id = -1, - .use_clustering = ENABLE_CLUSTERING,/* Make sure we dont get a sg segment crosses a page boundary */ .dma_boundary = PAGE_SIZE-1, .no_write_same = 1,
drivers/scsi/sym53c8xx_2/sym_glue.c +0 -1
@@ -1660,7 +1660,6 @@ static struct scsi_host_template sym2_template = { .eh_bus_reset_handler = sym53c8xx_eh_bus_reset_handler, .eh_host_reset_handler = sym53c8xx_eh_host_reset_handler, .this_id = 7, - .use_clustering = ENABLE_CLUSTERING, .max_sectors =0xFFFF , #ifdef SYM_LINUX_PROC_INFO_SUPPORT .show_info = sym_show_info,
drivers/scsi/ufs/ufshcd.c +1 -0
@@ -6985,6 +6985,7 @@ static struct scsi_host_template ufshcd_driver_template = { .max_host_blocked = 1, .track_queue_depth = 1, .sdev_groups = ufshcd_driver_groups, + .use_clustering = DISABLE_CLUSTERING, }; static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg,
drivers/scsi/virtio_scsi.c +0 -1
@@ -747,7 +747,6 @@ static struct scsi_host_template virtscsi_host_template = { .slave_alloc = virtscsi_device_alloc, .dma_boundary = UINT_MAX, - .use_clustering = ENABLE_CLUSTERING, .target_alloc = virtscsi_target_alloc, .target_destroy = virtscsi_target_destroy, .map_queues = virtscsi_map_queues,
drivers/scsi/vmw_pvscsi.c +0 -1
@@ -1007,7 +1007,6 @@ static struct scsi_host_template pvscsi_template = { .sg_tablesize = PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT, .dma_boundary = UINT_MAX, .max_sectors = 0xffff, - .use_clustering = ENABLE_CLUSTERING, .change_queue_depth = pvscsi_change_queue_depth, .eh_abort_handler = pvscsi_abort, .eh_device_reset_handler = pvscsi_device_reset,
drivers/scsi/wd719x.c +0 -1
@@ -871,7 +871,6 @@ static struct scsi_host_template wd719x_template = { .can_queue = 255, .this_id = 7, .sg_tablesize = WD719X_SG, - .use_clustering = ENABLE_CLUSTERING, };static int wd719x_pci_probe (struct pci_dev *pdev,const struct pci_device_id *d)
drivers/staging/rts5208/rtsx.c +0 -6
@@ -237,12 +237,6 @@ static struct scsi_host_template rtsx_host_template = {/* limit the total size of a transfer to 120 KB */ .max_sectors = 240, -/* merge commands... this seems to help performance, but -* periodically someone should test to see which setting is more -* optimal. -*/ - .use_clustering = 1, -/* emulated HBA */ .emulated = 1,
drivers/staging/unisys/visorhba/visorhba_main.c +0 -1
@@ -645,7 +645,6 @@ static struct scsi_host_template visorhba_driver_template = { .this_id = -1, .slave_alloc = visorhba_slave_alloc, .slave_destroy = visorhba_slave_destroy, - .use_clustering = ENABLE_CLUSTERING, };/*
drivers/usb/image/microtek.c +0 -1
@@ -632,7 +632,6 @@ static struct scsi_host_template mts_scsi_host_template = { .sg_tablesize = SG_ALL, .can_queue = 1, .this_id = -1, - .use_clustering = 1, .emulated = 1, .slave_alloc = mts_slave_alloc, .slave_configure = mts_slave_configure,
drivers/usb/storage/scsiglue.c +0 -7
@@ -639,13 +639,6 @@ static const struct scsi_host_template usb_stor_host_template = {*/ .max_sectors = 240, -/* -* merge commands... this seems to help performance, but -* periodically someone should test to see which setting is more -* optimal. -*/ - .use_clustering = 1, -/* emulated HBA */ .emulated = 1,
drivers/usb/storage/uas.c +1 -0
@@ -879,6 +879,7 @@ static struct scsi_host_template uas_host_template = { .this_id = -1, .sg_tablesize = SG_NONE, .skip_settle_delay = 1, + .use_clustering = DISABLE_CLUSTERING, }; #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
include/linux/libata.h +0 -2
@@ -135,7 +135,6 @@ enum {ATA_SHT_EMULATED =1 ,ATA_SHT_THIS_ID =-1 , -ATA_SHT_USE_CLUSTERING =1 ,/* struct ata_taskfile flags */ ATA_TFLAG_LBA48 = (1 << 0), /* enable 48-bit LBA and "HOB" */
@@ -1360,7 +1359,6 @@ extern struct device_attribute *ata_common_sdev_attrs[]; .tag_alloc_policy = BLK_TAG_ALLOC_RR, \ .this_id = ATA_SHT_THIS_ID, \ .emulated = ATA_SHT_EMULATED, \ - .use_clustering = ATA_SHT_USE_CLUSTERING, \ .proc_name = drv_name, \ .slave_configure = ata_scsi_slave_config, \ .slave_destroy = ata_scsi_slave_destroy, \
include/scsi/scsi_host.h +1 -2
@@ -44,8 +44,7 @@ struct blk_queue_tags;#define MODE_INITIATOR 0x01#define MODE_TARGET 0x02 -#define DISABLE_CLUSTERING 0 -#define ENABLE_CLUSTERING 1 +#define DISABLE_CLUSTERING (-1)struct scsi_host_template {struct module *module;
Signature · 1 line
2.19.1
Bart Van Assche
maintainerRe: [PATCH 1/9] scsi: flip the default on use_clustering
Quoted 6 lines · Christoph Hellwig
Most SCSI drivers want to enable "clustering" that is merging of segments so that they might span more than a single page. Remove the
ENABLE_CLUSTERINGdefine, and require drivers to explicitly setDISABLE_CLUSTERINGto disable this feature. All drivers not settinguse_clusteringat all are switched to setDISABLE_CLUSTERINGto keep the current behavior.
Was this patch produced manually or has it been generated with the help of a script? In the latter case it would help if that script would be included in the patch description.
Additionally, this patch would be much easier to review if it would be split into two patches, one that adds .use_clustering =DISABLE_CLUSTERING from SCSI templates that implicitly disable clustering and a second patch that removes .use_clustering =ENABLE_CLUSTERING from all SCSI drivers.
Thanks,
Bart.
PATCH 2/9 scsi: introduce a max_segment_size host_template parameters
In reply to Christoph HellwigThis allows the host driver to indicate the maximum supported segment size in a nice an easy way, so that the driver doesn't have to worry about DMA-layer imposed limitations.
--- drivers/scsi/be2iscsi/be_main.c | 8 +------- drivers/scsi/hosts.c | 5 +++++ drivers/scsi/scsi_debug.c | 2 +- drivers/scsi/scsi_lib.c | 3 ++- include/scsi/scsi_host.h | 6 ++++++ 5 files changed, 15 insertions(+), 9 deletions(-)
drivers/scsi/be2iscsi/be_main.c +1 -7
@@ -214,12 +214,6 @@ static char const *cqe_desc[] = { "CXN_KILLED_IMM_DATA_RCVD" }; -static int beiscsi_slave_configure (struct scsi_device *sdev) -{ -blk_queue_max_segment_size (sdev->request_queue,65536 ); -return 0 ; -} -static int beiscsi_eh_abort (struct scsi_cmnd *sc) {struct iscsi_task *abrt_task = (struct iscsi_task *)sc->SCp.ptr;
@@ -393,7 +387,6 @@ static struct scsi_host_template beiscsi_sht = { .proc_name = DRV_NAME, .queuecommand = iscsi_queuecommand, .change_queue_depth = scsi_change_queue_depth, - .slave_configure = beiscsi_slave_configure, .target_alloc = iscsi_target_alloc, .eh_timed_out = iscsi_eh_cmd_timed_out, .eh_abort_handler = beiscsi_eh_abort,
@@ -404,6 +397,7 @@ static struct scsi_host_template beiscsi_sht = { .can_queue = BE2_IO_DEPTH, .this_id = -1, .max_sectors = BEISCSI_MAX_SECTORS, + .max_segment_size = 65536, .cmd_per_lun = BEISCSI_CMD_PER_LUN, .vendor_id = SCSI_NL_VID_TYPE_PCI | BE_VENDOR_ID, .track_queue_depth = 1,
drivers/scsi/hosts.c +5 -0
@@ -464,6 +464,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)else shost->max_sectors =SCSI_DEFAULT_MAX_SECTORS ; +if (sht->max_segment_size) + shost->max_segment_size = sht->max_segment_size; +else + shost->max_segment_size =BLK_MAX_SEGMENT_SIZE ; +/* * assume a 4GB boundary, if not set */
drivers/scsi/scsi_debug.c +1 -1
@@ -3973,7 +3973,6 @@ static int scsi_debug_slave_configure(struct scsi_device *sdp)return 1 ;/* no resources, will be marked offline */ } sdp->hostdata = devip; -blk_queue_max_segment_size (sdp->request_queue,-1U );if (sdebug_no_uld) sdp->no_uld_attach =1 ;config_cdb_len (sdp);
@@ -5851,6 +5850,7 @@ static struct scsi_host_template sdebug_driver_template = { .sg_tablesize = SG_MAX_SEGMENTS, .cmd_per_lun = DEF_CMD_PER_LUN, .max_sectors = -1U, + .max_segment_size = -1U, .module = THIS_MODULE, .track_queue_depth = 1, };
drivers/scsi/scsi_lib.c +2 -1
@@ -2227,7 +2227,8 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)blk_queue_segment_boundary (q, shost->dma_boundary);dma_set_seg_boundary (dev, shost->dma_boundary); -blk_queue_max_segment_size (q,dma_get_max_seg_size (dev)); +blk_queue_max_segment_size (q, +min (shost->max_segment_size,dma_get_max_seg_size (dev)));if (shost->use_clustering ==DISABLE_CLUSTERING ) q->limits.cluster =0 ;
include/scsi/scsi_host.h +6 -0
@@ -364,6 +364,11 @@ struct scsi_host_template {*/ unsigned int max_sectors; +/* +* Maximum size in bytes of a single segment. +*/ +unsigned int max_segment_size; +/* * DMA scatter gather segment boundary limit. A segment crossing this * boundary will be split in two.
@@ -603,6 +608,7 @@ struct Scsi_Host {short unsigned int sg_tablesize;short unsigned int sg_prot_tablesize;unsigned int max_sectors; +unsigned int max_segment_size;unsigned long dma_boundary;/* * In scsi-mq mode, the number of hardware queues supported by the LLD.
Signature · 1 line
2.19.1
Re: [PATCH 2/9] scsi: introduce a max_segment_size host_template parameters
Quoted 3 lines · Christoph Hellwig
This allows the host driver to indicate the maximum supported segment size in a nice an easy way, so that the driver doesn't have to worry about DMA-layer imposed limitations.
Re: [PATCH 2/9] scsi: introduce a max_segment_size host_template parameters
In reply to Christoph HellwigQuoted 123 lines · Christoph Hellwig
This allows the host driver to indicate the maximum supported segment size in a nice an easy way, so that the driver doesn't have to worry about DMA-layer imposed limitations.
Signed-off-by Christoph Hellwig <[email protected]>--- drivers/scsi/be2iscsi/be_main.c | 8 +------- drivers/scsi/hosts.c | 5 +++++ drivers/scsi/scsi_debug.c | 2 +- drivers/scsi/scsi_lib.c | 3 ++- include/scsi/scsi_host.h | 6 ++++++ 5 files changed, 15 insertions(+), 9 deletions(-)drivers/scsi/be2iscsi/be_main.c +1
-7@@ -214,12 +214,6 @@ static char const *cqe_desc[] = { "CXN_KILLED_IMM_DATA_RCVD" }; -static int beiscsi_slave_configure (struct scsi_device *sdev) -{ -blk_queue_max_segment_size (sdev->request_queue,65536 ); -return 0 ; -} -static int beiscsi_eh_abort (struct scsi_cmnd *sc) {struct iscsi_task *abrt_task = (struct iscsi_task *)sc->SCp.ptr;@@ -393,7 +387,6 @@ static struct scsi_host_template beiscsi_sht = { .proc_name = DRV_NAME, .queuecommand = iscsi_queuecommand, .change_queue_depth = scsi_change_queue_depth, - .slave_configure = beiscsi_slave_configure, .target_alloc = iscsi_target_alloc, .eh_timed_out = iscsi_eh_cmd_timed_out, .eh_abort_handler = beiscsi_eh_abort,@@ -404,6 +397,7 @@ static struct scsi_host_template beiscsi_sht = { .can_queue = BE2_IO_DEPTH, .this_id = -1, .max_sectors = BEISCSI_MAX_SECTORS, + .max_segment_size = 65536, .cmd_per_lun = BEISCSI_CMD_PER_LUN, .vendor_id = SCSI_NL_VID_TYPE_PCI | BE_VENDOR_ID, .track_queue_depth = 1,drivers/scsi/hosts.c +5
-0@@ -464,6 +464,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)else shost->max_sectors =SCSI_DEFAULT_MAX_SECTORS ; +if (sht->max_segment_size) + shost->max_segment_size = sht->max_segment_size; +else + shost->max_segment_size =BLK_MAX_SEGMENT_SIZE ; +/* * assume a 4GB boundary, if not set */ drivers/scsi/scsi_debug.c +1
-1@@ -3973,7 +3973,6 @@ static int scsi_debug_slave_configure(struct scsi_device *sdp)return 1 ;/* no resources, will be marked offline */ } sdp->hostdata = devip; -blk_queue_max_segment_size (sdp->request_queue,-1U );if (sdebug_no_uld) sdp->no_uld_attach =1 ;config_cdb_len (sdp);@@ -5851,6 +5850,7 @@ static struct scsi_host_template sdebug_driver_template = { .sg_tablesize = SG_MAX_SEGMENTS, .cmd_per_lun = DEF_CMD_PER_LUN, .max_sectors = -1U, + .max_segment_size = -1U, .module = THIS_MODULE, .track_queue_depth = 1, };drivers/scsi/scsi_lib.c +2
-1@@ -2227,7 +2227,8 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)blk_queue_segment_boundary (q, shost->dma_boundary);dma_set_seg_boundary (dev, shost->dma_boundary); -blk_queue_max_segment_size (q,dma_get_max_seg_size (dev)); +blk_queue_max_segment_size (q, +min (shost->max_segment_size,dma_get_max_seg_size (dev)));if (shost->use_clustering ==DISABLE_CLUSTERING ) q->limits.cluster =0 ;include/scsi/scsi_host.h +6
-0@@ -364,6 +364,11 @@ struct scsi_host_template {*/ unsigned int max_sectors; +/* +* Maximum size in bytes of a single segment. +*/ +unsigned int max_segment_size; +/* * DMA scatter gather segment boundary limit. A segment crossing this * boundary will be split in two. @@ -603,6 +608,7 @@ struct Scsi_Host {short unsigned int sg_tablesize;short unsigned int sg_prot_tablesize;unsigned int max_sectors; +unsigned int max_segment_size;unsigned long dma_boundary;/* * In scsi-mq mode, the number of hardware queues supported by the LLD. Signature · 1 line
2.19.1
Just one concern, max segment size is often related with one specific controller's DMA capability.
Is it possible that HBAs have different segment size, but all are driven by same driver(shared scsi_host_template)?
If yes, this way may not be a correct abstract, at least defining 'max_segment_size' from 'scsi_host_template'.
Thanks,
Ming
Re: [PATCH 2/9] scsi: introduce a max_segment_size host_template parameters
Quoted 5 lines · Ming Lei
Just one concern, max segment size is often related with one specific controller's DMA capability.
Is it possible that HBAs have different segment size, but all are driven by same
driver(shared scsi_host_template)?
It is support just like most other attributes - by having one variable in the host template and one in the host, allowing the driver to override the per-host one between scsi_host_alloc and scsi_add_host.
PATCH 3/9 myrb: remove the DISABLE_CLUSTERING flag
In reply to Christoph HellwigThe old DAC960 drivers was fine with merging over segment bondaries, so this new driver should be to.
--- drivers/scsi/myrb.c | 1 - 1 file changed, 1 deletion(-)
drivers/scsi/myrb.c +0 -1
@@ -2236,7 +2236,6 @@ struct scsi_host_template myrb_template = { .shost_attrs = myrb_shost_attrs, .sdev_attrs = myrb_sdev_attrs, .this_id = -1, - .use_clustering = DISABLE_CLUSTERING, };/**
Signature · 1 line
2.19.1
PATCH 4/9 myrs: remove the DISABLE_CLUSTERING flag
In reply to Christoph HellwigThe old DAC960 drivers was fine with merging over segment bondaries, so this new driver should be to.
--- drivers/scsi/myrs.c | 1 - 1 file changed, 1 deletion(-)
drivers/scsi/myrs.c +0 -1
@@ -1929,7 +1929,6 @@ struct scsi_host_template myrs_template = { .shost_attrs = myrs_shost_attrs, .sdev_attrs = myrs_sdev_attrs, .this_id = -1, - .use_clustering = DISABLE_CLUSTERING, }; static struct myrs_hba *myrs_alloc_host(struct pci_dev *pdev,
Signature · 1 line
2.19.1
PATCH 5/9 xen-scsifront: remove DISABLE_CLUSTERING
In reply to Christoph HellwigThere is no such limitation in the protocol or implementation, so remove it.
--- drivers/scsi/xen-scsifront.c | 1 - 1 file changed, 1 deletion(-)
drivers/scsi/xen-scsifront.c +0 -1
@@ -696,7 +696,6 @@ static struct scsi_host_template scsifront_sht = { .this_id = -1, .cmd_size = sizeof(struct vscsifrnt_shadow), .sg_tablesize = VSCSIIF_SG_TABLESIZE, - .use_clustering = DISABLE_CLUSTERING, .proc_name = "scsifront", };
Signature · 1 line
2.19.1
PATCH 6/9 mesh: remove DISABLE_CLUSTERING
In reply to Christoph Hellwigmesh has no limitations on crossing pages for segments. Just make the 65535 byte segment size limit explicit, even if it matches the current block layer limit.
--- drivers/scsi/mesh.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/mesh.c +1 -1
@@ -1838,7 +1838,7 @@ static struct scsi_host_template mesh_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = 65535, };static int mesh_probe (struct macio_dev *mdev,const struct of_device_id *match)
Signature · 1 line
2.19.1
Re: [PATCH 6/9] mesh: remove DISABLE_CLUSTERING
Quoted 5 lines · Christoph Hellwig
mesh has no limitations on crossing pages for segments. Just make the 65535 byte segment size limit explicit, even if it matches the current block layer limit.
Signed-off-by Christoph Hellwig <[email protected]>
PATCH 7/9 mac53c94: remove DISABLE_CLUSTERING
In reply to Christoph Hellwigmac53c94 has no limitations on crossing pages for segments. Just make the 65535 byte segment size limit explicit, even if it matches the current block layer limit.
--- drivers/scsi/mac53c94.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/mac53c94.c +1 -1
@@ -403,7 +403,7 @@ static struct scsi_host_template mac53c94_template = { .can_queue = 1, .this_id = 7, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = 65535, };static int mac53c94_probe (struct macio_dev *mdev,const struct of_device_id *match)
Signature · 1 line
2.19.1
Re: [PATCH 7/9] mac53c94: remove DISABLE_CLUSTERING
Quoted 5 lines · Christoph Hellwig
mac53c94 has no limitations on crossing pages for segments. Just make the 65535 byte segment size limit explicit, even if it matches the current block layer limit.
Signed-off-by Christoph Hellwig <[email protected]>
PATCH 8/9 scsi: remove the use_clustering flag
In reply to Christoph HellwigThe same effects can be archived by setting the dma_boundary to PAGE_SIZE - 1 and the max_segment_size to PAGE_SIZE, so shift those settings into the drivers. Note that in many cases the setting might be bogus, but this keeps the status quo.
--- Documentation/scsi/scsi_mid_low_api.txt | 2 -- arch/ia64/hp/sim/simscsi.c | 3 ++- drivers/scsi/a2091.c | 3 ++- drivers/scsi/advansys.c | 4 ++-- drivers/scsi/aha152x.c | 3 ++- drivers/scsi/arm/acornscsi.c | 3 ++- drivers/scsi/arm/arxescsi.c | 3 ++- drivers/scsi/arm/cumana_1.c | 3 ++- drivers/scsi/arm/cumana_2.c | 3 ++- drivers/scsi/arm/eesox.c | 3 ++- drivers/scsi/arm/oak.c | 3 ++- drivers/scsi/atari_scsi.c | 3 ++- drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 3 ++- drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 3 ++- drivers/scsi/dc395x.c | 3 ++- drivers/scsi/dmx3191d.c | 3 ++- drivers/scsi/g_NCR5380.c | 3 ++- drivers/scsi/gvp11.c | 3 ++- drivers/scsi/hosts.c | 1 - drivers/scsi/ips.c | 1 - drivers/scsi/iscsi_tcp.c | 3 ++- drivers/scsi/mac_esp.c | 3 ++- drivers/scsi/mac_scsi.c | 3 ++- drivers/scsi/mvumi.c | 3 ++- drivers/scsi/nsp32.c | 3 ++- drivers/scsi/pcmcia/nsp_cs.c | 3 ++- drivers/scsi/pcmcia/qlogic_stub.c | 3 ++- drivers/scsi/qlogicfas.c | 3 ++- drivers/scsi/scsi_debug.c | 6 ++++-- drivers/scsi/scsi_lib.c | 3 --- drivers/scsi/sgiwd93.c | 3 ++- drivers/scsi/stex.c | 3 ++- drivers/scsi/sun3_scsi.c | 3 ++- drivers/scsi/ufs/ufshcd.c | 3 ++- drivers/target/loopback/tcm_loop.c | 3 ++- drivers/usb/storage/uas.c | 3 ++- include/scsi/scsi_host.h | 13 ------------- 37 files changed, 66 insertions(+), 54 deletions(-)
Documentation/scsi/scsi_mid_low_api.txt +0 -2
@@ -1098,8 +1098,6 @@ of interest: unchecked_isa_dma - 1=>only use bottom 16 MB of ram (ISA DMA addressing restriction), 0=>can use full 32 bit (or better) DMA address space - use_clustering - 1=>SCSI commands in mid level's queue can be merged, - 0=>disallow SCSI command merging no_async_abort - 1=>Asynchronous aborts are not supported 0=>Timed-out commands will be aborted asynchronously hostt - pointer to driver's struct scsi_host_template from which
arch/ia64/hp/sim/simscsi.c +2 -1
@@ -347,7 +347,8 @@ static struct scsi_host_template driver_template = { .sg_tablesize = SG_ALL, .max_sectors = 1024, .cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, }; static int __init
drivers/scsi/a2091.c +2 -1
@@ -160,7 +160,8 @@ static struct scsi_host_template a2091_scsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = CMD_PER_LUN, - .use_clustering = DISABLE_CLUSTERING + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static int a2091_probe (struct zorro_dev *z,const struct zorro_device_id *ent)
drivers/scsi/advansys.c +2 -2
@@ -3192,8 +3192,8 @@ static void asc_prt_driver_conf(struct seq_file *m, struct Scsi_Host *shost) shost->sg_tablesize, shost->cmd_per_lun);seq_printf (m, -" unchecked_isa_dma %d, use_clustering %d\n" , - shost->unchecked_isa_dma, shost->use_clustering); +" unchecked_isa_dma %d\n" , + shost->unchecked_isa_dma); seq_printf(m, " flags 0x%x, last_reset 0x%lx, jiffies 0x%lx, asc_n_io_port 0x%x\n",
drivers/scsi/aha152x.c +2 -1
@@ -2920,7 +2920,8 @@ static struct scsi_host_template aha152x_driver_template = { .can_queue = 1, .this_id = 7, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .slave_alloc = aha152x_adjust_queue, };
drivers/scsi/arm/acornscsi.c +2 -1
@@ -2890,7 +2890,8 @@ static struct scsi_host_template acornscsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .proc_name = "acornscsi", };
drivers/scsi/arm/arxescsi.c +2 -1
@@ -245,7 +245,8 @@ static struct scsi_host_template arxescsi_template = { .can_queue = 0, .this_id = 7, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .proc_name = "arxescsi", };
drivers/scsi/arm/cumana_1.c +2 -1
@@ -221,10 +221,11 @@ static struct scsi_host_template cumanascsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, .proc_name = "CumanaSCSI-1", .cmd_size = NCR5380_CMD_SIZE, .max_sectors = 128, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, }; static int cumanascsi1_probe(struct expansion_card *ec,
drivers/scsi/arm/cumana_2.c +2 -1
@@ -367,7 +367,8 @@ static struct scsi_host_template cumanascsi2_template = { .this_id = 7, .sg_tablesize = SG_MAX_SEGMENTS, .dma_boundary = IOMD_DMA_BOUNDARY, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .proc_name = "cumanascsi2", };
drivers/scsi/arm/eesox.c +2 -1
@@ -486,7 +486,8 @@ static struct scsi_host_template eesox_template = { .this_id = 7, .sg_tablesize = SG_MAX_SEGMENTS, .dma_boundary = IOMD_DMA_BOUNDARY, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .proc_name = "eesox", };
drivers/scsi/arm/oak.c +2 -1
@@ -110,7 +110,8 @@ static struct scsi_host_template oakscsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .proc_name = "oakscsi", .cmd_size = NCR5380_CMD_SIZE, .max_sectors = 128,
drivers/scsi/atari_scsi.c +2 -1
@@ -714,7 +714,8 @@ static struct scsi_host_template atari_scsi_template = { .eh_host_reset_handler = atari_scsi_host_reset, .this_id = 7, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, };
drivers/scsi/cxgbi/cxgb3i/cxgb3i.c +2 -1
@@ -95,7 +95,8 @@ static struct scsi_host_template cxgb3i_host_template = { .eh_device_reset_handler = iscsi_eh_device_reset, .eh_target_reset_handler = iscsi_eh_recover_target, .target_alloc = iscsi_target_alloc, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .this_id = -1, .track_queue_depth = 1, };
drivers/scsi/cxgbi/cxgb4i/cxgb4i.c +2 -1
@@ -113,7 +113,8 @@ static struct scsi_host_template cxgb4i_host_template = { .eh_device_reset_handler = iscsi_eh_device_reset, .eh_target_reset_handler = iscsi_eh_recover_target, .target_alloc = iscsi_target_alloc, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .this_id = -1, .track_queue_depth = 1, };
drivers/scsi/dc395x.c +2 -1
@@ -4631,7 +4631,8 @@ static struct scsi_host_template dc395x_driver_template = { .cmd_per_lun = DC395x_MAX_CMD_PER_LUN, .eh_abort_handler = dc395x_eh_abort, .eh_bus_reset_handler = dc395x_eh_bus_reset, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };
drivers/scsi/dmx3191d.c +2 -1
@@ -63,7 +63,8 @@ static struct scsi_host_template dmx3191d_driver_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, };
drivers/scsi/g_NCR5380.c +2 -1
@@ -700,7 +700,8 @@ static struct scsi_host_template driver_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, .max_sectors = 128, };
drivers/scsi/gvp11.c +2 -1
@@ -184,7 +184,8 @@ static struct scsi_host_template gvp11_scsi_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = CMD_PER_LUN, - .use_clustering = DISABLE_CLUSTERING + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static int check_wd33c93 (struct gvp11_scsiregs *regs)
drivers/scsi/hosts.c +0 -1
@@ -431,7 +431,6 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize) shost->sg_prot_tablesize = sht->sg_prot_tablesize; shost->cmd_per_lun = sht->cmd_per_lun; shost->unchecked_isa_dma = sht->unchecked_isa_dma; - shost->use_clustering = sht->use_clustering; shost->no_write_same = sht->no_write_same;if (shost_eh_deadline ==-1 || !sht->eh_host_reset_handler)
drivers/scsi/ips.c +0 -1
@@ -6677,7 +6677,6 @@ ips_register_scsi(int index) sh->sg_tablesize = sh->hostt->sg_tablesize; sh->can_queue = sh->hostt->can_queue; sh->cmd_per_lun = sh->hostt->cmd_per_lun; - sh->use_clustering = sh->hostt->use_clustering; sh->max_sectors =128 ; sh->max_id = ha->ntargets;
drivers/scsi/iscsi_tcp.c +2 -1
@@ -980,7 +980,8 @@ static struct scsi_host_template iscsi_sw_tcp_sht = { .eh_abort_handler = iscsi_eh_abort, .eh_device_reset_handler= iscsi_eh_device_reset, .eh_target_reset_handler = iscsi_eh_recover_target, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .slave_alloc = iscsi_sw_tcp_slave_alloc, .slave_configure = iscsi_sw_tcp_slave_configure, .target_alloc = iscsi_target_alloc,
drivers/scsi/mac_esp.c +2 -1
@@ -307,7 +307,8 @@ static int esp_mac_probe(struct platform_device *dev) goto fail; host->max_id =8 ; - host->use_clustering =DISABLE_CLUSTERING ; + host->max_segment_size =PAGE_SIZE ; + host->dma_boundary =PAGE_SIZE -1 ; esp =shost_priv (host); esp->host = host;
drivers/scsi/mac_scsi.c +2 -1
@@ -333,7 +333,8 @@ static struct scsi_host_template mac_scsi_template = { .this_id = 7, .sg_tablesize = 1, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, .max_sectors = 128, };
drivers/scsi/mvumi.c +2 -1
@@ -2197,7 +2197,8 @@ static struct scsi_host_template mvumi_template = { .eh_timed_out = mvumi_timed_out, .eh_host_reset_handler = mvumi_host_reset, .bios_param = mvumi_bios_param, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .this_id = -1, };
drivers/scsi/nsp32.c +2 -1
@@ -274,7 +274,8 @@ static struct scsi_host_template nsp32_template = { .sg_tablesize = NSP32_SG_SIZE, .max_sectors = 128, .this_id = NSP32_HOST_SCSIID, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .eh_abort_handler = nsp32_eh_abort, .eh_host_reset_handler = nsp32_eh_host_reset,/* .highmem_io = 1, */
drivers/scsi/pcmcia/nsp_cs.c +2 -1
@@ -86,7 +86,8 @@ static struct scsi_host_template nsp_driver_template = { .can_queue = 1, .this_id = NSP_INITIATOR_ID, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static nsp_hw_data nsp_data_base;/* attach <-> detect glue */
drivers/scsi/pcmcia/qlogic_stub.c +2 -1
@@ -72,7 +72,8 @@ static struct scsi_host_template qlogicfas_driver_template = { .can_queue = 1, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };/*====================================================================*/
drivers/scsi/qlogicfas.c +2 -1
@@ -193,7 +193,8 @@ static struct scsi_host_template qlogicfas_driver_template = { .can_queue = 1, .this_id = -1, .sg_tablesize = SG_ALL, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static __init int qlogicfas_init (void )
drivers/scsi/scsi_debug.c +4 -2
@@ -5865,8 +5865,10 @@ static int sdebug_driver_probe(struct device *dev) sdbg_host =to_sdebug_host (dev); sdebug_driver_template.can_queue = sdebug_max_queue; -if (!sdebug_clustering) - sdebug_driver_template.use_clustering =DISABLE_CLUSTERING ; +if (!sdebug_clustering) { + sdebug_driver_template.max_segment_size =PAGE_SIZE ; + sdebug_driver_template.dma_boundary =PAGE_SIZE -1 ; + } hpnt =scsi_host_alloc (&sdebug_driver_template,sizeof (sdbg_host));if (NULL == hpnt) {pr_err ("scsi_host_alloc failed\n" );
drivers/scsi/scsi_lib.c +0 -3
@@ -2230,9 +2230,6 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)blk_queue_max_segment_size (q,min (shost->max_segment_size,dma_get_max_seg_size (dev))); -if (shost->use_clustering ==DISABLE_CLUSTERING ) - q->limits.cluster =0 ; -/* * Set a reasonable default alignment: The larger of 32-byte (dword), * which is a common minimum for HBAs, and the minimum DMA alignment,
drivers/scsi/sgiwd93.c +2 -1
@@ -208,7 +208,8 @@ static struct scsi_host_template sgiwd93_template = { .this_id = 7, .sg_tablesize = SG_ALL, .cmd_per_lun = 8, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static int sgiwd93_probe (struct platform_device *pdev)
drivers/scsi/stex.c +2 -1
@@ -1489,7 +1489,8 @@ static struct scsi_host_template driver_template = { .eh_abort_handler = stex_abort, .eh_host_reset_handler = stex_reset, .this_id = -1, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, };static struct pci_device_id stex_pci_tbl[] = {
drivers/scsi/sun3_scsi.c +2 -1
@@ -500,7 +500,8 @@ static struct scsi_host_template sun3_scsi_template = { .this_id = 7, .sg_tablesize = SG_NONE, .cmd_per_lun = 2, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, };
drivers/scsi/ufs/ufshcd.c +2 -1
@@ -6985,7 +6985,8 @@ static struct scsi_host_template ufshcd_driver_template = { .max_host_blocked = 1, .track_queue_depth = 1, .sdev_groups = ufshcd_driver_groups, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, }; static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg,
drivers/target/loopback/tcm_loop.c +2 -1
@@ -324,7 +324,8 @@ static struct scsi_host_template tcm_loop_driver_template = { .sg_tablesize = 256, .cmd_per_lun = 1024, .max_sectors = 0xFFFF, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, .slave_alloc = tcm_loop_slave_alloc, .module = THIS_MODULE, .track_queue_depth = 1,
drivers/usb/storage/uas.c +2 -1
@@ -879,7 +879,8 @@ static struct scsi_host_template uas_host_template = { .this_id = -1, .sg_tablesize = SG_NONE, .skip_settle_delay = 1, - .use_clustering = DISABLE_CLUSTERING, + .max_segment_size = PAGE_SIZE, + .dma_boundary = PAGE_SIZE - 1, }; #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
include/scsi/scsi_host.h +0 -13
@@ -44,8 +44,6 @@ struct blk_queue_tags;#define MODE_INITIATOR 0x01#define MODE_TARGET 0x02 -#define DISABLE_CLUSTERING (-1) -struct scsi_host_template {struct module *module;const char *name;
@@ -418,16 +416,6 @@ struct scsi_host_template {*/ unsigned unchecked_isa_dma:1; -/* -* True if this host adapter can make good use of clustering. -* I originally thought that if the tablesize was large that it -* was a waste of CPU cycles to prepare a cluster list, but -* it works out that the Buslogic is faster if you use a smaller -* number of segments (i.e. use clustering). I guess it is -* inefficient. -*/ - unsigned use_clustering:1; -/* * True for emulated SCSI host adapters (e.g. ATAPI). */
@@ -626,7 +614,6 @@ struct Scsi_Host { unsigned active_mode:2; unsigned unchecked_isa_dma:1; - unsigned use_clustering:1;/* * Host has requested that no further requests come through for the
Signature · 1 line
2.19.1
Bart Van Assche
maintainerRe: [PATCH 8/9] scsi: remove the use_clustering flag
Quoted 1 line · Christoph Hellwig
The same effects can be archived by setting the
dma_boundaryto
^^^^^^^^ achieved?
Quoted 3 lines
PAGE_SIZE- 1 and themax_segment_sizetoPAGE_SIZE, so shift those settings into the drivers. Note that in many cases the setting might be bogus, but this keeps the status quo.
[... ]> Documentation/scsi/scsi_mid_low_api.txt | 2 --
Quoted 29 lines
arch/ia64/hp/sim/simscsi.c | 3 +-+-- drivers/scsi/a2091.c | 3 +-+-- drivers/scsi/advansys.c | 4 +-+--- drivers/scsi/aha152x.c | 3 +-+-- drivers/scsi/arm/acornscsi.c | 3 +-+-- drivers/scsi/arm/arxescsi.c | 3 +-+-- drivers/scsi/arm/cumana_1.c | 3 +-+-- drivers/scsi/arm/cumana_2.c | 3 +-+-- drivers/scsi/arm/eesox.c | 3 +-+-- drivers/scsi/arm/oak.c | 3 +-+-- drivers/scsi/atari_scsi.c | 3 +-+-- drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 3 +-+-- drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 3 +-+-- drivers/scsi/dc395x.c | 3 +-+-- drivers/scsi/dmx3191d.c | 3 +-+-- drivers/scsi/g_NCR5380.c | 3 +-+-- drivers/scsi/gvp11.c | 3 +-+-- drivers/scsi/hosts.c | 1 - drivers/scsi/ips.c | 1 - drivers/scsi/iscsi_tcp.c | 3 +-+-- drivers/scsi/mac_esp.c | 3 +-+-- drivers/scsi/mac_scsi.c | 3 +-+-- drivers/scsi/mvumi.c | 3 +-+-- drivers/scsi/nsp32.c | 3 +-+-- drivers/scsi/pcmcia/nsp_cs.c | 3 +-+-- drivers/scsi/pcmcia/qlogic_stub.c | 3 +-+-- drivers/scsi/qlogicfas.c | 3 +-+-- drivers/scsi/scsi_debug.c | 6 +-+-+-+--- drivers/scsi/scsi_lib.c | 3 ---
Quoted 8 lines
drivers/scsi/sgiwd93.c | 3 +-+-- drivers/scsi/stex.c | 3 +-+-- drivers/scsi/sun3_scsi.c | 3 +-+-- drivers/scsi/ufs/ufshcd.c | 3 +-+-- drivers/target/loopback/tcm_loop.c | 3 +-+-- drivers/usb/storage/uas.c | 3 +-+-- include/scsi/scsi_host.h |13 ------------- 37 files changed, 66 insertions(+-), 54 deletions(-)
Please split this patch into two patches: one that affects SCSI LLD drivers and another patch that affects the SCSI core. That will make both reviewing and bisecting easier.
Thanks,
Bart.
Re: [PATCH 8/9] scsi: remove the use_clustering flag
Quoted 47 lines · Bart Van Assche
Quoted 1 line · Christoph Hellwig
The same effects can be archived by setting the
dma_boundaryto^^^^^^^^ achieved?Quoted 3 lines
PAGE_SIZE- 1 and themax_segment_sizetoPAGE_SIZE, so shift those settings into the drivers. Note that in many cases the setting might be bogus, but this keeps the status quo.[ ... ]
Quoted 30 lines
Documentation/scsi/scsi_mid_low_api.txt | 2 -- arch/ia64/hp/sim/simscsi.c | 3 ++- drivers/scsi/a2091.c | 3 ++- drivers/scsi/advansys.c | 4 ++-- drivers/scsi/aha152x.c | 3 ++- drivers/scsi/arm/acornscsi.c | 3 ++- drivers/scsi/arm/arxescsi.c | 3 ++- drivers/scsi/arm/cumana_1.c | 3 ++- drivers/scsi/arm/cumana_2.c | 3 ++- drivers/scsi/arm/eesox.c | 3 ++- drivers/scsi/arm/oak.c | 3 ++- drivers/scsi/atari_scsi.c | 3 ++- drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 3 ++- drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 3 ++- drivers/scsi/dc395x.c | 3 ++- drivers/scsi/dmx3191d.c | 3 ++- drivers/scsi/g_NCR5380.c | 3 ++- drivers/scsi/gvp11.c | 3 ++- drivers/scsi/hosts.c | 1 - drivers/scsi/ips.c | 1 - drivers/scsi/iscsi_tcp.c | 3 ++- drivers/scsi/mac_esp.c | 3 ++- drivers/scsi/mac_scsi.c | 3 ++- drivers/scsi/mvumi.c | 3 ++- drivers/scsi/nsp32.c | 3 ++- drivers/scsi/pcmcia/nsp_cs.c | 3 ++- drivers/scsi/pcmcia/qlogic_stub.c | 3 ++- drivers/scsi/qlogicfas.c | 3 ++- drivers/scsi/scsi_debug.c | 6 ++++-- drivers/scsi/scsi_lib.c | 3 ---Quoted 8 lines
drivers/scsi/sgiwd93.c | 3 ++- drivers/scsi/stex.c | 3 ++- drivers/scsi/sun3_scsi.c | 3 ++- drivers/scsi/ufs/ufshcd.c | 3 ++- drivers/target/loopback/tcm_loop.c | 3 ++- drivers/usb/storage/uas.c | 3 ++- include/scsi/scsi_host.h | 13 ------------- 37 files changed, 66 insertions(+), 54 deletions(-)
Quoted 3 lines
Please split this patch into two patches: one that affects SCSI LLD drivers and another patch that affects the SCSI core. That will make both reviewing and bisecting easier.
Just splitting it in two would not really help bisecting. We could split it into one per driver, but we rarely need to bisect which driver is affected, as that usually is pretty obvious.
PATCH 9/9 block: remove the cluster flag
In reply to Christoph HellwigNow that the the SCSI layer replaced the use of the cluster flag with segment size limits and the DMA boundary we can remove the cluster flag from the block layer.
--- block/blk-merge.c | 18 +++++++----------- block/blk-settings.c | 3 --- block/blk-sysfs.c | 5 +---- include/linux/blkdev.h | 6 ------ 4 files changed, 8 insertions(+), 24 deletions(-)
block/blk-merge.c +7 -11
@@ -194,7 +194,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q, goto split; } -if (bvprvp &&blk_queue_cluster (q)) { +if (bvprvp) {if (seg_size + bv.bv_len >queue_max_segment_size (q)) goto new_segment;if (!biovec_phys_mergeable (q, bvprvp, &bv))
@@ -294,7 +294,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q, bool no_sg_merge) {struct bio_vec bv, bvprv = {NULL }; -int cluster, prev =0 ; +int prev =0 ;unsigned int seg_size, nr_phys_segs;struct bio *fbio, *bbio;struct bvec_iter iter;
@@ -312,7 +312,6 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q, } fbio = bio; - cluster =blk_queue_cluster (q); seg_size =0 ; nr_phys_segs =0 ;for_each_bio (bio) {
@@ -324,7 +323,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,if (no_sg_merge) goto new_segment; -if (prev && cluster) { +if (prev) {if (seg_size + bv.bv_len >queue_max_segment_size (q)) goto new_segment;
@@ -395,9 +394,6 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio, {struct bio_vec end_bv = {NULL }, nxt_bv; -if (!blk_queue_cluster (q)) -return 0 ; -if (bio->bi_seg_back_size + nxt->bi_seg_front_size >queue_max_segment_size (q))return 0 ;
@@ -414,12 +410,12 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,static inline void __blk_segment_map_sg (struct request_queue *q,struct bio_vec *bvec,struct scatterlist *sglist,struct bio_vec *bvprv, -struct scatterlist **sg,int *nsegs,int *cluster) +struct scatterlist **sg,int *nsegs) {int nbytes = bvec->bv_len; -if (*sg && *cluster) { +if (*sg) {if ((*sg)->length + nbytes >queue_max_segment_size (q)) goto new_segment;if (!biovec_phys_mergeable (q, bvprv, bvec))
@@ -465,12 +461,12 @@ static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio, {struct bio_vec bvec, bvprv = {NULL };struct bvec_iter iter; -int cluster =blk_queue_cluster (q), nsegs =0 ; +int nsegs =0 ;for_each_bio (bio)bio_for_each_segment (bvec, bio, iter)__blk_segment_map_sg (q, &bvec, sglist, &bvprv, sg, - &nsegs, &cluster); + &nsegs);return nsegs; }
block/blk-settings.c +0 -3
@@ -109,7 +109,6 @@ void blk_set_default_limits(struct queue_limits *lim) lim->alignment_offset =0 ; lim->io_opt =0 ; lim->misaligned =0 ; - lim->cluster =1 ; lim->zoned =BLK_ZONED_NONE ; }EXPORT_SYMBOL (blk_set_default_limits);
@@ -602,8 +601,6 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, t->io_min =max (t->io_min, b->io_min); t->io_opt =lcm_not_zero (t->io_opt, b->io_opt); - t->cluster &= b->cluster; -/* Physical block size a multiple of the logical block size? */ if (t->physical_block_size & (t->logical_block_size -1 )) { t->physical_block_size = t->logical_block_size;
block/blk-sysfs.c +1 -4
@@ -136,10 +136,7 @@ static ssize_t queue_max_integrity_segments_show(struct request_queue *q, char *static ssize_t queue_max_segment_size_show (struct request_queue *q,char *page) { -if (blk_queue_cluster (q)) -return queue_var_show (queue_max_segment_size (q), (page)); - -return queue_var_show (PAGE_SIZE , (page)); +return queue_var_show (queue_max_segment_size (q), (page)); }static ssize_t queue_logical_block_size_show (struct request_queue *q,char *page)
include/linux/blkdev.h +0 -6
@@ -389,7 +389,6 @@ struct queue_limits {unsigned char misaligned;unsigned char discard_misaligned; -unsigned char cluster;unsigned char raid_partial_stripes_expensive;enum blk_zoned_model zoned; };
@@ -785,11 +784,6 @@ static inline bool queue_is_rq_based(struct request_queue *q)return q->request_fn || q->mq_ops; } -static inline unsigned int blk_queue_cluster (struct request_queue *q) -{ -return q->limits.cluster; -} -static inline enum blk_zoned_model blk_queue_zoned_model (struct request_queue *q) {
Signature · 1 line
2.19.1