Skip to content

Commit 29db9f5

Browse files
shroffniigaw
authored andcommitted
libnvme: annotate libnvme_path::ana_state with !accessors:none
The default accessor generation creates getters that return cached attribute values. However, for libnvme_path::ana_state, a real-time (non-cached) value is required. This is particularly useful for tools such as nvme-top, which rely on up-to-date information for displaying a real-time dashboard. Annotate libnvme_path::ana_state with "!accessors:none" to disable the auto-generated accessor, and provide a custom implementation of libnvme_path_get_ana_state() that returns the current value. Signed-off-by: Nilay Shroff <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Daniel Wagner <[email protected]>
1 parent 2fce43f commit 29db9f5

8 files changed

Lines changed: 25 additions & 33 deletions

File tree

libnvme/libnvme/nvme-swig-accessors.i

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,10 @@
6060
/* struct libnvme_path */
6161
#define libnvme_path_name_get libnvme_path_get_name
6262
#define libnvme_path_sysfs_dir_get libnvme_path_get_sysfs_dir
63-
#define libnvme_path_ana_state_get libnvme_path_get_ana_state
6463
#define libnvme_path_numa_nodes_get libnvme_path_get_numa_nodes
6564
#define libnvme_path_grpid_get libnvme_path_get_grpid
6665
#define libnvme_path_name_set libnvme_path_set_name
6766
#define libnvme_path_sysfs_dir_set libnvme_path_set_sysfs_dir
68-
#define libnvme_path_ana_state_set libnvme_path_set_ana_state
6967
#define libnvme_path_numa_nodes_set libnvme_path_set_numa_nodes
7068
#define libnvme_path_grpid_set libnvme_path_set_grpid
7169

libnvme/src/accessors.ld

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,10 @@ LIBNVME_ACCESSORS_3 {
166166
libnvme_ns_set_name;
167167
libnvme_ns_set_nsid;
168168
libnvme_ns_set_sysfs_dir;
169-
libnvme_path_get_ana_state;
170169
libnvme_path_get_grpid;
171170
libnvme_path_get_name;
172171
libnvme_path_get_numa_nodes;
173172
libnvme_path_get_sysfs_dir;
174-
libnvme_path_set_ana_state;
175173
libnvme_path_set_grpid;
176174
libnvme_path_set_name;
177175
libnvme_path_set_numa_nodes;

libnvme/src/libnvme.ld

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ LIBNVME_3 {
136136
libnvme_ns_write_uncorrectable;
137137
libnvme_ns_write_zeros;
138138
libnvme_open;
139+
libnvme_path_get_ana_state;
139140
libnvme_path_get_ctrl;
140141
libnvme_path_get_ns;
141142
libnvme_path_get_queue_depth;

libnvme/src/nvme/accessors.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -291,19 +291,6 @@ __public const char *libnvme_path_get_sysfs_dir(const struct libnvme_path *p)
291291
return p->sysfs_dir;
292292
}
293293

294-
__public void libnvme_path_set_ana_state(
295-
struct libnvme_path *p,
296-
const char *ana_state)
297-
{
298-
free(p->ana_state);
299-
p->ana_state = ana_state ? strdup(ana_state) : NULL;
300-
}
301-
302-
__public const char *libnvme_path_get_ana_state(const struct libnvme_path *p)
303-
{
304-
return p->ana_state;
305-
}
306-
307294
__public void libnvme_path_set_numa_nodes(
308295
struct libnvme_path *p,
309296
const char *numa_nodes)

libnvme/src/nvme/accessors.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -391,21 +391,6 @@ void libnvme_path_set_sysfs_dir(struct libnvme_path *p, const char *sysfs_dir);
391391
*/
392392
const char *libnvme_path_get_sysfs_dir(const struct libnvme_path *p);
393393

394-
/**
395-
* libnvme_path_set_ana_state() - Set ana_state.
396-
* @p: The &struct libnvme_path instance to update.
397-
* @ana_state: New string; a copy is stored. Pass NULL to clear.
398-
*/
399-
void libnvme_path_set_ana_state(struct libnvme_path *p, const char *ana_state);
400-
401-
/**
402-
* libnvme_path_get_ana_state() - Get ana_state.
403-
* @p: The &struct libnvme_path instance to query.
404-
*
405-
* Return: The value of the ana_state field, or NULL if not set.
406-
*/
407-
const char *libnvme_path_get_ana_state(const struct libnvme_path *p);
408-
409394
/**
410395
* libnvme_path_set_numa_nodes() - Set numa_nodes.
411396
* @p: The &struct libnvme_path instance to update.

libnvme/src/nvme/private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ struct libnvme_path { // !generate-accessors
179179

180180
char *name;
181181
char *sysfs_dir;
182-
char *ana_state;
182+
char *ana_state; // !accessors:none
183183
char *numa_nodes;
184184
int grpid;
185185
int queue_depth; // !accessors:none

libnvme/src/nvme/tree.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,21 @@ __public int libnvme_path_get_queue_depth(libnvme_path_t p)
839839
return p->queue_depth;
840840
}
841841

842+
__public char *libnvme_path_get_ana_state(libnvme_path_t p)
843+
{
844+
__cleanup_free char *ana_state = NULL;
845+
846+
ana_state = libnvme_get_path_attr(p, "ana_state");
847+
if (ana_state) {
848+
if (!p->ana_state || strcmp(ana_state, p->ana_state)) {
849+
free(p->ana_state);
850+
p->ana_state = strdup(ana_state);
851+
}
852+
}
853+
854+
return p->ana_state;
855+
}
856+
842857
void nvme_free_path(struct libnvme_path *p)
843858
{
844859
if (!p)

libnvme/src/nvme/tree.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,14 @@ int libnvme_ns_identify_descs(libnvme_ns_t n, struct nvme_ns_id_desc *descs);
660660
*/
661661
int libnvme_path_get_queue_depth(libnvme_path_t p);
662662

663+
/**
664+
* libnvme_path_get_ana_state() - ANA state of an nvme_path_t object
665+
* @p: &libnvme_path_t object
666+
*
667+
* Return: ANA state of @p
668+
*/
669+
char *libnvme_path_get_ana_state(libnvme_path_t p);
670+
663671
/**
664672
* libnvme_path_get_ctrl() - Parent controller of an libnvme_path_t object
665673
* @p: &libnvme_path_t object

0 commit comments

Comments
 (0)