From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
To: Chris Wright <chrisw@sous-sol.org>
Cc: Blue Swirl <blauwirbel@gmail.com>,
"Hao, Xudong" <xudong.hao@intel.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
Avi Kivity <avi@redhat.com>
Subject: [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2
Date: Fri, 05 Nov 2010 15:32:51 +0900 [thread overview]
Message-ID: <4CD3A513.2010102@jp.fujitsu.com> (raw)
In-Reply-To: <20101104170303.GE15211@sequoia.sous-sol.org>
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 <seto.hidetoshi@jp.fujitsu.com>
---
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
next prev parent reply other threads:[~2010-11-05 6:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <BC00F5384FCFC9499AF06F92E8B78A9E1AC3EFA17E@shsmsx502.ccr.corp.intel.com>
2010-10-13 8:00 ` [Qemu-devel] qemu-kvm build issue on RHEL5.1 Hidetoshi Seto
2010-10-13 8:13 ` Hao, Xudong
2010-10-13 19:11 ` Blue Swirl
2010-10-14 0:33 ` Hidetoshi Seto
2010-11-04 17:03 ` Chris Wright
2010-11-05 6:32 ` Hidetoshi Seto
2010-11-05 6:32 ` Hidetoshi Seto [this message]
2010-11-08 6:44 ` [Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2 M. Mohan Kumar
2010-11-12 12:33 ` Jes Sorensen
2010-11-14 5:58 ` Chris Wright
2010-11-15 2:10 ` [Qemu-devel] " Hidetoshi Seto
2010-11-15 2:15 ` [PATCH v3] virtio-9p: fix build on !CONFIG_UTIMENSAT Hidetoshi Seto
2010-11-15 3:36 ` Chris Wright
2010-11-15 16:49 ` M. Mohan Kumar
2010-11-21 15:22 ` [Qemu-devel] " Anthony Liguori
2010-11-22 6:28 ` Jes Sorensen
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=4CD3A513.2010102@jp.fujitsu.com \
--to=seto.hidetoshi@jp.fujitsu.com \
--cc=avi@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=chrisw@sous-sol.org \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=xudong.hao@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox