With the series, 'modprobe -r nvme && modprobe nvme' is failing. I can get that to pass with the following: --- @@ -1904,7 +1907,11 @@ static void nvme_free_subsystem(struct device *dev) static void nvme_put_subsystem(struct nvme_subsystem *subsys) { put_device(&subsys->dev); + + if (list_empty(&subsys->ctrls)) + device_del(&subsys->dev); } static struct nvme_subsystem *__nvme_find_get_subsystem(const char *subsysnqn) -- But this is racy with nvme_init_subsystem, and it creates warnings: kernfs: can not remove 'uevent', no directory kernfs: can not remove 'online', no directory