if (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE)
                return 0;
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA)
                return 0;
 
        /*
        struct t10_alua_tg_pt_gp *tg_pt_gp;
        int primary, valid_states, rc = 0;
 
-       if (l_dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA)
+       if (l_dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA)
                return -ENODEV;
 
        valid_states = l_tg_pt_gp->tg_pt_gp_alua_supported_states;
        unsigned char buf[TG_PT_GROUP_NAME_BUF];
        int move = 0;
 
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ||
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ||
            (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE))
                return -ENODEV;
 
        unsigned long tmp;
        int ret;
 
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ||
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ||
            (dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE))
                return -ENODEV;
 
 
 int core_setup_alua(struct se_device *dev)
 {
-       if (!(dev->transport->transport_flags &
+       if (!(dev->transport_flags &
             TRANSPORT_FLAG_PASSTHROUGH_ALUA) &&
            !(dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE)) {
                struct t10_alua_lu_gp_member *lu_gp_mem;
 
 static ssize_t alua_support_show(struct config_item *item, char *page)
 {
        struct se_dev_attrib *da = to_attrib(item);
-       u8 flags = da->da_dev->transport->transport_flags;
+       u8 flags = da->da_dev->transport_flags;
 
        return snprintf(page, PAGE_SIZE, "%d\n",
                        flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ? 0 : 1);
 static ssize_t pgr_support_show(struct config_item *item, char *page)
 {
        struct se_dev_attrib *da = to_attrib(item);
-       u8 flags = da->da_dev->transport->transport_flags;
+       u8 flags = da->da_dev->transport_flags;
 
        return snprintf(page, PAGE_SIZE, "%d\n",
                        flags & TRANSPORT_FLAG_PASSTHROUGH_PGR ? 0 : 1);
        if (!dev->dev_attrib.emulate_pr)
                return sprintf(page, "SPC_RESERVATIONS_DISABLED\n");
 
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
                return sprintf(page, "Passthrough\n");
 
        spin_lock(&dev->dev_reservation_lock);
 
        if (!dev->dev_attrib.emulate_pr)
                return sprintf(page, "SPC_RESERVATIONS_DISABLED\n");
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
                return sprintf(page, "SPC_PASSTHROUGH\n");
        if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS)
                return sprintf(page, "SPC2_RESERVATIONS\n");
        struct se_device *dev = pr_to_dev(item);
 
        if (!dev->dev_attrib.emulate_pr ||
-           (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
+           (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
                return 0;
 
        return sprintf(page, "APTPL Bit Status: %s\n",
        struct se_device *dev = pr_to_dev(item);
 
        if (!dev->dev_attrib.emulate_pr ||
-           (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
+           (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
                return 0;
 
        return sprintf(page, "Ready to process PR APTPL metadata..\n");
        u8 type = 0;
 
        if (!dev->dev_attrib.emulate_pr ||
-           (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
+           (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR))
                return count;
        if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS)
                return count;
 
 
        dev->se_hba = hba;
        dev->transport = hba->backend->ops;
+       dev->transport_flags = dev->transport->transport_flags_default;
        dev->prot_length = sizeof(struct t10_pi_tuple);
        dev->hba_index = hba->hba_index;
 
         * emulate the response, since tcmu does not have the information
         * required to process these commands.
         */
-       if (!(dev->transport->transport_flags &
+       if (!(dev->transport_flags &
              TRANSPORT_FLAG_PASSTHROUGH_PGR)) {
                if (cdb[0] == PERSISTENT_RESERVE_IN) {
                        cmd->execute_cmd = target_scsi3_emulate_pr_in;
 
                return 0;
        if (!dev->dev_attrib.emulate_pr)
                return 0;
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR)
                return 0;
 
        spin_lock(&dev->dev_reservation_lock);
 
 static const struct target_backend_ops pscsi_ops = {
        .name                   = "pscsi",
        .owner                  = THIS_MODULE,
-       .transport_flags        = TRANSPORT_FLAG_PASSTHROUGH |
-                                 TRANSPORT_FLAG_PASSTHROUGH_ALUA |
-                                 TRANSPORT_FLAG_PASSTHROUGH_PGR,
+       .transport_flags_default = TRANSPORT_FLAG_PASSTHROUGH |
+                                  TRANSPORT_FLAG_PASSTHROUGH_ALUA |
+                                  TRANSPORT_FLAG_PASSTHROUGH_PGR,
        .attach_hba             = pscsi_attach_hba,
        .detach_hba             = pscsi_detach_hba,
        .pmode_enable_hba       = pscsi_pmode_enable_hba,
 
        if (ret)
                goto out_kill_ref;
 
-       if (!(dev->transport->transport_flags &
-            TRANSPORT_FLAG_PASSTHROUGH_ALUA) &&
+       if (!(dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA) &&
            !(dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE))
                target_attach_tg_pt_gp(lun, dev->t10_alua.default_tg_pt_gp);
 
 
         * Check if SAM Task Attribute emulation is enabled for this
         * struct se_device storage object
         */
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
                return 0;
 
        if (cmd->sam_task_attr == TCM_ACA_TAG) {
 {
        struct se_device *dev = cmd->se_dev;
 
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
                return false;
 
        cmd->se_cmd_flags |= SCF_TASK_ATTR_SET;
 {
        struct se_device *dev = cmd->se_dev;
 
-       if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
+       if (dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
                return;
 
        if (!(cmd->se_cmd_flags & SCF_TASK_ATTR_SET))
 
 static struct target_backend_ops tcmu_ops = {
        .name                   = "user",
        .owner                  = THIS_MODULE,
-       .transport_flags        = TRANSPORT_FLAG_PASSTHROUGH,
+       .transport_flags_default = TRANSPORT_FLAG_PASSTHROUGH,
        .attach_hba             = tcmu_attach_hba,
        .detach_hba             = tcmu_detach_hba,
        .alloc_device           = tcmu_alloc_device,
 
        char inquiry_rev[4];
        struct module *owner;
 
-       u8 transport_flags;
+       u8 transport_flags_default;
 
        int (*attach_hba)(struct se_hba *, u32);
        void (*detach_hba)(struct se_hba *);
 
 #define DF_USING_UDEV_PATH                     0x00000008
 #define DF_USING_ALIAS                         0x00000010
 #define DF_READ_ONLY                           0x00000020
+       u8                      transport_flags;
        /* Physical device queue depth */
        u32                     queue_depth;
        /* Used for SPC-2 reservations enforce of ISIDs */