From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:48121) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDJ3Z-0002t7-St for qemu-devel@nongnu.org; Mon, 10 Oct 2011 12:50:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RDJ3Y-0000As-DA for qemu-devel@nongnu.org; Mon, 10 Oct 2011 12:50:25 -0400 Received: from e8.ny.us.ibm.com ([32.97.182.138]:46996) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDJ3Y-0000Af-7s for qemu-devel@nongnu.org; Mon, 10 Oct 2011 12:50:24 -0400 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by e8.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p9AGZ2wO014905 for ; Mon, 10 Oct 2011 12:35:02 -0400 Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p9AGoM7r190674 for ; Mon, 10 Oct 2011 12:50:22 -0400 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p9AGoLTY005812 for ; Mon, 10 Oct 2011 12:50:22 -0400 From: "Aneesh Kumar K.V" In-Reply-To: <87r52kn6t2.fsf@linux.vnet.ibm.com> References: <1318242628-18729-1-git-send-email-wuzhy@linux.vnet.ibm.com> <87r52kn6t2.fsf@linux.vnet.ibm.com> Date: Mon, 10 Oct 2011 22:19:31 +0530 Message-ID: <87obxon65g.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH] virtio-9p: fix QEMU build break List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Zhi Yong Wu , qemu-devel@nongnu.org Cc: zwu.kernel@gmail.com, stefanha@linux.vnet.ibm.com, kvm@vger.kernel.org, jvrao@us.ibm.com On Mon, 10 Oct 2011 22:05:21 +0530, "Aneesh Kumar K.V" wrote: > On Mon, 10 Oct 2011 18:30:28 +0800, Zhi Yong Wu 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 +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) {