Skip to content

Commit aaac721

Browse files
ikegami-tigaw
authored andcommitted
nvme: add dry-run NVME_ARGS default option
The option is to show command instead of sending. Signed-off-by: Tokunori Ikegami <[email protected]> Signed-off-by: Daniel Wagner <[email protected]>
1 parent 5ced5c0 commit aaac721

File tree

5 files changed

+26
-17
lines changed

5 files changed

+26
-17
lines changed

nvme-print.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#define nvme_print(name, flags, ...) \
2020
do { \
2121
struct print_ops *ops = nvme_print_ops(flags); \
22-
if (ops && ops->name) \
22+
if (ops && ops->name && !nvme_cfg.dry_run) \
2323
ops->name(__VA_ARGS__); \
2424
} while (false)
2525

nvme.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ struct passthru_config {
102102
char *metadata;
103103
bool raw_binary;
104104
bool show_command;
105-
bool dry_run;
106105
bool read;
107106
bool write;
108107
__u8 prefill;
@@ -192,6 +191,7 @@ const char *output_format = "Output format: normal|binary";
192191
#endif /* CONFIG_JSONC */
193192
const char *timeout = "timeout value, in milliseconds";
194193
const char *verbose = "Increase output verbosity";
194+
const char *dry_run = "show command instead of sending";
195195

196196
static const char *app_tag = "app tag for end-to-end PI";
197197
static const char *app_tag_mask = "app tag mask for end-to-end PI";
@@ -201,7 +201,6 @@ static const char *csi = "command set identifier";
201201
static const char *buf_len = "buffer len (if) data is sent or received";
202202
static const char *domainid = "Domain Identifier";
203203
static const char *doper = "directive operation";
204-
static const char *dry = "show command instead of sending";
205204
static const char *dspec_w_dtype = "directive specification associated with directive type";
206205
static const char *dtype = "directive type";
207206
static const char *endgid = "Endurance Group Identifier (ENDGID)";
@@ -445,6 +444,8 @@ static int parse_args(int argc, char *argv[], const char *desc,
445444
log_level = map_log_level(nvme_cfg.verbose, false);
446445
nvme_init_default_logging(stderr, log_level, false, false);
447446

447+
set_dry_run(nvme_cfg.dry_run);
448+
448449
return 0;
449450
}
450451

@@ -8075,7 +8076,6 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
80758076
__u16 dspec;
80768077
__u8 dsmgmt;
80778078
bool show;
8078-
bool dry_run;
80798079
bool latency;
80808080
bool force;
80818081
};
@@ -8100,7 +8100,6 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
81008100
.dspec = 0,
81018101
.dsmgmt = 0,
81028102
.show = false,
8103-
.dry_run = false,
81048103
.latency = false,
81058104
.force = false,
81068105
};
@@ -8125,7 +8124,7 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
81258124
OPT_SHRT("dir-spec", 'S', &cfg.dspec, dspec),
81268125
OPT_BYTE("dsm", 'D', &cfg.dsmgmt, dsm),
81278126
OPT_FLAG("show-command", 'V', &cfg.show, show),
8128-
OPT_FLAG("dry-run", 'w', &cfg.dry_run, dry),
8127+
OPT_FLAG("dry-run", 'w', &nvme_cfg.dry_run, dry_run),
81298128
OPT_FLAG("latency", 't', &cfg.latency, latency),
81308129
OPT_FLAG("force", 0, &cfg.force, force));
81318130

@@ -8301,7 +8300,7 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
83018300
}
83028301
}
83038302

