* [Qemu-devel] [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT
@ 2010-11-24 2:38 Hidetoshi Seto
2010-11-24 8:01 ` [Qemu-devel] " Jes Sorensen
0 siblings, 1 reply; 4+ messages in thread
From: Hidetoshi Seto @ 2010-11-24 2:38 UTC (permalink / raw)
To: qemu-devel@nongnu.org
Cc: Blue Swirl, kvm@vger.kernel.org, Philipp Hahn, Jes Sorensen,
Hao, Xudong, Chris Wright, M. Mohan Kumar, Avi Kivity
This patch introduce a fallback mechanism for old systems that do not
support utimensat(). This 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)
[NOTE: At this time virtio-9p is only user of utimensat(), and is available
only when host is linux and CONFIG_VIRTFS is defined. So there are
no similar warning for win32. Please provide a wrapper for win32 in
oslib-win32.c if new user really requires it.]
v5:
- Allow fallback on runtime
- Move qemu_utimensat() to oslib-posix.c
- Rebased on latest qemu.git
v4:
- Use tv_now.tv_usec
v3:
- Use better alternative handling for UTIME_NOW/OMIT
- Move qemu_utimensat() to cutils.c
V2:
- Introduce qemu_utimensat()
Acked-by: Chris Wright <chrisw@sous-sol.org>
Acked-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
---
hw/virtio-9p-local.c | 4 ++--
oslib-posix.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
qemu-os-posix.h | 12 ++++++++++++
3 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/hw/virtio-9p-local.c b/hw/virtio-9p-local.c
index 0d52020..41603ea 100644
--- a/hw/virtio-9p-local.c
+++ b/hw/virtio-9p-local.c
@@ -480,9 +480,9 @@ static int local_chown(FsContext *fs_ctx, const char *path, FsCred *credp)
}
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/oslib-posix.c b/oslib-posix.c
index 727dee1..edd4ddf 100644
--- a/oslib-posix.c
+++ b/oslib-posix.c
@@ -111,3 +111,51 @@ int qemu_pipe(int pipefd[2])
return ret;
}
+
+int qemu_utimensat(int dirfd, const char *path, const struct timespec *times,
+ int flags)
+{
+ struct timeval tv[2], tv_now;
+ struct stat st;
+ int i;
+#ifdef CONFIG_UTIMENSAT
+ int ret;
+
+ ret = utimensat(dirfd, path, times, flags);
+ if (ret != -1 || errno != ENOSYS) {
+ return ret;
+ }
+#endif
+ /* Fallback: use utimes() instead of utimensat() */
+
+ /* happy if special cases */
+ if (times[0].tv_nsec == UTIME_OMIT && times[1].tv_nsec == UTIME_OMIT) {
+ return 0;
+ }
+ if (times[0].tv_nsec == UTIME_NOW && times[1].tv_nsec == UTIME_NOW) {
+ return utimes(path, NULL);
+ }
+
+ /* prepare for hard cases */
+ if (times[0].tv_nsec == UTIME_NOW || times[1].tv_nsec == UTIME_NOW) {
+ gettimeofday(&tv_now, NULL);
+ }
+ if (times[0].tv_nsec == UTIME_OMIT || times[1].tv_nsec == UTIME_OMIT) {
+ stat(path, &st);
+ }
+
+ for (i = 0; i < 2; i++) {
+ if (times[i].tv_nsec == UTIME_NOW) {
+ tv[i].tv_sec = tv_now.tv_sec;
+ tv[i].tv_usec = tv_now.tv_usec;
+ } else if (times[i].tv_nsec == UTIME_OMIT) {
+ tv[i].tv_sec = (i == 0) ? st.st_atime : st.st_mtime;
+ 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]);
+}
diff --git a/qemu-os-posix.h b/qemu-os-posix.h
index 353f878..81fd9ab 100644
--- a/qemu-os-posix.h
+++ b/qemu-os-posix.h
@@ -39,4 +39,16 @@ void os_setup_post(void);
typedef struct timeval qemu_timeval;
#define qemu_gettimeofday(tp) gettimeofday(tp, NULL)
+#ifndef CONFIG_UTIMENSAT
+#ifndef UTIME_NOW
+# define UTIME_NOW ((1l << 30) - 1l)
+#endif
+#ifndef UTIME_OMIT
+# define UTIME_OMIT ((1l << 30) - 2l)
+#endif
+#endif
+typedef struct timespec qemu_timespec;
+int qemu_utimensat(int dirfd, const char *path, const qemu_timespec *times,
+ int flags);
+
#endif
--
1.6.5.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] Re: [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT
2010-11-24 2:38 [Qemu-devel] [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT Hidetoshi Seto
@ 2010-11-24 8:01 ` Jes Sorensen
2010-12-01 1:16 ` Hidetoshi Seto
0 siblings, 1 reply; 4+ messages in thread
From: Jes Sorensen @ 2010-11-24 8:01 UTC (permalink / raw)
To: Hidetoshi Seto
Cc: Blue Swirl, kvm@vger.kernel.org, Philipp Hahn, Hao, Xudong,
qemu-devel@nongnu.org, Chris Wright, M. Mohan Kumar, Avi Kivity
On 11/24/10 03:38, Hidetoshi Seto wrote:
> This patch introduce a fallback mechanism for old systems that do not
> support utimensat(). This 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)
>
> [NOTE: At this time virtio-9p is only user of utimensat(), and is available
> only when host is linux and CONFIG_VIRTFS is defined. So there are
> no similar warning for win32. Please provide a wrapper for win32 in
> oslib-win32.c if new user really requires it.]
>
> v5:
> - Allow fallback on runtime
> - Move qemu_utimensat() to oslib-posix.c
> - Rebased on latest qemu.git
> v4:
> - Use tv_now.tv_usec
> v3:
> - Use better alternative handling for UTIME_NOW/OMIT
> - Move qemu_utimensat() to cutils.c
> V2:
> - Introduce qemu_utimensat()
>
> Acked-by: Chris Wright <chrisw@sous-sol.org>
> Acked-by: M. Mohan Kumar <mohan@in.ibm.com>
> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
> ---
> hw/virtio-9p-local.c | 4 ++--
> oslib-posix.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
> qemu-os-posix.h | 12 ++++++++++++
> 3 files changed, 62 insertions(+), 2 deletions(-)
Hi Hidetoshi,
This looks good to me!
Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Cheers,
Jes
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Re: [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT
2010-11-24 8:01 ` [Qemu-devel] " Jes Sorensen
@ 2010-12-01 1:16 ` Hidetoshi Seto
2010-12-01 18:17 ` Venkateswararao Jujjuri (JV)
0 siblings, 1 reply; 4+ messages in thread
From: Hidetoshi Seto @ 2010-12-01 1:16 UTC (permalink / raw)
To: Jes Sorensen
Cc: Chris Wright, kvm@vger.kernel.org, Philipp Hahn, Hao, Xudong,
qemu-devel@nongnu.org, Blue Swirl, M. Mohan Kumar, Avi Kivity
Ping.
Maintainers, please tell me if still something is required for
this patch before applying it.
Thanks,
H.Seto
(2010/11/24 17:01), Jes Sorensen wrote:
> On 11/24/10 03:38, Hidetoshi Seto wrote:
>> This patch introduce a fallback mechanism for old systems that do not
>> support utimensat(). This 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)
>>
>> [NOTE: At this time virtio-9p is only user of utimensat(), and is available
>> only when host is linux and CONFIG_VIRTFS is defined. So there are
>> no similar warning for win32. Please provide a wrapper for win32 in
>> oslib-win32.c if new user really requires it.]
>>
>> v5:
>> - Allow fallback on runtime
>> - Move qemu_utimensat() to oslib-posix.c
>> - Rebased on latest qemu.git
>> v4:
>> - Use tv_now.tv_usec
>> v3:
>> - Use better alternative handling for UTIME_NOW/OMIT
>> - Move qemu_utimensat() to cutils.c
>> V2:
>> - Introduce qemu_utimensat()
>>
>> Acked-by: Chris Wright <chrisw@sous-sol.org>
>> Acked-by: M. Mohan Kumar <mohan@in.ibm.com>
>> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
>> ---
>> hw/virtio-9p-local.c | 4 ++--
>> oslib-posix.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>> qemu-os-posix.h | 12 ++++++++++++
>> 3 files changed, 62 insertions(+), 2 deletions(-)
>
> Hi Hidetoshi,
>
> This looks good to me!
>
> Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
>
> Cheers,
> Jes
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Re: [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT
2010-12-01 1:16 ` Hidetoshi Seto
@ 2010-12-01 18:17 ` Venkateswararao Jujjuri (JV)
0 siblings, 0 replies; 4+ messages in thread
From: Venkateswararao Jujjuri (JV) @ 2010-12-01 18:17 UTC (permalink / raw)
To: Hidetoshi Seto
Cc: Blue Swirl, kvm@vger.kernel.org, Philipp Hahn, Jes Sorensen,
Hao, Xudong, qemu-devel@nongnu.org, Chris Wright, M. Mohan Kumar,
Avi Kivity
On 11/30/2010 5:16 PM, Hidetoshi Seto wrote:
> Ping.
>
> Maintainers, please tell me if still something is required for
> this patch before applying it.
With Jes's Ack it should be good to go.
I will included it in my next pull request to Anthony..and
during that time if I see any issues I will let you know.
Thanks for working on it.
JV.
>
>
> Thanks,
> H.Seto
>
> (2010/11/24 17:01), Jes Sorensen wrote:
>> On 11/24/10 03:38, Hidetoshi Seto wrote:
>>> This patch introduce a fallback mechanism for old systems that do not
>>> support utimensat(). This 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)
>>>
>>> [NOTE: At this time virtio-9p is only user of utimensat(), and is available
>>> only when host is linux and CONFIG_VIRTFS is defined. So there are
>>> no similar warning for win32. Please provide a wrapper for win32 in
>>> oslib-win32.c if new user really requires it.]
>>>
>>> v5:
>>> - Allow fallback on runtime
>>> - Move qemu_utimensat() to oslib-posix.c
>>> - Rebased on latest qemu.git
>>> v4:
>>> - Use tv_now.tv_usec
>>> v3:
>>> - Use better alternative handling for UTIME_NOW/OMIT
>>> - Move qemu_utimensat() to cutils.c
>>> V2:
>>> - Introduce qemu_utimensat()
>>>
>>> Acked-by: Chris Wright <chrisw@sous-sol.org>
>>> Acked-by: M. Mohan Kumar <mohan@in.ibm.com>
>>> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
>>> ---
>>> hw/virtio-9p-local.c | 4 ++--
>>> oslib-posix.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>>> qemu-os-posix.h | 12 ++++++++++++
>>> 3 files changed, 62 insertions(+), 2 deletions(-)
>>
>> Hi Hidetoshi,
>>
>> This looks good to me!
>>
>> Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
>>
>> Cheers,
>> Jes
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-12-01 18:17 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-24 2:38 [Qemu-devel] [PATCH v5] virtio-9p: fix build on !CONFIG_UTIMENSAT Hidetoshi Seto
2010-11-24 8:01 ` [Qemu-devel] " Jes Sorensen
2010-12-01 1:16 ` Hidetoshi Seto
2010-12-01 18:17 ` Venkateswararao Jujjuri (JV)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).