[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2
From: |
Hidetoshi Seto |
Subject: |
[Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2 |
Date: |
Fri, 05 Nov 2010 15:32:51 +0900 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6 |
This patch introduce a fallback mechanism for old systems that do not
support utimensat. This will fix build failure with following warnings:
hw/virtio-9p-local.c: In function 'local_utimensat':
hw/virtio-9p-local.c:479: warning: implicit declaration of function 'utimensat'
hw/virtio-9p-local.c:479: warning: nested extern declaration of 'utimensat'
and
hw/virtio-9p.c: In function 'v9fs_setattr_post_chmod':
hw/virtio-9p.c:1410: error: 'UTIME_NOW' undeclared (first use in this function)
hw/virtio-9p.c:1410: error: (Each undeclared identifier is reported only once
hw/virtio-9p.c:1410: error: for each function it appears in.)
hw/virtio-9p.c:1413: error: 'UTIME_OMIT' undeclared (first use in this function)
hw/virtio-9p.c: In function 'v9fs_wstat_post_chmod':
hw/virtio-9p.c:2905: error: 'UTIME_OMIT' undeclared (first use in this function)
Signed-off-by: Hidetoshi Seto <address@hidden>
---
hw/virtio-9p-local.c | 32 ++++++++++++++++++++++++++++++--
hw/virtio-9p.h | 10 ++++++++++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/hw/virtio-9p-local.c b/hw/virtio-9p-local.c
index 0d52020..7811d2c 100644
--- a/hw/virtio-9p-local.c
+++ b/hw/virtio-9p-local.c
@@ -479,10 +479,38 @@ static int local_chown(FsContext *fs_ctx, const char
*path, FsCred *credp)
return -1;
}
+/* TODO: relocate this to proper file, and make it more generic */
+static int qemu_utimensat(int dirfd, const char *path,
+ const struct timespec *times, int flags)
+{
+#ifdef CONFIG_UTIMENSAT
+ return utimensat(dirfd, path, times, flags);
+#else
+ /*
+ * Fallback: use utimes() instead of utimensat().
+ * See commit 74bc02b2d2272dc88fb98d43e631eb154717f517 for known problem.
+ */
+ struct timeval tv[2];
+ int i;
+
+ for (i = 0; i < 2; i++) {
+ if (times[i].tv_nsec == UTIME_OMIT || times[i].tv_nsec == UTIME_NOW) {
+ tv[i].tv_sec = 0;
+ tv[i].tv_usec = 0;
+ } else {
+ tv[i].tv_sec = times[i].tv_sec;
+ tv[i].tv_usec = times[i].tv_nsec / 1000;
+ }
+ }
+
+ return utimes(path, &tv[0]);
+#endif
+}
+
static int local_utimensat(FsContext *s, const char *path,
- const struct timespec *buf)
+ const struct timespec *buf)
{
- return utimensat(AT_FDCWD, rpath(s, path), buf, AT_SYMLINK_NOFOLLOW);
+ return qemu_utimensat(AT_FDCWD, rpath(s, path), buf, AT_SYMLINK_NOFOLLOW);
}
static int local_remove(FsContext *ctx, const char *path)
diff --git a/hw/virtio-9p.h b/hw/virtio-9p.h
index 6c23319..d448d8a 100644
--- a/hw/virtio-9p.h
+++ b/hw/virtio-9p.h
@@ -8,6 +8,16 @@
#include "file-op-9p.h"
+/* TODO: relocate this to proper file */
+#ifndef CONFIG_UTIMENSAT
+#ifndef UTIME_NOW
+# define UTIME_NOW ((1l << 30) - 1l)
+#endif
+#ifndef UTIME_OMIT
+# define UTIME_OMIT ((1l << 30) - 2l)
+#endif
+#endif
+
/* The feature bitmap for virtio 9P */
/* The mount point is specified in a config variable */
#define VIRTIO_9P_MOUNT_TAG 0
--
1.7.3.1
- Re: [Qemu-devel] qemu-kvm build issue on RHEL5.1, Chris Wright, 2010/11/04
- Re: [Qemu-devel] qemu-kvm build issue on RHEL5.1, Hidetoshi Seto, 2010/11/05
- [Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2,
Hidetoshi Seto <=
- Re: [Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2, M. Mohan Kumar, 2010/11/08
- [Qemu-devel] Re: [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2, Chris Wright, 2010/11/14
- Re: [Qemu-devel] Re: [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2, Hidetoshi Seto, 2010/11/14
- [Qemu-devel] [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT, Hidetoshi Seto, 2010/11/14
- [Qemu-devel] Re: [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT, Chris Wright, 2010/11/14
- [Qemu-devel] Re: [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT, M. Mohan Kumar, 2010/11/15
- Re: [Qemu-devel] [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT, Anthony Liguori, 2010/11/21
- Re: [Qemu-devel] [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT, Jes Sorensen, 2010/11/22