8304-
if (cfg.show || cfg.dry_run) {
8303+
if (cfg.show || nvme_cfg.dry_run) {
83058304
printf("opcode : %02x\n", opcode);
83068305
printf("nsid : %02x\n", cfg.namespace_id);
83078306
printf("flags : %02x\n", 0);
@@ -8319,7 +8318,7 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
83198318
printf("pif : %02x\n", pif);
83208319
printf("sts : %02x\n", sts);
83218320
}
8322-
if (cfg.dry_run)
8321+
if (nvme_cfg.dry_run)
83238322
return 0;
83248323

83258324
struct nvme_io_args args = {
@@ -9084,7 +9083,6 @@ static int passthru(int argc, char **argv, bool admin,
90849083
.metadata = "",
90859084
.raw_binary = false,
90869085
.show_command = false,
9087-
.dry_run = false,
90889086
.read = false,
90899087
.write = false,
90909088
.latency = false,
@@ -9110,7 +9108,7 @@ static int passthru(int argc, char **argv, bool admin,
91109108
OPT_FILE("metadata", 'M', &cfg.metadata, metadata),
91119109
OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw_dump),
91129110
OPT_FLAG("show-command", 's', &cfg.show_command, show),
9113-
OPT_FLAG("dry-run", 'd', &cfg.dry_run, dry),
9111+
OPT_FLAG("dry-run", 'd', &nvme_cfg.dry_run, dry_run),
91149112
OPT_FLAG("read", 'r', &cfg.read, re),
91159113
OPT_FLAG("write", 'w', &cfg.write, wr),
91169114
OPT_FLAG("latency", 'T', &cfg.latency, latency));
@@ -9187,7 +9185,7 @@ static int passthru(int argc, char **argv, bool admin,
91879185
}
91889186
}
91899187

9190-
if (cfg.show_command || cfg.dry_run) {
9188+
if (cfg.show_command || nvme_cfg.dry_run) {
91919189
printf("opcode : %02x\n", cfg.opcode);
91929190
printf("flags : %02x\n", cfg.flags);
91939191
printf("rsvd1 : %04x\n", cfg.rsvd);
@@ -9206,7 +9204,7 @@ static int passthru(int argc, char **argv, bool admin,
92069204
printf("cdw15 : %08x\n", cfg.cdw15);
92079205
printf("timeout_ms : %08x\n", nvme_cfg.timeout);
92089206
}
9209-
if (cfg.dry_run)
9207+
if (nvme_cfg.dry_run)
92109208
return 0;
92119209

92129210
gettimeofday(&start_time, NULL);

nvme.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ struct nvme_config {
7878
char *output_format;
7979
int verbose;
8080
__u32 timeout;
81+
bool dry_run;
8182
};
8283

8384
/*
@@ -90,6 +91,7 @@ struct nvme_config {
9091
OPT_FMT("output-format", 'o', &nvme_cfg.output_format, output_format), \
9192
##__VA_ARGS__, \
9293
OPT_UINT("timeout", 't', &nvme_cfg.timeout, timeout), \
94+
OPT_FLAG("dry-run", 0, &nvme_cfg.dry_run, dry_run), \
9395
OPT_END() \
9496
}
9597

@@ -131,6 +133,7 @@ static inline DEFINE_CLEANUP_FUNC(
131133
extern const char *output_format;
132134
extern const char *timeout;
133135
extern const char *verbose;
136+
extern const char *dry_run;
134137
extern struct nvme_config nvme_cfg;
135138

136139
int validate_output_format(const char *format, nvme_print_flags_t *flags);

util/logging.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "logging.h"
1414

1515
int log_level;
16+
static bool dry_run;
1617

1718
int map_log_level(int verbose, bool quiet)
1819
{
@@ -44,6 +45,11 @@ int map_log_level(int verbose, bool quiet)
4445
return log_level;
4546
}
4647

48+
void set_dry_run(bool enable)
49+
{
50+
dry_run = enable;
51+
}
52+
4753
static void nvme_show_common(struct nvme_passthru_cmd *cmd)
4854
{
4955
printf("opcode : %02x\n", cmd->opcode);
@@ -91,12 +97,13 @@ int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
9197
{
9298
struct timeval start;
9399
struct timeval end;
94-
int err;
100+
int err = 0;
95101

96102
if (log_level >= LOG_DEBUG)
97103
gettimeofday(&start, NULL);
98104

99-
err = ioctl(fd, ioctl_cmd, cmd);
105+
if (!dry_run)
106+
err = ioctl(fd, ioctl_cmd, cmd);
100107

101108
if (log_level >= LOG_DEBUG) {
102109
gettimeofday(&end, NULL);
@@ -116,13 +123,13 @@ int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd,
116123
{
117124
struct timeval start;
118125
struct timeval end;
119-
int err;
126+
int err = 0;
120127

121128
if (log_level >= LOG_DEBUG)
122129
gettimeofday(&start, NULL);
123130

124-
125-
err = ioctl(fd, ioctl_cmd, cmd);
131+
if (!dry_run)
132+
err = ioctl(fd, ioctl_cmd, cmd);
126133

127134
if (log_level >= LOG_DEBUG) {
128135
gettimeofday(&end, NULL);

util/logging.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
extern int log_level;
2121

2222
int map_log_level(int verbose, bool quiet);
23+
void set_dry_run(bool enable);
2324

2425
#endif // DEBUG_H_

0 commit comments

Comments
 (0)