--- x/drivers/nvme/target/fc.c +++ y/drivers/nvme/target/fc.c @@ -2915,23 +2915,26 @@ nvmet_fc_add_port(struct nvmet_port *por static void nvmet_fc_remove_port(struct nvmet_port *port) { - struct nvmet_fc_port_entry *pe = port->priv; + struct nvmet_fc_port_entry *pe; struct nvmet_fc_tgtport *tgtport = NULL; unsigned long flags; spin_lock_irqsave(&nvmet_fc_tgtlock, flags); - if (pe->tgtport && nvmet_fc_tgtport_get(pe->tgtport)) + pe = port->priv; + port->priv = NULL; + if (pe && pe->tgtport && nvmet_fc_tgtport_get(pe->tgtport)) tgtport = pe->tgtport; spin_unlock_irqrestore(&nvmet_fc_tgtlock, flags); - nvmet_fc_portentry_unbind(pe); - if (tgtport) { /* terminate any outstanding associations */ __nvmet_fc_free_assocs(tgtport); nvmet_fc_tgtport_put(tgtport); } + if (!pe) + return; + nvmet_fc_portentry_unbind(pe); kfree(pe); }