From: Christoph Egger <Christoph.Egger@amd.com>
To: Keir Fraser <keir.fraser@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: [PATCH] blktap2: portability fixes
Date: Wed, 24 Jun 2009 14:24:17 +0200 [thread overview]
Message-ID: <200906241424.18133.Christoph.Egger@amd.com> (raw)
In-Reply-To: <C666C07F.866E%keir.fraser@eu.citrix.com>
[-- Attachment #1: Type: text/plain, Size: 1635 bytes --]
Patch is attached.
uuid is totally different in Linux and in NetBSD.
uuid_t is a char array in Linux and a struct in NetBSD.
Making NetBSD uuid look like Linux uuid doesn't work at all and
neither the other way around.
I renamed your uuid.h header to avoid a recursive inclusion
of the same header.
I created an uuid abstraction with a Linux and NetBSD implementation.
I also fixed a bug in vhd_create_batmap() which slipped in previously.
iconv() is a bit nasty to make it compile on both NetBSD and Linux.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
On Tuesday 23 June 2009 18:25:19 Keir Fraser wrote:
> This didn't have a prayer of building on Linux. I fixed it up for Linux and
> applied as c/s 19817. It's probably broken for netbsd now, but you should
> be able to provide a small fixup patch for that.
>
> -- Keir
>
> On 23/06/2009 13:29, "Christoph Egger" <Christoph.Egger@amd.com> wrote:
> > Hi!
> >
> > Attached patch makes blktap2 build on NetBSD.
> >
> > - Use standard off_t and lseek() instead of non-portable off64_t and
> > lseek64() - Use uuid API as documented in DCE 1.1 RPC specification
> > - Add NetBSD implementation for blk_getimagesize() and
> > blk_getsectorsize() - Use blk_getimagesize() and blk_getsectorsize()
> > - Fix uuid header check
> >
> > Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
--
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
[-- Attachment #2: xen_blktap2.diff --]
[-- Type: text/x-diff, Size: 16027 bytes --]
diff -r b51f9542ab14 tools/blktap2/drivers/block-vhd.c
--- a/tools/blktap2/drivers/block-vhd.c Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/drivers/block-vhd.c Wed Jun 24 12:57:16 2009 +0200
@@ -806,7 +806,7 @@ vhd_validate_parent(td_driver_t *child_d
}
*/
- if (uuid_compare(child->vhd.header.prt_uuid, parent->vhd.footer.uuid)) {
+ if (blk_uuid_compare(&child->vhd.header.prt_uuid, &parent->vhd.footer.uuid)) {
DPRINTF("ERROR: %s: %s, %s: parent uuid has changed since "
"snapshot. Child image no longer valid.\n",
__func__, child->vhd.file, parent->vhd.file);
diff -r b51f9542ab14 tools/blktap2/include/blk_uuid.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/blktap2/include/blk_uuid.h Wed Jun 24 12:57:16 2009 +0200
@@ -0,0 +1,53 @@
+/* Copyright (c) 2008, XenSource Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of XenSource Inc. nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#ifndef __BLKTAP2_UUID_H__
+#define __BLKTAP2_UUID_H__
+
+#if defined(__linux__) || defined(__Linux__)
+#include <uuid/uuid.h>
+/* enforce use of below API */
+#define uuid_is_null(a) error use blk_uuid_is_nil
+#define uuid_generate(a) error use blk_uuid_generate
+#define uuid_unparse(a, b) error use blk_uuid_to_string
+#define uuid_parse(a, b) error use blk_uuid_from_string
+#define uuid_copy(a, b) error use blk_uuid_copy
+#define uuid_clear(a) error use blk_uuid_clear
+#define uuid_compare(a,b) error use blk_uuid_compare
+#endif
+#if defined(__NetBSD__)
+#include <uuid.h>
+#endif
+
+int blk_uuid_is_nil(uuid_t *uuid);
+void blk_uuid_generate(uuid_t *uuid);
+void blk_uuid_to_string(uuid_t *uuid, char **out);
+void blk_uuid_from_string(uuid_t *uuid, const char *in);
+void blk_uuid_copy(uuid_t *dst, uuid_t *src);
+void blk_uuid_clear(uuid_t *uuid);
+int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2);
+
+#endif /* __BLKTAP2_UUID_H__ */
diff -r b51f9542ab14 tools/blktap2/include/libvhd.h
--- a/tools/blktap2/include/libvhd.h Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/include/libvhd.h Wed Jun 24 12:57:16 2009 +0200
@@ -36,7 +36,7 @@
#include <sys/bswap.h>
#endif
-#include "uuid.h"
+#include "blk_uuid.h"
#include "vhd.h"
#ifndef O_LARGEFILE
@@ -216,7 +216,7 @@ vhd_parent_locator_size(vhd_parent_locat
static inline int
vhd_parent_raw(vhd_context_t *ctx)
{
- return uuid_is_null(ctx->header.prt_uuid);
+ return blk_uuid_is_nil(&ctx->header.prt_uuid);
}
void libvhd_set_log_level(int);
diff -r b51f9542ab14 tools/blktap2/include/uuid.h
--- a/tools/blktap2/include/uuid.h Wed Jun 24 11:17:11 2009 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/* Copyright (c) 2008, XenSource Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of XenSource Inc. nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#ifndef __BLKTAP2_UUID_H__
-#define __BLKTAP2_UUID_H__
-
-#if defined(__linux__) || defined(__Linux__)
-
-#include <uuid/uuid.h>
-
-#else
-
-#include <inttypes.h>
-#include <string.h>
-#include <uuid.h>
-
-static inline int uuid_is_null(uuid_t uuid)
-{
- uint32_t status;
- return uuid_is_nil(&uuid, &status);
-}
-
-static inline void uuid_generate(uuid_t uuid)
-{
- uint32_t status;
- uuid_create(&uuid, &status);
-}
-
-static inline void uuid_unparse(uuid_t uuid, char *out)
-{
- uint32_t status;
- uuid_to_string(&uuid, (char **)&out, &status);
-}
-
-static inline void uuid_copy(uuid_t dst, uuid_t src)
-{
- memcpy(dst, src, sizeof(dst));
-}
-
-static inline void uuid_clear(uuid_t uu)
-{
- memset(uu, 0, sizeof(uu));
-}
-
-#define uuid_compare(x,y) \
- ({ uint32_t status; uuid_compare(&(x),&(y),&status); })
-
-#endif
-
-#endif /* __BLKTAP2_UUID_H__ */
diff -r b51f9542ab14 tools/blktap2/include/vhd.h
--- a/tools/blktap2/include/vhd.h Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/include/vhd.h Wed Jun 24 12:57:16 2009 +0200
@@ -28,7 +28,6 @@
#define __VHD_H__
#include <inttypes.h>
-#include "uuid.h"
typedef uint32_t u32;
typedef uint64_t u64;
diff -r b51f9542ab14 tools/blktap2/vhd/lib/Makefile
--- a/tools/blktap2/vhd/lib/Makefile Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/vhd/lib/Makefile Wed Jun 24 12:57:16 2009 +0200
@@ -27,6 +27,10 @@ endif
CFLAGS += -Wp,-MD,.$(@F).d
DEPS = .*.d
+UUID_SRCS-y :=
+UUID_SRCS-$(CONFIG_Linux) += uuid_linux.c
+UUID_SRCS-$(CONFIG_NetBSD) += uuid_netbsd.c
+
LIB-SRCS := libvhd.c
LIB-SRCS += libvhd-journal.c
LIB-SRCS += vhd-util-coalesce.c
@@ -44,6 +48,7 @@ LIB-SRCS += vhd-util-scan.c
LIB-SRCS += vhd-util-check.c
LIB-SRCS += relative-path.c
LIB-SRCS += atomicio.c
+LIB-SRCS += $(UUID_SRCS-y)
LIB-OBJS = $(patsubst %.c,%.o,$(LIB-SRCS))
LIB-OBJS += $(LVM-UTIL-OBJ)
diff -r b51f9542ab14 tools/blktap2/vhd/lib/libvhd-journal.c
--- a/tools/blktap2/vhd/lib/libvhd-journal.c Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/vhd/lib/libvhd-journal.c Wed Jun 24 12:57:16 2009 +0200
@@ -237,7 +237,7 @@ vhd_journal_add_journal_header(vhd_journ
if (err)
return err;
- uuid_copy(j->header.uuid, vhd->footer.uuid);
+ blk_uuid_copy(&j->header.uuid, &vhd->footer.uuid);
memcpy(j->header.cookie,
VHD_JOURNAL_HEADER_COOKIE, sizeof(j->header.cookie));
j->header.vhd_footer_offset = off - sizeof(vhd_footer_t);
diff -r b51f9542ab14 tools/blktap2/vhd/lib/libvhd.c
--- a/tools/blktap2/vhd/lib/libvhd.c Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/vhd/lib/libvhd.c Wed Jun 24 12:57:16 2009 +0200
@@ -1308,7 +1308,8 @@ vhd_macx_encode_location(char *name, cha
iconv_t cd;
int len, err;
size_t ibl, obl;
- char *uri, *urip, *uri_utf8, *uri_utf8p, *ret;
+ char *uri, *uri_utf8, *uri_utf8p, *ret;
+ const char *urip;
err = 0;
ret = NULL;
@@ -1319,7 +1320,7 @@ vhd_macx_encode_location(char *name, cha
ibl = len;
obl = len;
- uri = urip = malloc(ibl + 1);
+ urip = uri = malloc(ibl + 1);
uri_utf8 = uri_utf8p = malloc(obl);
if (!uri || !uri_utf8)
@@ -1333,7 +1334,11 @@ vhd_macx_encode_location(char *name, cha
snprintf(uri, ibl+1, "file://%s", name);
- if (iconv(cd, &urip, &ibl, &uri_utf8p, &obl) == (size_t)-1 ||
+ if (iconv(cd,
+#if defined(__linux__) || (__Linux__)
+ (char **)
+#endif
+ &urip, &ibl, &uri_utf8p, &obl) == (size_t)-1 ||
ibl || obl) {
err = (errno ? -errno : -EIO);
goto out;
@@ -1364,7 +1369,8 @@ vhd_w2u_encode_location(char *name, char
iconv_t cd;
int len, err;
size_t ibl, obl;
- char *uri, *urip, *uri_utf16, *uri_utf16p, *tmp, *ret;
+ char *uri, *uri_utf16, *uri_utf16p, *tmp, *ret;
+ const char *urip;
err = 0;
ret = NULL;
@@ -1418,7 +1424,11 @@ vhd_w2u_encode_location(char *name, char
goto out;
}
- if (iconv(cd, &urip, &ibl, &uri_utf16p, &obl) == (size_t)-1 ||
+ if (iconv(cd,
+#if defined(__linux__) || (__Linux__)
+ (char **)
+#endif
+ &urip, &ibl, &uri_utf16p, &obl) == (size_t)-1 ||
ibl || obl) {
err = (errno ? -errno : -EIO);
goto out;
@@ -1459,7 +1469,11 @@ vhd_macx_decode_location(const char *in,
if (cd == (iconv_t)-1)
return NULL;
- if (iconv(cd, (char **)&in, &ibl, &out, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &in, &ibl, &out, &obl) == (size_t)-1 || ibl)
return NULL;
iconv_close(cd);
@@ -1487,7 +1501,11 @@ vhd_w2u_decode_location(const char *in,
if (cd == (iconv_t)-1)
return NULL;
- if (iconv(cd, (char **)&in, &ibl, &out, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &in, &ibl, &out, &obl) == (size_t)-1 || ibl)
return NULL;
iconv_close(cd);
@@ -2435,7 +2453,7 @@ vhd_initialize_footer(vhd_context_t *ctx
ctx->footer.saved = 0;
ctx->footer.data_offset = 0xFFFFFFFFFFFFFFFF;
strcpy(ctx->footer.crtr_app, "tap");
- uuid_generate(ctx->footer.uuid);
+ blk_uuid_generate(&ctx->footer.uuid);
}
static int
@@ -2479,7 +2497,11 @@ vhd_initialize_header_parent_name(vhd_co
memset(dst, 0, obl);
- if (iconv(cd, (char **)&pname, &ibl, &dst, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &pname, &ibl, &dst, &obl) == (size_t)-1 || ibl)
err = (errno ? -errno : -EINVAL);
out:
@@ -2546,7 +2568,7 @@ vhd_initialize_header(vhd_context_t *ctx
return err;
ctx->header.prt_ts = vhd_time(stats.st_mtime);
- uuid_copy(ctx->header.prt_uuid, parent.footer.uuid);
+ blk_uuid_copy(&ctx->header.prt_uuid, &parent.footer.uuid);
if (!size)
size = parent.footer.curr_size;
vhd_close(&parent);
@@ -2628,7 +2650,7 @@ vhd_change_parent(vhd_context_t *child,
}
if (raw) {
- uuid_clear(child->header.prt_uuid);
+ blk_uuid_clear(&child->header.prt_uuid);
} else {
err = vhd_open(&parent, ppath, VHD_OPEN_RDONLY);
if (err) {
@@ -2636,7 +2658,7 @@ vhd_change_parent(vhd_context_t *child,
ppath, child->file, err);
goto out;
}
- uuid_copy(child->header.prt_uuid, parent.footer.uuid);
+ blk_uuid_copy(&child->header.prt_uuid, &parent.footer.uuid);
vhd_close(&parent);
}
@@ -2695,7 +2717,7 @@ vhd_create_batmap(vhd_context_t *ctx)
header = &ctx->batmap.header;
memset(header, 0, sizeof(vhd_batmap_header_t));
- memcpy(header->cookie, VHD_BATMAP_COOKIE, sizeof(*header->cookie));
+ memcpy(header->cookie, VHD_BATMAP_COOKIE, sizeof(header->cookie));
err = vhd_batmap_header_offset(ctx, &off);
if (err)
diff -r b51f9542ab14 tools/blktap2/vhd/lib/uuid_linux.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/blktap2/vhd/lib/uuid_linux.c Wed Jun 24 12:57:16 2009 +0200
@@ -0,0 +1,43 @@
+#include "blk_uuid.h"
+
+int blk_uuid_is_nil(uuid_t *uuid)
+{
+#undef uuid_is_null
+ return uuid_is_null(*uuid);
+}
+
+void blk_uuid_generate(uuid_t *uuid)
+{
+#undef uuid_generate
+ uuid_generate(*uuid);
+}
+
+void blk_uuid_to_string(uuid_t *uuid, char **out)
+{
+#undef uuid_unparse
+ uuid_unparse(*uuid, *out);
+}
+
+void blk_uuid_from_string(uuid_t *uuid, const char *in)
+{
+#undef uuid_parse
+ uuid_parse(in, *uuid);
+}
+
+void blk_uuid_copy(uuid_t *dst, uuid_t *src)
+{
+#undef uuid_copy
+ uuid_copy(*dst, *src);
+}
+
+void blk_uuid_clear(uuid_t *uuid)
+{
+#undef uuid_clear
+ uuid_clear(*uuid);
+}
+
+int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2)
+{
+#undef uuid_compare
+ return uuid_compare(*uuid1, *uuid2);
+}
diff -r b51f9542ab14 tools/blktap2/vhd/lib/uuid_netbsd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/blktap2/vhd/lib/uuid_netbsd.c Wed Jun 24 12:57:16 2009 +0200
@@ -0,0 +1,43 @@
+#include <string.h>
+#include "blk_uuid.h"
+
+int blk_uuid_is_nil(uuid_t *uuid)
+{
+ uint32_t status;
+ return uuid_is_nil(uuid, &status);
+}
+
+void blk_uuid_generate(uuid_t *uuid)
+{
+ uint32_t status;
+ uuid_create(uuid, &status);
+}
+
+void blk_uuid_to_string(uuid_t *uuid, char **out)
+{
+ uint32_t status;
+ uuid_to_string(uuid, out, &status);
+}
+
+void blk_uuid_from_string(uuid_t *uuid, const char *in)
+{
+ uint32_t status;
+ uuid_from_string(in, uuid, &status);
+}
+
+void blk_uuid_copy(uuid_t *dst, uuid_t *src)
+{
+ memcpy(dst, src, sizeof(uuid_t));
+}
+
+void blk_uuid_clear(uuid_t *uuid)
+{
+ memset(uuid, 0, sizeof(uuid_t));
+}
+
+int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2)
+{
+ uint32_t status;
+ return uuid_compare(uuid1, uuid2, &status);
+}
+
diff -r b51f9542ab14 tools/blktap2/vhd/lib/vhd-util-check.c
--- a/tools/blktap2/vhd/lib/vhd-util-check.c Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/vhd/lib/vhd-util-check.c Wed Jun 24 12:57:16 2009 +0200
@@ -218,7 +218,7 @@ vhd_util_check_validate_differencing_hea
if (vhd_util_check_zeros(header->loc, sizeof(header->loc)))
return "invalid non-null parent locators";
- if (!uuid_is_null(header->prt_uuid))
+ if (!blk_uuid_is_nil(&header->prt_uuid))
return "invalid non-null parent uuid";
if (header->prt_ts)
@@ -320,7 +320,7 @@ vhd_util_check_validate_parent(vhd_conte
VHD_OPEN_RDONLY | VHD_OPEN_IGNORE_DISABLED))
return "error opening parent";
- if (uuid_compare(vhd->header.prt_uuid, parent.footer.uuid)) {
+ if (blk_uuid_compare(&vhd->header.prt_uuid, &parent.footer.uuid)) {
msg = "invalid parent uuid";
goto out;
}
diff -r b51f9542ab14 tools/blktap2/vhd/lib/vhd-util-read.c
--- a/tools/blktap2/vhd/lib/vhd-util-read.c Wed Jun 24 11:17:11 2009 +0100
+++ b/tools/blktap2/vhd/lib/vhd-util-read.c Wed Jun 24 12:57:16 2009 +0200
@@ -78,7 +78,7 @@ vhd_print_header(vhd_context_t *vhd, vhd
(err ? "failed to read name" : name));
free(name);
- uuid_unparse(h->prt_uuid, uuid);
+ blk_uuid_to_string(&h->prt_uuid, (char **)&uuid);
printf("Parent UUID : %s\n", uuid);
vhd_time_to_string(h->prt_ts, time_str);
@@ -153,7 +153,7 @@ vhd_print_footer(vhd_footer_t *f, int he
printf("Checksum : 0x%x|0x%x (%s)\n", f->checksum, cksm,
f->checksum == cksm ? "Good!" : "Bad!");
- uuid_unparse(f->uuid, uuid);
+ blk_uuid_to_string(&f->uuid, (char **)&uuid);
printf("UUID : %s\n", uuid);
printf("Saved state : %s\n", f->saved == 0 ? "No" : "Yes");
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2009-06-24 12:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-23 12:29 [PATCH] blktap2: portability fixes Christoph Egger
2009-06-23 16:25 ` Keir Fraser
2009-06-24 12:24 ` Christoph Egger [this message]
2009-06-24 13:07 ` Keir Fraser
2009-06-24 13:57 ` Christoph Egger
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=200906241424.18133.Christoph.Egger@amd.com \
--to=christoph.egger@amd.com \
--cc=keir.fraser@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.