From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: kvm@vger.kernel.org, stefanha@linux.vnet.ibm.com,
jvrao@us.ibm.com, zwu.kernel@gmail.com,
Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Subject: Re: [PATCH] virtio-9p: fix QEMU build break
Date: Mon, 10 Oct 2011 22:19:31 +0530 [thread overview]
Message-ID: <87obxon65g.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <87r52kn6t2.fsf@linux.vnet.ibm.com>
On Mon, 10 Oct 2011 22:05:21 +0530, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> wrote:
> On Mon, 10 Oct 2011 18:30:28 +0800, Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> wrote:
> > qemu build break due to the redefinition of struct file_handle. My qemu.git/HEAD is 8acbc9b21d757a6be4f8492e547b8159703a0547
> >
> > Below is the log:
> > [root@f15 qemu]# make
> > CC qapi-generated/qga-qapi-types.o
> > LINK qemu-ga
> > CC libhw64/9pfs/virtio-9p-handle.o
> > /home/zwu/work/virt/qemu/hw/9pfs/virtio-9p-handle.c:31:8: error: redefinition of "struct file_handle"
> > /usr/include/bits/fcntl.h:254:8: note: originally defined here
> > make[1]: *** [9pfs/virtio-9p-handle.o] Error 1
> > make: *** [subdir-libhw64] Error 2
> >
> > [root@f15 qemu]# rpm -qf /usr/include/bits/fcntl.h
> > glibc-headers-2.13.90-9.x86_64
> >
>
> Is this a backported glibc ? On my ubuntu system glibc 2.13 doesn't
> provide struct file_handle. I also checked glib repo at
> http://repo.or.cz/w/glibc.git. The commit introducing struct file_handle
> is
>
> $ git describe --contains 158648c0bdda281e252a27c0200dd0ea6f4e0215
> glibc-2.14~200
>
>
How about the below patch. This means that handle driver will only work
with latest glibc. Even if i have latest kernel, with an older glibc
handle fs driver backed will be disabled.
diff --git a/configure b/configure
index 24b8df4..0216c53 100755
--- a/configure
+++ b/configure
@@ -2551,6 +2551,18 @@ EOF
fi
##########################################
+# check if we have open_by_handle_at
+
+open_by_hande_at=no
+cat > $TMPC << EOF
+#include <fcntl.h>
+int main(void) { struct file_handle *fh; open_by_handle_at(0, fh, 0); }
+EOF
+if compile_prog "" "" ; then
+ open_by_handle_at=yes
+fi
+
+##########################################
# End of CC checks
# After here, no more $cc or $ld runs
@@ -3029,6 +3041,10 @@ if test "$ucontext_coroutine" = "yes" ; then
echo "CONFIG_UCONTEXT_COROUTINE=y" >> $config_host_mak
fi
+if test "$open_by_handle_at" = "yes" ; then
+ echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
+fi
+
# USB host support
case "$usb" in
linux)
diff --git a/hw/9pfs/virtio-9p-handle.c b/hw/9pfs/virtio-9p-handle.c
index 68e1d9b..bd73d31 100644
--- a/hw/9pfs/virtio-9p-handle.c
+++ b/hw/9pfs/virtio-9p-handle.c
@@ -30,13 +30,24 @@ struct handle_data {
int handle_bytes;
};
-#if __GLIBC__ <= 2 && __GLIBC_MINOR__ < 14
+#ifdef CONFIG_OPEN_BY_HANDLE
+static inline int name_to_handle(int dirfd, const char *name,
+ struct file_handle *fh, int *mnt_id, int flags)
+{
+ return name_to_handle_at(dirfd, name, fh, mnt_id, flags);
+}
+
+static inline int open_by_handle(int mountfd, const char *fh, int flags)
+{
+ return open_by_handle_at(mountfd, fh, flags);
+}
+#else
+
struct file_handle {
- unsigned int handle_bytes;
- int handle_type;
- unsigned char handle[0];
+ unsigned int handle_bytes;
+ int handle_type;
+ unsigned char handle[0];
};
-#endif
#ifndef AT_EMPTY_PATH
#define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname */
@@ -45,28 +56,6 @@ struct file_handle {
#define O_PATH 010000000
#endif
-#ifndef __NR_name_to_handle_at
-#if defined(__i386__)
-#define __NR_name_to_handle_at 341
-#define __NR_open_by_handle_at 342
-#elif defined(__x86_64__)
-#define __NR_name_to_handle_at 303
-#define __NR_open_by_handle_at 304
-#endif
-#endif
-
-#ifdef __NR_name_to_handle_at
-static inline int name_to_handle(int dirfd, const char *name,
- struct file_handle *fh, int *mnt_id, int flags)
-{
- return syscall(__NR_name_to_handle_at, dirfd, name, fh, mnt_id, flags);
-}
-
-static inline int open_by_handle(int mountfd, const char *fh, int flags)
-{
- return syscall(__NR_open_by_handle_at, mountfd, fh, flags);
-}
-#else
static inline int name_to_handle(int dirfd, const char *name,
struct file_handle *fh, int *mnt_id, int flags)
{
WARNING: multiple messages have this Message-ID (diff)
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: zwu.kernel@gmail.com, stefanha@linux.vnet.ibm.com,
kvm@vger.kernel.org, jvrao@us.ibm.com
Subject: Re: [Qemu-devel] [PATCH] virtio-9p: fix QEMU build break
Date: Mon, 10 Oct 2011 22:19:31 +0530 [thread overview]
Message-ID: <87obxon65g.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <87r52kn6t2.fsf@linux.vnet.ibm.com>
On Mon, 10 Oct 2011 22:05:21 +0530, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> wrote:
> On Mon, 10 Oct 2011 18:30:28 +0800, Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> wrote:
> > qemu build break due to the redefinition of struct file_handle. My qemu.git/HEAD is 8acbc9b21d757a6be4f8492e547b8159703a0547
> >
> > Below is the log:
> > [root@f15 qemu]# make
> > CC qapi-generated/qga-qapi-types.o
> > LINK qemu-ga
> > CC libhw64/9pfs/virtio-9p-handle.o
> > /home/zwu/work/virt/qemu/hw/9pfs/virtio-9p-handle.c:31:8: error: redefinition of "struct file_handle"
> > /usr/include/bits/fcntl.h:254:8: note: originally defined here
> > make[1]: *** [9pfs/virtio-9p-handle.o] Error 1
> > make: *** [subdir-libhw64] Error 2
> >
> > [root@f15 qemu]# rpm -qf /usr/include/bits/fcntl.h
> > glibc-headers-2.13.90-9.x86_64
> >
>
> Is this a backported glibc ? On my ubuntu system glibc 2.13 doesn't
> provide struct file_handle. I also checked glib repo at
> http://repo.or.cz/w/glibc.git. The commit introducing struct file_handle
> is
>
> $ git describe --contains 158648c0bdda281e252a27c0200dd0ea6f4e0215
> glibc-2.14~200
>
>
How about the below patch. This means that handle driver will only work
with latest glibc. Even if i have latest kernel, with an older glibc
handle fs driver backed will be disabled.
diff --git a/configure b/configure
index 24b8df4..0216c53 100755
--- a/configure
+++ b/configure
@@ -2551,6 +2551,18 @@ EOF
fi
##########################################
+# check if we have open_by_handle_at
+
+open_by_hande_at=no
+cat > $TMPC << EOF
+#include <fcntl.h>
+int main(void) { struct file_handle *fh; open_by_handle_at(0, fh, 0); }
+EOF
+if compile_prog "" "" ; then
+ open_by_handle_at=yes
+fi
+
+##########################################
# End of CC checks
# After here, no more $cc or $ld runs
@@ -3029,6 +3041,10 @@ if test "$ucontext_coroutine" = "yes" ; then
echo "CONFIG_UCONTEXT_COROUTINE=y" >> $config_host_mak
fi
+if test "$open_by_handle_at" = "yes" ; then
+ echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
+fi
+
# USB host support
case "$usb" in
linux)
diff --git a/hw/9pfs/virtio-9p-handle.c b/hw/9pfs/virtio-9p-handle.c
index 68e1d9b..bd73d31 100644
--- a/hw/9pfs/virtio-9p-handle.c
+++ b/hw/9pfs/virtio-9p-handle.c
@@ -30,13 +30,24 @@ struct handle_data {
int handle_bytes;
};
-#if __GLIBC__ <= 2 && __GLIBC_MINOR__ < 14
+#ifdef CONFIG_OPEN_BY_HANDLE
+static inline int name_to_handle(int dirfd, const char *name,
+ struct file_handle *fh, int *mnt_id, int flags)
+{
+ return name_to_handle_at(dirfd, name, fh, mnt_id, flags);
+}
+
+static inline int open_by_handle(int mountfd, const char *fh, int flags)
+{
+ return open_by_handle_at(mountfd, fh, flags);
+}
+#else
+
struct file_handle {
- unsigned int handle_bytes;
- int handle_type;
- unsigned char handle[0];
+ unsigned int handle_bytes;
+ int handle_type;
+ unsigned char handle[0];
};
-#endif
#ifndef AT_EMPTY_PATH
#define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname */
@@ -45,28 +56,6 @@ struct file_handle {
#define O_PATH 010000000
#endif
-#ifndef __NR_name_to_handle_at
-#if defined(__i386__)
-#define __NR_name_to_handle_at 341
-#define __NR_open_by_handle_at 342
-#elif defined(__x86_64__)
-#define __NR_name_to_handle_at 303
-#define __NR_open_by_handle_at 304
-#endif
-#endif
-
-#ifdef __NR_name_to_handle_at
-static inline int name_to_handle(int dirfd, const char *name,
- struct file_handle *fh, int *mnt_id, int flags)
-{
- return syscall(__NR_name_to_handle_at, dirfd, name, fh, mnt_id, flags);
-}
-
-static inline int open_by_handle(int mountfd, const char *fh, int flags)
-{
- return syscall(__NR_open_by_handle_at, mountfd, fh, flags);
-}
-#else
static inline int name_to_handle(int dirfd, const char *name,
struct file_handle *fh, int *mnt_id, int flags)
{
next prev parent reply other threads:[~2011-10-10 16:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-10 10:30 [PATCH] virtio-9p: fix QEMU build break Zhi Yong Wu
2011-10-10 10:30 ` [Qemu-devel] " Zhi Yong Wu
2011-10-10 16:35 ` Aneesh Kumar K.V
2011-10-10 16:35 ` [Qemu-devel] " Aneesh Kumar K.V
2011-10-10 16:49 ` Aneesh Kumar K.V [this message]
2011-10-10 16:49 ` Aneesh Kumar K.V
2011-10-11 6:09 ` Zhi Yong Wu
2011-10-11 6:09 ` [Qemu-devel] " Zhi Yong Wu
2011-10-18 3:46 ` David Gibson
2011-10-18 3:46 ` David Gibson
2011-10-18 4:59 ` Aneesh Kumar K.V
2011-10-18 4:59 ` [Qemu-devel] " Aneesh Kumar K.V
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=87obxon65g.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=jvrao@us.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
--cc=wuzhy@linux.vnet.ibm.com \
--cc=zwu.kernel@gmail.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.