json_object_array_add(subsys_array, subsys_obj);
}
-void json_update_config(nvme_root_t r, const char *config_file)
+int json_update_config(nvme_root_t r, const char *config_file)
{
nvme_host_t h;
struct json_object *json_root, *host_obj;
struct json_object *subsys_array;
+ int ret = 0;
json_root = json_object_new_array();
nvme_for_each_host(r, h) {
JSON_C_TO_STRING_PRETTY) < 0) {
fprintf(stderr, "Failed to write %s, %s\n",
config_file, json_util_get_last_err());
+ ret = -1;
+ errno = EIO;
}
json_object_put(json_root);
+
+ return ret;
}
void json_read_config(nvme_root_t r, const char *config_file);
-void json_update_config(nvme_root_t r, const char *config_file);
+int json_update_config(nvme_root_t r, const char *config_file);
#endif /* _LIBNVME_PRIVATE_H */
struct nvme_root {
struct list_head hosts;
+ bool modified;
};
static inline void nvme_free_dirents(struct dirent **d, int i)
return r;
}
+int nvme_update_config(nvme_root_t r, const char *config_file)
+{
+ if (!r->modified)
+ return 0;
+ return json_update_config(r, config_file);
+}
+
nvme_host_t nvme_first_host(nvme_root_t r)
{
return list_top(&r->hosts, struct nvme_host, entry);
list_head_init(&s->ctrls);
list_head_init(&s->namespaces);
list_add(&h->subsystems, &s->entry);
+ h->r->modified = true;
return s;
}
free(h->hostnqn);
if (h->hostid)
free(h->hostid);
+ h->r->modified = true;
free(h);
}
list_node_init(&h->entry);
h->r = r;
list_add(&r->hosts, &h->entry);
+ r->modified = true;
return h;
}
return 0;
}
-int nvme_init_subsystem(nvme_subsystem_t s, const char *name, const char *path)
+static int nvme_init_subsystem(nvme_subsystem_t s, const char *name,
+ const char *path)
{
s->model = nvme_get_attr(path, "model");
if (!s->model) {
void nvme_ctrl_disable_sqflow(nvme_ctrl_t c, bool disable_sqflow)
{
c->cfg.disable_sqflow = disable_sqflow;
+ c->s->h->r->modified = true;
}
void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)
if (c) {
c->s = s;
list_add(&s->ctrls, &c->entry);
+ s->h->r->modified = true;
}
return c;
}