Skip to content

Commit 9797fd2

Browse files
ikegami-tigaw
authored andcommitted
log: Add nvme root global variable to set for default output
Signed-off-by: Tokunori Ikegami <[email protected]> [dwagner: export new function, update docs, reorder free sequence] Signed-off-by: Daniel Wagner <[email protected]>
1 parent 6de7efe commit 9797fd2

4 files changed

Lines changed: 32 additions & 3 deletions

File tree

src/libnvme.map

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ LIBNVME_1_6 {
55
nvme_ctrl_find;
66
nvme_ctrl_get_src_addr;
77
nvme_ctrl_release_fd;
8+
nvme_get_debug;
89
nvme_get_features_err_recovery2;
910
nvme_get_features_host_mem_buf2;
1011
nvme_get_features_iocs_profile;
@@ -14,14 +15,14 @@ LIBNVME_1_6 {
1415
nvme_host_release_fds;
1516
nvme_ns_release_fd;
1617
nvme_root_release_fds;
18+
nvme_set_debug;
1719
nvme_set_features_iocs_profile;
1820
nvme_set_features_resv_mask2;
1921
nvme_set_features_resv_persist2;
2022
nvme_set_features_write_protect2;
23+
nvme_set_root;
2124
nvme_subsystem_get_iopolicy;
2225
nvme_subsystem_release_fds;
23-
nvme_set_debug;
24-
nvme_get_debug;
2526
};
2627

2728
LIBNVME_1_5 {

src/nvme/log.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626
#define LOG_CLOCK CLOCK_MONOTONIC
2727
#endif
2828

29+
static nvme_root_t root;
30+
2931
void __attribute__((format(printf, 4, 5)))
3032
__nvme_msg(nvme_root_t r, int lvl,
3133
const char *func, const char *format, ...)
3234
{
33-
FILE *fp = r ? r->fp : stderr;
35+
FILE *fp = stderr;
3436
va_list ap;
3537
char pidbuf[16];
3638
char timebuf[32];
@@ -48,6 +50,12 @@ __nvme_msg(nvme_root_t r, int lvl,
4850
char *message __cleanup__(cleanup_charp) = NULL;
4951
int idx = 0;
5052

53+
if (!r)
54+
r = root;
55+
56+
if (r)
57+
fp = r->fp;
58+
5159
if (r && lvl > r->log_level)
5260
return;
5361

@@ -90,3 +98,8 @@ void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp)
9098
r->log_pid = log_pid;
9199
r->log_timestamp = log_tstamp;
92100
}
101+
102+
void nvme_set_root(nvme_root_t r)
103+
{
104+
root = r;
105+
}

src/nvme/log.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,17 @@
3535
*/
3636
void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp);
3737

38+
/**
39+
* nvme_set_root() - Set nvme_root_t context
40+
* @r: nvme_root_t context
41+
*
42+
* In order to be able to log from code paths where no root object is passed in
43+
* via the arguments use the the default one which can be set via this call.
44+
* When creating a new root object with @nvme_create_root the global root object
45+
* will be set as well. This means the global root object is always pointing to
46+
* the latest created root object. Note the first @nvme_free_tree call will reset
47+
* the global root object.
48+
*/
49+
void nvme_set_root(nvme_root_t r);
50+
3851
#endif /* _LOG_H */

src/nvme/tree.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ nvme_root_t nvme_create_root(FILE *fp, int log_level)
198198
r->fp = fp;
199199
list_head_init(&r->hosts);
200200
list_head_init(&r->endpoints);
201+
nvme_set_root(r);
201202
return r;
202203
}
203204

@@ -364,6 +365,7 @@ void nvme_free_tree(nvme_root_t r)
364365
free(r->config_file);
365366
if (r->application)
366367
free(r->application);
368+
nvme_set_root(NULL);
367369
free(r);
368370
}
369371

0 commit comments

Comments
 (0)