cancel_work_sync(&adapter->scan_work);
        cancel_work_sync(&adapter->stat_work);
+       cancel_delayed_work_sync(&adapter->nsp.work);
        zfcp_adapter_scsi_unregister(adapter);
        sysfs_remove_group(&adapter->ccw_device->dev.kobj,
                           &zfcp_sysfs_adapter_attrs);
 
        port->erp_action.step = ZFCP_ERP_STEP_NAMESERVER_LOOKUP;
        if (retval)
                zfcp_erp_notify(&port->erp_action, ZFCP_ERP_FAILED);
-
+       zfcp_port_put(port);
 }
 
 static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
                if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
                        return zfcp_erp_open_ptp_port(act);
                if (!port->d_id) {
-                       queue_work(zfcp_data.work_queue, &port->gid_pn_work);
+                       zfcp_port_get(port);
+                       if (!queue_work(zfcp_data.work_queue,
+                                       &port->gid_pn_work))
+                               zfcp_port_put(port);
                        return ZFCP_ERP_CONTINUES;
                }
        case ZFCP_ERP_STEP_NAMESERVER_LOOKUP:
        atomic_set_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status);
        INIT_WORK(&p->work, zfcp_erp_scsi_scan);
        p->unit = unit;
-       queue_work(zfcp_data.work_queue, &p->work);
+       if (!queue_work(zfcp_data.work_queue, &p->work))
+               zfcp_unit_put(unit);
 }
 
 static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)