[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 13/15] libxl: introduce libxl_userdata_unlink
This will be used in later patch for xl to remove its "xl" userdata file. Both CTX lock and userdata lock are taken in this API. CTX lock is taken to maintain locking hierarchy, but it also has a side effect to protect against R-M-W by other threads. Userdata lock is used to protect against domain destruction. In general application should not rely on these internal locks to protect its own userdata files. It should deploys its own lock if it cares. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- change in v3: more commit message --- tools/libxl/libxl.h | 10 ++++++++++ tools/libxl/libxl_dom.c | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 7243023..ea29baa 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -67,6 +67,13 @@ * the same $(XEN_VERSION) (e.g. throughout a major release). */ +/* LIBXL_HAVE_USERDATA_UNLINK + * + * If it is defined, libxl has a library function called + * libxl_userdata_unlink. + */ +#define LIBXL_HAVE_USERDATA_UNLINK 1 + /* LIBXL_HAVE_CPUPOOL_QUALIFIER_TO_CPUPOOLID * * If this is defined, libxl has a library function called @@ -1263,6 +1270,9 @@ int libxl_userdata_retrieve(libxl_ctx *ctx, uint32_t domid, * data_r and datalen_r may be 0. * On error return, *data_r and *datalen_r are undefined. */ +int libxl_userdata_unlink(libxl_ctx *ctx, uint32_t domid, + const char *userdata_userid); + int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo); int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid, diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 0dfdb08..0c753b0 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -2012,6 +2012,31 @@ out: return rc; } +int libxl_userdata_unlink(libxl_ctx *ctx, uint32_t domid, + const char *userdata_userid) +{ + GC_INIT(ctx); + int rc; + libxl__carefd *lock; + const char *filename; + + CTX_LOCK; + lock = libxl__lock_domain_userdata(gc, domid); + if (!lock) { + rc = ERROR_LOCK_FAIL; + goto out; + } + + filename = libxl__userdata_path(gc, domid, userdata_userid, "d"); + if (unlink(filename)) rc = ERROR_FAIL; + + libxl__unlock_domain_userdata(lock); +out: + CTX_UNLOCK; + GC_FREE; + return rc; +} + /* * Local variables: * mode: C -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |