Skip to content

Commit ed1d289

Browse files
lib: Gave blkdev and chardev checks platform agnostic names.
On Linux, controller devices are character devices, and namespace devices are block devices. This is not true on platforms like Windows. - Changed platform-specific libnvme_transport_handle_is_chardev and libnvme_transport_handle_is_blkdev to platform-agnostic libnvme_transport_handle_is_ctrl and libnvme_transport_handle_is_ns. This also helps to make the intent of the checks more clear. - Changed error messages to use platform-agnostic controller/namespace wording as well. Signed-off-by: Broc Going <[email protected]>
1 parent 9d12fd5 commit ed1d289

6 files changed

Lines changed: 50 additions & 47 deletions

File tree

libnvme/src/libnvme.ld

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,10 @@ LIBNVME_3 {
181181
libnvme_subsystem_release_fds;
182182
libnvme_transport_handle_get_fd;
183183
libnvme_transport_handle_get_name;
184-
libnvme_transport_handle_is_blkdev;
185-
libnvme_transport_handle_is_chardev;
184+
libnvme_transport_handle_is_ctrl;
186185
libnvme_transport_handle_is_direct;
187186
libnvme_transport_handle_is_mi;
187+
libnvme_transport_handle_is_ns;
188188
libnvme_transport_handle_set_decide_retry;
189189
libnvme_transport_handle_set_submit_entry;
190190
libnvme_transport_handle_set_submit_exit;

libnvme/src/nvme/lib.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -291,14 +291,14 @@ __public const char *libnvme_transport_handle_get_name(struct libnvme_transport_
291291
return basename(hdl->name);
292292
}
293293

294-
__public bool libnvme_transport_handle_is_blkdev(struct libnvme_transport_handle *hdl)
294+
__public bool libnvme_transport_handle_is_ctrl(struct libnvme_transport_handle *hdl)
295295
{
296-
return S_ISBLK(hdl->stat.st_mode);
296+
return S_ISCHR(hdl->stat.st_mode);
297297
}
298298

299-
__public bool libnvme_transport_handle_is_chardev(struct libnvme_transport_handle *hdl)
299+
__public bool libnvme_transport_handle_is_ns(struct libnvme_transport_handle *hdl)
300300
{
301-
return S_ISCHR(hdl->stat.st_mode);
301+
return S_ISBLK(hdl->stat.st_mode);
302302
}
303303

304304
__public bool libnvme_transport_handle_is_direct(struct libnvme_transport_handle *hdl)

libnvme/src/nvme/lib.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,29 +109,21 @@ const char *libnvme_transport_handle_get_name(
109109
struct libnvme_transport_handle *hdl);
110110

111111
/**
112-
* libnvme_transport_handle_is_blkdev - Check if transport handle is a
113-
* block device
112+
* libnvme_transport_handle_is_ctrl - Check if transport handle is a
113+
* controller device
114114
* @hdl: Transport handle
115115
*
116-
* Return: Return true if transport handle is a block device, otherwise false.
117-
*/
118-
bool libnvme_transport_handle_is_blkdev(struct libnvme_transport_handle *hdl);
119-
120-
/**
121-
* libnvme_transport_handle_is_chardev - Check if transport handle is a
122-
* char device
123-
* @hdl: Transport handle
124-
*
125-
* Return: Return true if transport handle is a char device, otherwise false.
116+
* Return: Return true if transport handle is a controller device,
117+
* otherwise false.
126118
*/
127-
bool libnvme_transport_handle_is_chardev(struct libnvme_transport_handle *hdl);
119+
bool libnvme_transport_handle_is_ctrl(struct libnvme_transport_handle *hdl);
128120

129121
/**
130122
* libnvme_transport_handle_is_direct - Check if transport handle is using IOCTL
131123
* interface
132124
* @hdl: Transport handle
133125
*
134-
* Return: Return true if transport handle is using IOCTL itnerface,
126+
* Return: Return true if transport handle is using IOCTL interface,
135127
* otherwise false.
136128
*/
137129
bool libnvme_transport_handle_is_direct(struct libnvme_transport_handle *hdl);
@@ -146,6 +138,16 @@ bool libnvme_transport_handle_is_direct(struct libnvme_transport_handle *hdl);
146138
*/
147139
bool libnvme_transport_handle_is_mi(struct libnvme_transport_handle *hdl);
148140

141+
/**
142+
* libnvme_transport_handle_is_ns - Check if transport handle is a
143+
* namespace device
144+
* @hdl: Transport handle
145+
*
146+
* Return: Return true if transport handle is a namespace device,
147+
* otherwise false.
148+
*/
149+
bool libnvme_transport_handle_is_ns(struct libnvme_transport_handle *hdl);
150+
149151
/**
150152
* libnvme_transport_handle_set_submit_entry() - Install a submit-entry callback
151153
* @hdl: Transport handle to configure

nvme.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ static const char *mo = "management operation";
212212
static const char *namespace_desired = "desired namespace";
213213
static const char *namespace_id_optional = "optional namespace attached to controller";
214214
static const char *nssf = "NVMe Security Specific Field";
215-
static const char *only_char_dev = "Only character device is allowed";
215+
static const char *only_ctrl_dev = "Only controller device is allowed";
216216
static const char *prinfo = "PI and check field";
217217
static const char *rae = "Retain an Asynchronous Event";
218218
static const char *raw_directive = "show directive in binary format";
@@ -422,11 +422,11 @@ static int open_fallback_chardev(struct libnvme_global_ctx *ctx,
422422
struct libnvme_transport_handle *hdl = *phdl;
423423
int err;
424424

425-
if (libnvme_transport_handle_is_chardev(hdl)) {
425+
if (libnvme_transport_handle_is_ctrl(hdl)) {
426426
__cleanup_free char *cdev = NULL;
427427

428428
if (!nsid) {
429-
nvme_show_error("char device not supported without --namespace-id");
429+
nvme_show_error("controller device not supported without --namespace-id");
430430
return -EINVAL;
431431
}
432432

@@ -1099,8 +1099,8 @@ static int get_effects_log(int argc, char **argv, struct command *acmd, struct p
10991099

11001100
if (cfg.csi < 0) {
11011101
__u64 cap;
1102-
if (libnvme_transport_handle_is_blkdev(hdl)) {
1103-
nvme_show_error("Block device isn't allowed without csi");
1102+
if (libnvme_transport_handle_is_ns(hdl)) {
1103+
nvme_show_error("Namespace device isn't allowed without csi");
11041104
return -EINVAL;
11051105
}
11061106
bar = mmap_registers(hdl, false);
@@ -3013,8 +3013,8 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc, s
30133013
return err;
30143014
}
30153015

3016-
if (libnvme_transport_handle_is_blkdev(hdl)) {
3017-
nvme_show_error("%s: a block device opened (dev: %s, nsid: %d)", acmd->name,
3016+
if (libnvme_transport_handle_is_ns(hdl)) {
3017+
nvme_show_error("%s: a namespace device opened (dev: %s, nsid: %d)", acmd->name,
30183018
libnvme_transport_handle_get_name(hdl), cfg.nsid);
30193019
return -EINVAL;
30203020
}
@@ -5437,8 +5437,8 @@ static int subsystem_reset(int argc, char **argv, struct command *acmd, struct p
54375437
if (err)
54385438
return err;
54395439

5440-
if (!libnvme_transport_handle_is_chardev(hdl)) {
5441-
nvme_show_error(only_char_dev);
5440+
if (!libnvme_transport_handle_is_ctrl(hdl)) {
5441+
nvme_show_error(only_ctrl_dev);
54425442
return -EINVAL;
54435443
}
54445444

@@ -5468,8 +5468,8 @@ static int reset(int argc, char **argv, struct command *acmd, struct plugin *plu
54685468
if (err)
54695469
return err;
54705470

5471-
if (!libnvme_transport_handle_is_chardev(hdl)) {
5472-
nvme_show_error(only_char_dev);
5471+
if (!libnvme_transport_handle_is_ctrl(hdl)) {
5472+
nvme_show_error(only_ctrl_dev);
54735473
return -EINVAL;
54745474
}
54755475

@@ -5497,8 +5497,8 @@ static int ns_rescan(int argc, char **argv, struct command *acmd, struct plugin
54975497
if (err)
54985498
return err;
54995499

5500-
if (!libnvme_transport_handle_is_chardev(hdl)) {
5501-
nvme_show_error(only_char_dev);
5500+
if (!libnvme_transport_handle_is_ctrl(hdl)) {
5501+
nvme_show_error(only_ctrl_dev);
55025502
return -EINVAL;
55035503
}
55045504

@@ -5860,8 +5860,8 @@ static int show_registers(int argc, char **argv, struct command *acmd, struct pl
58605860
if (err)
58615861
return err;
58625862

5863-
if (libnvme_transport_handle_is_blkdev(hdl)) {
5864-
nvme_show_error(only_char_dev);
5863+
if (libnvme_transport_handle_is_ns(hdl)) {
5864+
nvme_show_error(only_ctrl_dev);
58655865
return -EINVAL;
58665866
}
58675867

@@ -6137,8 +6137,8 @@ static int get_register(int argc, char **argv, struct command *acmd, struct plug
61376137
if (err)
61386138
return err;
61396139

6140-
if (libnvme_transport_handle_is_blkdev(hdl)) {
6141-
nvme_show_error(only_char_dev);
6140+
if (libnvme_transport_handle_is_ns(hdl)) {
6141+
nvme_show_error(only_ctrl_dev);
61426142
return -EINVAL;
61436143
}
61446144

@@ -6441,8 +6441,8 @@ static int set_register(int argc, char **argv, struct command *acmd, struct plug
64416441
if (err)
64426442
return err;
64436443

6444-
if (libnvme_transport_handle_is_blkdev(hdl)) {
6445-
nvme_show_error(only_char_dev);
6444+
if (libnvme_transport_handle_is_ns(hdl)) {
6445+
nvme_show_error(only_ctrl_dev);
64466446
return -EINVAL;
64476447
}
64486448

@@ -6798,7 +6798,7 @@ static int format_cmd(int argc, char **argv, struct command *acmd, struct plugin
67986798

67996799
printf("Success formatting namespace:%x\n", cfg.namespace_id);
68006800
if (libnvme_transport_handle_is_direct(hdl) && cfg.lbaf != prev_lbaf) {
6801-
if (libnvme_transport_handle_is_chardev(hdl)) {
6801+
if (libnvme_transport_handle_is_ctrl(hdl)) {
68026802
if (libnvme_rescan_ns(hdl) < 0) {
68036803
nvme_show_error("failed to rescan namespaces");
68046804
return -errno;
@@ -6830,7 +6830,7 @@ static int format_cmd(int argc, char **argv, struct command *acmd, struct plugin
68306830
}
68316831
}
68326832
if (libnvme_transport_handle_is_direct(hdl) && cfg.reset &&
6833-
libnvme_transport_handle_is_chardev(hdl))
6833+
libnvme_transport_handle_is_ctrl(hdl))
68346834
libnvme_reset_ctrl(hdl);
68356835

68366836
return err;

plugins/scaleflux/sfx-nvme.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,7 @@ static int nvme_expand_cap(struct libnvme_transport_handle *hdl, __u32 namespace
14171417
__u8 reserve1[5];
14181418
} __packed;
14191419

1420-
if (libnvme_transport_handle_is_chardev(hdl))
1420+
if (libnvme_transport_handle_is_ctrl(hdl))
14211421
snprintf(dev_name, 32, "%sn%u", libnvme_transport_handle_get_name(hdl), namespace_id);
14221422
else
14231423
strcpy(dev_name, libnvme_transport_handle_get_name(hdl));
@@ -1507,8 +1507,8 @@ static int sfx_expand_cap(int argc, char **argv, struct command *acmd, struct pl
15071507
return err;
15081508

15091509
if (cfg.namespace_id == NVME_NSID_ALL) {
1510-
if (libnvme_transport_handle_is_chardev(hdl)) {
1511-
fprintf(stderr, "namespace_id or blk device required\n");
1510+
if (libnvme_transport_handle_is_ctrl(hdl)) {
1511+
fprintf(stderr, "namespace_id or namespace device required\n");
15121512
return -EINVAL;
15131513
} else {
15141514
cfg.namespace_id = atoi(&libnvme_transport_handle_get_name(hdl)[strlen(libnvme_transport_handle_get_name(hdl)) - 1]);

plugins/sed/sed.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ OPT_ARGS(discovery_opts) = {
6363

6464
/*
6565
* Open the NVMe device specified on the command line. It must be the
66-
* NVMe block device (e.g. /dev/nvme0n1).
66+
* NVMe namespace device (e.g. /dev/nvme0n1).
6767
*/
6868
static int sed_opal_open_device(struct libnvme_global_ctx **ctx, struct libnvme_transport_handle **hdl, int argc, char **argv,
6969
const char *desc, struct argconfig_commandline_options *opts)
@@ -74,9 +74,10 @@ static int sed_opal_open_device(struct libnvme_global_ctx **ctx, struct libnvme_
7474
if (err)
7575
return err;
7676

77-
if (!libnvme_transport_handle_is_blkdev(*hdl)) {
77+
if (!libnvme_transport_handle_is_ns(*hdl)) {
7878
fprintf(stderr,
79-
"ERROR : The NVMe block device must be specified\n");
79+
"ERROR : The NVMe namespace device (e.g. /dev/nvme0n1) "
80+
"must be specified\n");
8081
err = -EINVAL;
8182
}
8283

0 commit comments

Comments
 (0)