{
        int retval = -ENOMEM;
 
+       if (zfcp_experimental_dix)
+               pr_warn("DIX is enabled. It is experimental and might cause problems\n");
+
        zfcp_fsf_qtcb_cache = zfcp_cache_hw_align("zfcp_fsf_qtcb",
                                                  sizeof(struct fsf_qtcb));
        if (!zfcp_fsf_qtcb_cache)
 
 extern void zfcp_qdio_siosl(struct zfcp_adapter *);
 
 /* zfcp_scsi.c */
+extern bool zfcp_experimental_dix;
 extern struct scsi_transport_template *zfcp_scsi_transport_template;
 extern int zfcp_scsi_adapter_register(struct zfcp_adapter *);
 extern void zfcp_scsi_adapter_unregister(struct zfcp_adapter *);
 
 
 static bool enable_dif;
 module_param_named(dif, enable_dif, bool, 0400);
-MODULE_PARM_DESC(dif, "Enable DIF/DIX data integrity support");
+MODULE_PARM_DESC(dif, "Enable DIF data integrity support (default off)");
+
+bool zfcp_experimental_dix;
+module_param_named(dix, zfcp_experimental_dix, bool, 0400);
+MODULE_PARM_DESC(dix, "Enable experimental DIX (data integrity extension) support which implies DIF support (default off)");
 
 static bool allow_lun_scan = true;
 module_param(allow_lun_scan, bool, 0600);
        data_div = atomic_read(&adapter->status) &
                   ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED;
 
-       if (enable_dif &&
+       if ((enable_dif || zfcp_experimental_dix) &&
            adapter->adapter_features & FSF_FEATURE_DIF_PROT_TYPE1)
                mask |= SHOST_DIF_TYPE1_PROTECTION;
 
-       if (enable_dif && data_div &&
+       if (zfcp_experimental_dix && data_div &&
            adapter->adapter_features & FSF_FEATURE_DIX_PROT_TCPIP) {
                mask |= SHOST_DIX_TYPE1_PROTECTION;
                scsi_host_set_guard(shost, SHOST_DIX_GUARD_IP);