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

[Xen-devel] [PATCH] libxl: don't set backend state to 5 when trying to unplug a device



# HG changeset patch
# User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
# Date 1326454785 -3600
# Node ID 887a3229fd7a50c04981e29709bc7210dafef38f
# Parent  5b2676ac13218951698c49fa0350f2ac48220f3d
libxl: don't set backend state to 5 when trying to unplug a device

libxl__device_remove was setting backend state to 5, which could
create a race condition, since the previous check for state != 4 and
setting state to 5 was not done inside of the same transaction, so the
kernel could change the state to 6 in the space between the check for
state != 4 and setting state to 5.

I might be wrong, but since I don't think setting backend state to 5
helps in any way when disconnecting a device I've just removed the
xs_write.  If this is necessary, the state != 4 check and setting it
to 5 should happen inside the same transaction, to avoid the kernel
from changing the state behind our back.

Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>

diff -r 5b2676ac1321 -r 887a3229fd7a tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c        Mon Jan 09 16:01:44 2012 +0100
+++ b/tools/libxl/libxl_device.c        Fri Jan 13 12:39:45 2012 +0100
@@ -456,7 +456,6 @@ int libxl__device_remove(libxl__gc *gc, 
 retry_transaction:
     t = xs_transaction_start(ctx->xsh);
     xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/online", be_path), "0", 
strlen("0"));
-    xs_write(ctx->xsh, t, state_path, "5", strlen("5"));
     if (!xs_transaction_end(ctx->xsh, t, 0)) {
         if (errno == EAGAIN)
             goto retry_transaction;

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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