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

[PATCH v1 4/4] tools/ocaml/xenstored: mkdir conflicts were sometimes missed

  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Edwin Török <edvin.torok@xxxxxxxxxx>
  • Date: Fri, 15 Jan 2021 22:29:09 +0000
  • Authentication-results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Edwin Török <edvin.torok@xxxxxxxxxx>, "Christian Lindig" <christian.lindig@xxxxxxxxxx>, David Scott <dave@xxxxxxxxxx>, "Ian Jackson" <iwj@xxxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Fri, 15 Jan 2021 22:53:04 +0000
  • Ironport-sdr: v+h0zdLX7VPiugjB/jYhRxC8UwuubOWqPqzGEsksAgLzCC/Rn75Wan3af3zyCWny0Fdu7dCw4f 4vlEDqsqF4qdUCSqtBwrh0GfvWwNo6QO66WhL2q9klC4o0DjYF1OJfaETC2r89EgSrMxQobTnq 9IlY3KJm534NjMuAGG6D9ZnUe9W/Q92gsckucHjNWNJRKCrz0oHKC38FseKa9BY1H4uVRLfPQo 7AZ5EJ8bjx1uY3UEJS785XbVAbgYvpnBhQcUT3cbeAVLrFp3sEESG+1Lkb/gE0ycNOEceeLsSr GyU=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Due to how set_write_lowpath was used here it didn't detect
create/delete conflicts.
When we create an entry we must mark our parent as modified
(this is what creating a new node via write does).

Otherwise we can have 2 transactions one creating, and another deleting
a node both succeeding depending on timing.
Or one transaction reading an entry, concluding it doesn't exist,
do some other work based on that information and successfully commit
even if another transaction creates the node via mkdir meanwhile.

Signed-off-by: Edwin Török <edvin.torok@xxxxxxxxxx>
 tools/ocaml/xenstored/transaction.ml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/ocaml/xenstored/transaction.ml 
index 4ee77b6e14..0466b04ae3 100644
--- a/tools/ocaml/xenstored/transaction.ml
+++ b/tools/ocaml/xenstored/transaction.ml
@@ -172,7 +172,7 @@ let write t perm path value =
 let mkdir ?(with_watch=true) t perm path =
        Store.mkdir t.store perm path;
-       set_write_lowpath t path;
+       set_write_lowpath t (Store.Path.get_parent path);
        if with_watch then
                add_wop t Xenbus.Xb.Op.Mkdir path



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