I was a bit surprised that running:
nvme disconnect -d /dev/nvme1
actually disconnected nvme0 and I could never disconnect nvme1. Turns
out the code was not expecting a full path and silently used instance
zero if it failed to parse any arguments.
This patch fixes it so that it ignores any path component and fails if
sscanf doesn't match any items.
#include <asm/byteorder.h>
#include <inttypes.h>
#include <linux/types.h>
+#include <libgen.h>
#include "parser.h"
#include "nvme-ioctl.h"
int instance;
int ret;
+ device = basename(device);
ret = sscanf(device, "nvme%d", &instance);
if (ret < 0)
return ret;
+ if (!ret)
+ return -1;
return remove_ctrl(instance);
}