[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 02/18] tools/xenstore: replace key in struct node with data base name
Instead of storing the TDB key in struct node, only store the name of the node used to access it in the data base. Associated with that change replace the key parameter of access_node() with the equivalent db_name. This is in preparation to replace TDB with a more simple data storage. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx> --- tools/xenstore/xenstored_core.c | 19 +++++++++++++------ tools/xenstore/xenstored_core.h | 4 ++-- tools/xenstore/xenstored_transaction.c | 10 +++++----- tools/xenstore/xenstored_transaction.h | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 71a8a899db..521ce1a70e 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -821,18 +821,20 @@ int write_node_raw(struct connection *conn, TDB_DATA *key, struct node *node, } /* - * Write the node. If the node is written, caller can find the key used in - * node->key. This can later be used if the change needs to be reverted. + * Write the node. If the node is written, caller can find the DB name used in + * node->db_name. This can later be used if the change needs to be reverted. */ static int write_node(struct connection *conn, struct node *node, enum write_node_mode mode, bool no_quota_check) { int ret; + TDB_DATA key; - if (access_node(conn, node, NODE_ACCESS_WRITE, &node->key)) + if (access_node(conn, node, NODE_ACCESS_WRITE, &node->db_name)) return errno; - ret = write_node_raw(conn, &node->key, node, mode, no_quota_check); + set_tdb_key(node->db_name, &key); + ret = write_node_raw(conn, &key, node, mode, no_quota_check); if (ret && conn && conn->transaction) { /* * Reverting access_node() is hard, so just fail the @@ -1446,10 +1448,13 @@ nomem: static void destroy_node_rm(struct connection *conn, struct node *node) { + TDB_DATA key; + if (streq(node->name, "/")) corrupt(NULL, "Destroying root node!"); - do_tdb_delete(conn, &node->key, &node->acc); + set_tdb_key(node->db_name, &key); + do_tdb_delete(conn, &key, &node->acc); } static int destroy_node(struct connection *conn, struct node *node) @@ -1639,10 +1644,11 @@ static int delnode_sub(const void *ctx, struct connection *conn, const char *root = arg; bool watch_exact; int ret; + const char *db_name; TDB_DATA key; /* Any error here will probably be repeated for all following calls. */ - ret = access_node(conn, node, NODE_ACCESS_DELETE, &key); + ret = access_node(conn, node, NODE_ACCESS_DELETE, &db_name); if (ret > 0) return WALK_TREE_SUCCESS_STOP; @@ -1650,6 +1656,7 @@ static int delnode_sub(const void *ctx, struct connection *conn, return WALK_TREE_ERROR_STOP; /* In case of error stop the walk. */ + set_tdb_key(db_name, &key); if (!ret && do_tdb_delete(conn, &key, &node->acc)) return WALK_TREE_ERROR_STOP; diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index 8130993184..2cfc01f200 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -181,8 +181,8 @@ struct node_account_data { struct node { const char *name; - /* Key used to update TDB */ - TDB_DATA key; + /* Name used to access data base. */ + const char *db_name; /* Parent (optional) */ struct node *parent; diff --git a/tools/xenstore/xenstored_transaction.c b/tools/xenstore/xenstored_transaction.c index 0655073de7..9dab0cd165 100644 --- a/tools/xenstore/xenstored_transaction.c +++ b/tools/xenstore/xenstored_transaction.c @@ -227,7 +227,7 @@ void transaction_prepend(struct connection *conn, const char *name, * to be accessed in the data base. */ int access_node(struct connection *conn, struct node *node, - enum node_access_type type, TDB_DATA *key) + enum node_access_type type, const char **db_name) { struct accessed_node *i = NULL; struct transaction *trans; @@ -243,8 +243,8 @@ int access_node(struct connection *conn, struct node *node, if (!conn || !conn->transaction) { /* They're changing the global database. */ - if (key) - set_tdb_key(node->name, key); + if (db_name) + *db_name = node->name; return 0; } @@ -308,8 +308,8 @@ int access_node(struct connection *conn, struct node *node, /* Nothing to delete. */ return -1; - if (key) { - set_tdb_key(i->trans_name, key); + if (db_name) { + *db_name = i->trans_name; if (type == NODE_ACCESS_WRITE) i->ta_node = true; if (type == NODE_ACCESS_DELETE) diff --git a/tools/xenstore/xenstored_transaction.h b/tools/xenstore/xenstored_transaction.h index 883145163f..f6a2e2f7f5 100644 --- a/tools/xenstore/xenstored_transaction.h +++ b/tools/xenstore/xenstored_transaction.h @@ -41,7 +41,7 @@ void ta_node_created(struct transaction *trans); /* This node was accessed. */ int __must_check access_node(struct connection *conn, struct node *node, - enum node_access_type type, TDB_DATA *key); + enum node_access_type type, const char **db_name); /* Queue watches for a modified node. */ void queue_watches(struct connection *conn, const char *name, bool watch_exact); -- 2.35.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |