WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Xen

xen-devel

[Top] [All Lists]

[Xen-devel] [PATCH 15 of 23] libxl: merge libxl__device_del into libxl__

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 15 of 23] libxl: merge libxl__device_del into libxl__device_remove
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: 2011年9月30日 14:33:28 +0100
Cc: Jim Fehlig <jfehlig@xxxxxxxxxx>, Mike McClurg <mike.mcclurg@xxxxxxxxxx>, Dave Scott <Dave.Scott@xxxxxxxxxxxxx>, Jonathan Ludlam <Jonathan.Ludlam@xxxxxxxxxxxxx>
Delivery-date: 2011年9月30日 06:52:43 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1317389593@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1317389593@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.6.4
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1317389248 -3600
# Node ID 7a8cd032b63cf91d3fe04501997405d53cf5d8b3
# Parent ec28ee6dace513c3d009d498341f9537a19b2d98
libxl: merge libxl__device_del into libxl__device_remove
Note that the "wait" parameter added to libxl_device_remove is different to the
wait paramter previously used by similar functions. In the past not-wait meant
forced whereas now in means wait for a graceful shutdown, as opposed to setting
off a graceful shutdown but not waiting.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
diff -r ec28ee6dace5 -r 7a8cd032b63c tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Fri Sep 30 14:27:28 2011 +0100
+++ b/tools/libxl/libxl.c Fri Sep 30 14:27:28 2011 +0100
@@ -1072,7 +1072,7 @@ int libxl_device_disk_del(libxl_ctx *ctx
 device.devid = devid;
 device.kind = LIBXL__DEVICE_KIND_VBD;
 if (wait)
- rc = libxl__device_del(&gc, &device);
+ rc = libxl__device_remove(&gc, &device, wait);
 else
 rc = libxl__device_force_remove(&gc, &device);
 out_free:
@@ -1287,7 +1287,7 @@ int libxl_device_nic_del(libxl_ctx *ctx,
 device.kind = LIBXL__DEVICE_KIND_VIF;
 
 if (wait)
- rc = libxl__device_del(&gc, &device);
+ rc = libxl__device_remove(&gc, &device, wait);
 else
 rc = libxl__device_force_remove(&gc, &device);
 
diff -r ec28ee6dace5 -r 7a8cd032b63c tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c Fri Sep 30 14:27:28 2011 +0100
+++ b/tools/libxl/libxl_device.c Fri Sep 30 14:27:28 2011 +0100
@@ -367,57 +367,6 @@ int libxl__device_disk_dev_number(const 
 return -1;
 }
 
-int libxl__device_remove(libxl__gc *gc, libxl__device *dev)
-{
- libxl_ctx *ctx = libxl__gc_owner(gc);
- xs_transaction_t t;
- char *be_path = libxl__device_backend_path(gc, dev);
- char *state_path = libxl__sprintf(gc, "%s/state", be_path);
- char *state = libxl__xs_read(gc, XBT_NULL, state_path);
- int rc = 0;
-
- if (!state)
- goto out;
- if (atoi(state) != 4) {
- libxl__device_destroy_tapdisk(gc, be_path);
- xs_rm(ctx->xsh, XBT_NULL, be_path);
- goto out;
- }
-
-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;
- else {
- rc = -1;
- goto out;
- }
- }
-
- xs_watch(ctx->xsh, state_path, be_path);
- libxl__device_destroy_tapdisk(gc, be_path);
- rc = 1;
-out:
- return rc;
-}
-
-int libxl__device_force_remove(libxl__gc *gc, libxl__device *dev)
-{
- libxl_ctx *ctx = libxl__gc_owner(gc);
- char *be_path = libxl__device_backend_path(gc, dev);
- char *fe_path = libxl__device_frontend_path(gc, dev);
-
- xs_rm(ctx->xsh, XBT_NULL, be_path);
- xs_rm(ctx->xsh, XBT_NULL, fe_path);
-
- libxl__device_destroy_tapdisk(gc, be_path);
-
- return 0;
-}
-
 static int wait_for_dev_destroy(libxl__gc *gc, struct timeval *tv)
 {
 libxl_ctx *ctx = libxl__gc_owner(gc);
@@ -446,6 +395,67 @@ static int wait_for_dev_destroy(libxl__g
 return rc;
 }
 
+/* Returns 0 on success, ERROR_* on fail */
+int libxl__device_remove(libxl__gc *gc, libxl__device *dev, int wait)
+{
+ libxl_ctx *ctx = libxl__gc_owner(gc);
+ xs_transaction_t t;
+ char *be_path = libxl__device_backend_path(gc, dev);
+ char *state_path = libxl__sprintf(gc, "%s/state", be_path);
+ char *state = libxl__xs_read(gc, XBT_NULL, state_path);
+ int rc = 0;
+
+ if (!state)
+ goto out;
+ if (atoi(state) != 4) {
+ libxl__device_destroy_tapdisk(gc, be_path);
+ xs_rm(ctx->xsh, XBT_NULL, be_path);
+ goto out;
+ }
+
+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;
+ else {
+ rc = ERROR_FAIL;
+ goto out;
+ }
+ }
+
+ xs_watch(ctx->xsh, state_path, be_path);
+ libxl__device_destroy_tapdisk(gc, be_path);
+
+ if (wait) {
+ struct timeval tv;
+ tv.tv_sec = LIBXL_DESTROY_TIMEOUT;
+ tv.tv_usec = 0;
+ (void)wait_for_dev_destroy(gc, &tv);
+ xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
+ }
+
+ rc = 0;
+out:
+ return rc;
+}
+
+int libxl__device_force_remove(libxl__gc *gc, libxl__device *dev)
+{
+ libxl_ctx *ctx = libxl__gc_owner(gc);
+ char *be_path = libxl__device_backend_path(gc, dev);
+ char *fe_path = libxl__device_frontend_path(gc, dev);
+
+ xs_rm(ctx->xsh, XBT_NULL, be_path);
+ xs_rm(ctx->xsh, XBT_NULL, fe_path);
+
+ libxl__device_destroy_tapdisk(gc, be_path);
+
+ return 0;
+}
+
 int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force)
 {
 libxl_ctx *ctx = libxl__gc_owner(gc);
@@ -487,7 +497,7 @@ int libxl__devices_destroy(libxl__gc *gc
 if (force) {
 libxl__device_force_remove(gc, &dev);
 } else {
- if (libxl__device_remove(gc, &dev) > 0)
+ if (libxl__device_remove(gc, &dev, 0) == 0)
 n_watches++;
 }
 }
@@ -506,7 +516,7 @@ int libxl__devices_destroy(libxl__gc *gc
 if (force) {
 libxl__device_force_remove(gc, &dev);
 } else {
- if (libxl__device_remove(gc, &dev) > 0)
+ if (libxl__device_remove(gc, &dev, 0) == 0)
 n_watches++;
 }
 }
@@ -532,29 +542,6 @@ out:
 return 0;
 }
 
