static struct nvme_fc_lport *
-nvme_fc_attach_to_unreg_lport(struct nvme_fc_port_info *pinfo)
+nvme_fc_attach_to_unreg_lport(struct nvme_fc_port_info *pinfo,
+                       struct nvme_fc_port_template *ops,
+                       struct device *dev)
 {
        struct nvme_fc_lport *lport;
        unsigned long flags;
                    lport->localport.port_name != pinfo->port_name)
                        continue;
 
+               if (lport->dev != dev) {
+                       lport = ERR_PTR(-EXDEV);
+                       goto out_done;
+               }
+
                if (lport->localport.port_state != FC_OBJSTATE_DELETED) {
                        lport = ERR_PTR(-EEXIST);
                        goto out_done;
 
                /* resume the lport */
 
+               lport->ops = ops;
                lport->localport.port_role = pinfo->port_role;
                lport->localport.port_id = pinfo->port_id;
                lport->localport.port_state = FC_OBJSTATE_ONLINE;
         * expired, we can simply re-enable the localport. Remoteports
         * and controller reconnections should resume naturally.
         */
-       newrec = nvme_fc_attach_to_unreg_lport(pinfo);
+       newrec = nvme_fc_attach_to_unreg_lport(pinfo, template, dev);
 
        /* found an lport, but something about its state is bad */
        if (IS_ERR(newrec)) {