[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 04/12] tools/xenstore: use accounting buffering for node accounting



Add the node accounting to the accounting information buffering in
order to avoid having to undo it in case of failure.

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
 tools/xenstore/xenstored_core.c   | 21 ++-------------------
 tools/xenstore/xenstored_domain.h |  4 ++--
 2 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index d437149622..7bf56b4d38 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -1442,7 +1442,6 @@ static void destroy_node_rm(struct connection *conn, 
struct node *node)
 static int destroy_node(struct connection *conn, struct node *node)
 {
        destroy_node_rm(conn, node);
-       domain_nbentry_dec(conn, node->perms.p[0].id);
 
        /*
         * It is not possible to easily revert the changes in a transaction.
@@ -1788,27 +1787,11 @@ static int do_set_perms(const void *ctx, struct 
connection *conn,
        old_perms = node->perms;
        domain_nbentry_dec(conn, node->perms.p[0].id);
        node->perms = perms;
-       if (domain_nbentry_inc(conn, node->perms.p[0].id)) {
-               node->perms = old_perms;
-               /*
-                * This should never fail because we had a reference on the
-                * domain before and Xenstored is single-threaded.
-                */
-               domain_nbentry_inc(conn, node->perms.p[0].id);
+       if (domain_nbentry_inc(conn, node->perms.p[0].id))
                return ENOMEM;
-       }
 
-       if (write_node(conn, node, false)) {
-               int saved_errno = errno;
-
-               domain_nbentry_dec(conn, node->perms.p[0].id);
-               node->perms = old_perms;
-               /* No failure possible as above. */
-               domain_nbentry_inc(conn, node->perms.p[0].id);
-
-               errno = saved_errno;
+       if (write_node(conn, node, false))
                return errno;
-       }
 
        fire_watches(conn, ctx, name, node, false, &old_perms);
        send_ack(conn, XS_SET_PERMS);
diff --git a/tools/xenstore/xenstored_domain.h 
b/tools/xenstore/xenstored_domain.h
index 9959b2f2e4..ead3893fc1 100644
--- a/tools/xenstore/xenstored_domain.h
+++ b/tools/xenstore/xenstored_domain.h
@@ -20,9 +20,9 @@
 #define _XENSTORED_DOMAIN_H
 
 enum {
+       ACC_NODES,
        ACC_REQ_N,       /* Number of elements per request and domain. */
-       ACC_NODES = ACC_REQ_N,
-       ACC_TR_N,        /* Number of elements per transaction and domain. */
+       ACC_TR_N = ACC_REQ_N, /* Number of elements per transaction and domain. 
*/
        ACC_N = ACC_TR_N /* Number of elements per domain. */
 };
 
-- 
2.35.3




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.