[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 02/12] xenstore: call add_change_node() directly when writing node
On 12/11/16 16:10, Wei Liu wrote: > On Fri, Nov 11, 2016 at 09:00:00AM +0100, Juergen Gross wrote: >> Instead of calling add_change_node() at places where write_node() is >> called, do that inside write_node(). >> >> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > > > There seems to be a subtle change in behaviour -- previously in > create_node, there is no add_chnage_node called. Now it has. No change. add_change_node() has been called after calling create_node() > >> --- >> tools/xenstore/xenstored_core.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/tools/xenstore/xenstored_core.c >> b/tools/xenstore/xenstored_core.c >> index de1a9b4..1354387 100644 >> --- a/tools/xenstore/xenstored_core.c >> +++ b/tools/xenstore/xenstored_core.c >> @@ -456,7 +456,7 @@ static struct node *read_node(struct connection *conn, >> const void *ctx, >> return node; >> } >> >> -static bool write_node(struct connection *conn, const struct node *node) >> +static bool write_node(struct connection *conn, struct node *node) >> { >> /* >> * conn will be null when this is called from manual_node. >> @@ -476,6 +476,8 @@ static bool write_node(struct connection *conn, const >> struct node *node) >> if (domain_is_unprivileged(conn) && data.dsize >= quota_max_entry_size) >> goto error; >> >> + add_change_node(conn, node, false); >> + > > Another subtle change of behaviour -- there is another goto error after > this, which means the change is not made as far as the caller is > concerned if that path is taken. That's a case which should not be of any concern: it means that the xenstore data base is corrupt. A stale watch event is the least problem then. > Not saying that all these changes are wrong, but they are worth pointing > out and probably we should put the reasoning into commit message. I'll add some words for this case. Juergen > >> data.dptr = talloc_size(node, data.dsize); >> ((uint32_t *)data.dptr)[0] = node->num_perms; >> ((uint32_t *)data.dptr)[1] = node->datalen; >> @@ -976,7 +978,6 @@ static void do_write(struct connection *conn, struct >> buffered_data *in) >> } >> } >> >> - add_change_node(conn, node, false); >> fire_watches(conn, in, name, false); >> send_ack(conn, XS_WRITE); >> } >> @@ -1007,7 +1008,6 @@ static void do_mkdir(struct connection *conn, struct >> buffered_data *in) >> send_error(conn, errno); >> return; >> } >> - add_change_node(conn, node, false); >> fire_watches(conn, in, name, false); >> } >> send_ack(conn, XS_MKDIR); >> @@ -1209,7 +1209,6 @@ static void do_set_perms(struct connection *conn, >> struct buffered_data *in) >> return; >> } >> >> - add_change_node(conn, node, false); >> fire_watches(conn, in, name, false); >> send_ack(conn, XS_SET_PERMS); >> } >> -- >> 2.6.6 >> > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |