From: Ian Campbell <ian.campbell@citrix.com>
To: "greg@enjellic.com" <greg@enjellic.com>
Cc: "Keir (Xen.org)" <keir@xen.org>,
Ian Jackson <Ian.Jackson@eu.citrix.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [PATCH 1/2] 4.1.2 blktap2 cleanup fixes.
Date: Wed, 7 Nov 2012 08:22:28 +0100 [thread overview]
Message-ID: <1352272948.12977.20.camel@hastur.hellion.org.uk> (raw)
In-Reply-To: <201211070206.qA7261Bp028589@wind.enjellic.com>
On Wed, 2012-11-07 at 02:06 +0000, Dr. Greg Wettstein wrote:
> ---------------------------------------------------------------------------
> Backport of the following patch from development:
>
> # User Ian Campbell <[hidden email]>
> # Date 1309968705 -3600
> # Node ID e4781aedf817c5ab36f6f3077e44c43c566a2812
> # Parent 700d0f03d50aa6619d313c1ff6aea7fd429d28a7
> libxl: attempt to cleanup tapdisk processes on disk backend destroy.
>
> This patch properly terminates the tapdisk2 process(es) started
> to service a virtual block device.
>
> Signed-off-by: Greg Wettstein <greg@enjellic.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
>
> diff -r 700d0f03d50a tools/blktap2/control/tap-ctl-list.c
> --- a/tools/blktap2/control/tap-ctl-list.c Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/blktap2/control/tap-ctl-list.c Tue Nov 06 19:52:48 2012 -0600
> @@ -506,17 +506,15 @@ out:
> }
>
> int
> -tap_ctl_find_minor(const char *type, const char *path)
> +tap_ctl_find(const char *type, const char *path, tap_list_t *tap)
> {
> tap_list_t **list, **_entry;
> - int minor, err;
> + int ret = -ENOENT, err;
>
> err = tap_ctl_list(&list);
> if (err)
> return err;
>
> - minor = -1;
> -
> for (_entry = list; *_entry != NULL; ++_entry) {
> tap_list_t *entry = *_entry;
>
> @@ -526,11 +524,13 @@ tap_ctl_find_minor(const char *type, con
> if (path && (!entry->path || strcmp(entry->path, path)))
> continue;
>
> - minor = entry->minor;
> + *tap = *entry;
> + tap->type = tap->path = NULL;
> + ret = 0;
> break;
> }
>
> tap_ctl_free_list(list);
>
> - return minor >= 0 ? minor : -ENOENT;
> + return ret;
> }
> diff -r 700d0f03d50a tools/blktap2/control/tap-ctl.h
> --- a/tools/blktap2/control/tap-ctl.h Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/blktap2/control/tap-ctl.h Tue Nov 06 19:52:48 2012 -0600
> @@ -76,7 +76,7 @@ int tap_ctl_get_driver_id(const char *ha
>
> int tap_ctl_list(tap_list_t ***list);
> void tap_ctl_free_list(tap_list_t **list);
> -int tap_ctl_find_minor(const char *type, const char *path);
> +int tap_ctl_find(const char *type, const char *path, tap_list_t *tap);
>
> int tap_ctl_allocate(int *minor, char **devname);
> int tap_ctl_free(const int minor);
> diff -r 700d0f03d50a tools/libxl/libxl_blktap2.c
> --- a/tools/libxl/libxl_blktap2.c Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/libxl/libxl_blktap2.c Tue Nov 06 19:52:48 2012 -0600
> @@ -18,6 +18,8 @@
>
> #include "tap-ctl.h"
>
> +#include <string.h>
> +
> int libxl__blktap_enabled(libxl__gc *gc)
> {
> const char *msg;
> @@ -30,12 +32,13 @@ const char *libxl__blktap_devpath(libxl_
> {
> const char *type;
> char *params, *devname = NULL;
> - int minor, err;
> + tap_list_t tap;
> + int err;
>
> type = libxl__device_disk_string_of_format(format);
> - minor = tap_ctl_find_minor(type, disk);
> - if (minor >= 0) {
> - devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
> + err = tap_ctl_find(type, disk, &tap);
> + if (err == 0) {
> + devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", tap.minor);
> if (devname)
> return devname;
> }
> @@ -49,3 +52,28 @@ const char *libxl__blktap_devpath(libxl_
>
> return NULL;
> }
> +
> +
> +void libxl__device_destroy_tapdisk(libxl__gc *gc, char *be_path)
> +{
> + char *path, *params, *type, *disk;
> + int err;
> + tap_list_t tap;
> +
> + path = libxl__sprintf(gc, "%s/tapdisk-params", be_path);
> + if (!path) return;
> +
> + params = libxl__xs_read(gc, XBT_NULL, path);
> + if (!params) return;
> +
> + type = params;
> + disk = strchr(params, ':');
> + if (!disk) return;
> +
> + *disk++ = '\0';
> +
> + err = tap_ctl_find(type, disk, &tap);
> + if (err < 0) return;
> +
> + tap_ctl_destroy(tap.id, tap.minor);
> +}
> diff -r 700d0f03d50a tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/libxl/libxl_device.c Tue Nov 06 19:52:48 2012 -0600
> @@ -250,6 +250,7 @@ int libxl__device_destroy(libxl_ctx *ctx
> 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;
> }
> @@ -368,6 +369,7 @@ int libxl__devices_destroy(libxl_ctx *ct
> }
> }
> }
> + libxl__device_destroy_tapdisk(&gc, be_path);
> out:
> libxl__free_all(&gc);
> return 0;
> diff -r 700d0f03d50a tools/libxl/libxl_internal.h
> --- a/tools/libxl/libxl_internal.h Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/libxl/libxl_internal.h Tue Nov 06 19:52:48 2012 -0600
> @@ -314,6 +314,12 @@ _hidden const char *libxl__blktap_devpat
> const char *disk,
> libxl_disk_format format);
>
> +/* libxl__device_destroy_tapdisk:
> + * Destroys any tapdisk process associated with the backend represented
> + * by be_path.
> + */
> +_hidden void libxl__device_destroy_tapdisk(libxl__gc *gc, char *be_path);
> +
> _hidden char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid);
>
> struct libxl__xen_console_reader {
> diff -r 700d0f03d50a tools/libxl/libxl_noblktap2.c
> --- a/tools/libxl/libxl_noblktap2.c Mon Oct 29 09:04:48 2012 +0100
> +++ b/tools/libxl/libxl_noblktap2.c Tue Nov 06 19:52:48 2012 -0600
> @@ -27,3 +27,7 @@ const char *libxl__blktap_devpath(libxl_
> {
> return NULL;
> }
> +
> +void libxl__device_destroy_tapdisk(libxl__gc *gc, char *be_path)
> +{
> +}
> ---------------------------------------------------------------------------
>
> As always,
> Dr. G.W. Wettstein, Ph.D. Enjellic Systems Development, LLC.
> 4206 N. 19th Ave. Specializing in information infra-structure
> Fargo, ND 58102 development.
> PH: 701-281-1686
> FAX: 701-281-3949 EMAIL: greg@enjellic.com
> ------------------------------------------------------------------------------
> "Man, despite his artistic pretensions, his sophistication and many
> accomplishments, owes the fact of his existence to a six-inch layer of
> topsoil and the fact that it rains."
> -- Anonymous writer on perspective.
> GAUSSIAN quote.
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2012-11-07 7:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-07 2:06 [PATCH 1/2] 4.1.2 blktap2 cleanup fixes Dr. Greg Wettstein
2012-11-07 7:22 ` Ian Campbell [this message]
2012-12-01 14:03 ` Pasi Kärkkäinen
2012-12-11 23:44 ` Pasi Kärkkäinen
2012-12-12 17:47 ` Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1352272948.12977.20.camel@hastur.hellion.org.uk \
--to=ian.campbell@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=greg@enjellic.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).