xcopy_lun = &dev->xcopy_lun;
        rcu_assign_pointer(xcopy_lun->lun_se_dev, dev);
-       init_completion(&xcopy_lun->lun_ref_comp);
        init_completion(&xcopy_lun->lun_shutdown_comp);
        INIT_LIST_HEAD(&xcopy_lun->lun_deve_list);
        INIT_LIST_HEAD(&xcopy_lun->lun_dev_link);
 
        }
        lun->unpacked_lun = unpacked_lun;
        atomic_set(&lun->lun_acl_count, 0);
-       init_completion(&lun->lun_ref_comp);
        init_completion(&lun->lun_shutdown_comp);
        INIT_LIST_HEAD(&lun->lun_deve_list);
        INIT_LIST_HEAD(&lun->lun_dev_link);
 
 }
 EXPORT_SYMBOL(target_wait_for_sess_cmds);
 
-static void target_lun_confirm(struct percpu_ref *ref)
-{
-       struct se_lun *lun = container_of(ref, struct se_lun, lun_ref);
-
-       complete(&lun->lun_ref_comp);
-}
-
+/*
+ * Prevent that new percpu_ref_tryget_live() calls succeed and wait until
+ * all references to the LUN have been released. Called during LUN shutdown.
+ */
 void transport_clear_lun_ref(struct se_lun *lun)
 {
-       /*
-        * Mark the percpu-ref as DEAD, switch to atomic_t mode, drop
-        * the initial reference and schedule confirm kill to be
-        * executed after one full RCU grace period has completed.
-        */
-       percpu_ref_kill_and_confirm(&lun->lun_ref, target_lun_confirm);
-       /*
-        * The first completion waits for percpu_ref_switch_to_atomic_rcu()
-        * to call target_lun_confirm after lun->lun_ref has been marked
-        * as __PERCPU_REF_DEAD on all CPUs, and switches to atomic_t
-        * mode so that percpu_ref_tryget_live() lookup of lun->lun_ref
-        * fails for all new incoming I/O.
-        */
-       wait_for_completion(&lun->lun_ref_comp);
-       /*
-        * The second completion waits for percpu_ref_put_many() to
-        * invoke ->release() after lun->lun_ref has switched to
-        * atomic_t mode, and lun->lun_ref.count has reached zero.
-        *
-        * At this point all target-core lun->lun_ref references have
-        * been dropped via transport_lun_remove_cmd(), and it's safe
-        * to proceed with the remaining LUN shutdown.
-        */
+       percpu_ref_kill(&lun->lun_ref);
        wait_for_completion(&lun->lun_shutdown_comp);
 }
 
 
        struct scsi_port_stats  lun_stats;
        struct config_group     lun_group;
        struct se_port_stat_grps port_stat_grps;
-       struct completion       lun_ref_comp;
        struct completion       lun_shutdown_comp;
        struct percpu_ref       lun_ref;
        struct list_head        lun_dev_link;