*/
                                        if (!(eflags & NVMF_DISC_EFLAGS_EPCSD))
                                                disconnect = true;
+                                       else
+                                               disconnect = false;
                                }
 
                                set_discovery_kato(defcfg);
                                if (discover)
                                        __discover(child, defcfg, raw,
                                                   true, persistent, flags);
+
                                if (disconnect) {
                                        nvme_disconnect_ctrl(child);
                                        nvme_free_ctrl(child);
                        goto next;
 
                __discover(c, &cfg, raw, connect, persistent, flags);
-               if (!persistent)
+               if (!(persistent || nvme_ctrl_is_unique_discovery_ctrl(c)))
                        ret = nvme_disconnect_ctrl(c);
                nvme_free_ctrl(c);
 
                                continue;
 
                        __discover(cn, &cfg, raw, connect, persistent, flags);
-                       if (!persistent)
+                       if (!(persistent || nvme_ctrl_is_unique_discovery_ctrl(cn)))
                                ret = nvme_disconnect_ctrl(cn);
                        nvme_free_ctrl(cn);
                }
                }
        }
 
-       ret = __discover(c, &cfg, raw, connect,
-                        persistent, flags);
-       if (!persistent)
+       ret = __discover(c, &cfg, raw, connect, persistent, flags);
+       if (!(persistent || nvme_ctrl_is_unique_discovery_ctrl(c)))
                nvme_disconnect_ctrl(c);
        nvme_free_ctrl(c);