-int libxl__device_del(libxl__gc *gc, libxl__device *dev)
-{
- libxl_ctx *ctx = libxl__gc_owner(gc);
- struct timeval tv;
- int rc;
-
- rc = libxl__device_remove(gc, dev);
- if (rc == -1) {
- rc = ERROR_FAIL;
- goto out;
- }
-
- tv.tv_sec = LIBXL_DESTROY_TIMEOUT;
- tv.tv_usec = 0;
- (void)wait_for_dev_destroy(gc, &tv);
-
- xs_rm(ctx->xsh, XBT_NULL, libxl__device_frontend_path(gc, dev));
- rc = 0;
-
-out:
- return rc;
-}
-
 int libxl__wait_for_device_model(libxl__gc *gc,
 uint32_t domid, char *state,
 libxl__spawn_starting *spawning,
diff -r ec28ee6dace5 -r 7a8cd032b63c tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Fri Sep 30 14:27:28 2011 +0100
+++ b/tools/libxl/libxl_internal.h Fri Sep 30 14:27:28 2011 +0100
@@ -242,8 +242,7 @@ _hidden char *libxl__device_backend_path
 _hidden char *libxl__device_frontend_path(libxl__gc *gc, libxl__device 
*device);
 _hidden int libxl__parse_backend_path(libxl__gc *gc, const char *path,
 libxl__device *dev);
-_hidden int libxl__device_del(libxl__gc *gc, libxl__device *dev);
-_hidden int libxl__device_remove(libxl__gc *gc, libxl__device *dev);
+_hidden int libxl__device_remove(libxl__gc *gc, libxl__device *dev, int wait);
 _hidden int libxl__device_force_remove(libxl__gc *gc, libxl__device *dev);
 _hidden int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force);
 _hidden int libxl__wait_for_backend(libxl__gc *gc, char *be_path, char *state);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
Previous by Date: [Xen-devel] [PATCH 17 of 23] libxl: convert disk handling to device API , Ian Campbell
Next by Date: [Xen-devel] [PATCH 18 of 23] libxl: convert NIC handling to device API , Ian Campbell
Previous by Thread: [Xen-devel] [PATCH 17 of 23] libxl: convert disk handling to device API , Ian Campbell
Next by Thread: [Xen-devel] [PATCH 18 of 23] libxl: convert NIC handling to device API , Ian Campbell
Indexes: [Date] [Thread] [Top] [All Lists]

Copyright ©, Citrix Systems Inc. All rights reserved. Legal and Privacy
Citrix This site is hosted by Citrix

AltStyle によって変換されたページ (->オリジナル) /