From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:41777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDZmm-0002EH-Dx for qemu-devel@nongnu.org; Tue, 11 Oct 2011 06:42:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RDZmf-0001Kf-EJ for qemu-devel@nongnu.org; Tue, 11 Oct 2011 06:42:12 -0400 Received: from e23smtp06.au.ibm.com ([202.81.31.148]:50551) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDZme-0001Jx-Th for qemu-devel@nongnu.org; Tue, 11 Oct 2011 06:42:05 -0400 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [202.81.31.247]) by e23smtp06.au.ibm.com (8.14.4/8.13.1) with ESMTP id p9BAeho8007463 for ; Tue, 11 Oct 2011 21:40:43 +1100 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p9BAdWYw1097860 for ; Tue, 11 Oct 2011 21:39:32 +1100 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p9BAfsjo022698 for ; Tue, 11 Oct 2011 21:41:54 +1100 From: "Aneesh Kumar K.V" Date: Tue, 11 Oct 2011 16:11:36 +0530 Message-Id: <1318329705-3179-5-git-send-email-aneesh.kumar@linux.vnet.ibm.com> In-Reply-To: <1318329705-3179-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> References: <1318329705-3179-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH -V2 04/13] hw/9pfs: Fix build error on platform that don't support futimens List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, "Aneesh Kumar K.V" From: "Aneesh Kumar K.V" Also don't do glibc version check to find handle support. Instead do handle syscall support in configure. Signed-off-by: Aneesh Kumar K.V --- configure | 16 +++++++++++++ hw/9pfs/virtio-9p-handle.c | 52 ++++++++++++++++++++----------------------- 2 files changed, 40 insertions(+), 28 deletions(-) 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 441a37f..fbe3e62 100644 --- a/hw/9pfs/virtio-9p-handle.c +++ b/hw/9pfs/virtio-9p-handle.c @@ -27,13 +27,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, (struct file_handle *)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 */ @@ -42,28 +53,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) { @@ -376,7 +365,9 @@ static int handle_chown(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp) static int handle_utimensat(FsContext *ctx, V9fsPath *fs_path, const struct timespec *buf) { - int fd, ret; + int ret; +#ifdef CONFIG_UTIMENSAT + int fd; struct handle_data *data = (struct handle_data *)ctx->private; fd = open_by_handle(data->mountfd, fs_path->data, O_NONBLOCK); @@ -385,6 +376,10 @@ static int handle_utimensat(FsContext *ctx, V9fsPath *fs_path, } ret = futimens(fd, buf); close(fd); +#else + ret = -1; + errno = ENOSYS; +#endif return ret; } @@ -560,6 +555,7 @@ static int handle_init(FsContext *ctx) int ret, mnt_id; struct file_handle fh; struct handle_data *data = g_malloc(sizeof(struct handle_data)); + data->mountfd = open(ctx->fs_root, O_DIRECTORY); if (data->mountfd < 0) { ret = data->mountfd; -- 1.7.5.4