Re: [Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2

2010-11-12 Thread Jes Sorensen
On 11/08/10 07:44, M. Mohan Kumar wrote:
 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.hideto...@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)
 +{
 
 IMHO, this code can be moved to cutils.c

It's not a C utility function, so it really belongs in oslib-posix.c,
but otherwise I agree. This is emulation of a C library function, it
shouldn't be in the 9p code.

Cheers,
Jes
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH] virtio-9p: fix build on !CONFIG_UTIMENSAT v2

2010-11-07 Thread M. Mohan Kumar
 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.hideto...@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)
 +{

IMHO, this code can be moved to cutils.c

 +#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

The idea of introducing utimensat was to avoid resetting atime to 1970-01-01 
05:30:00 (utime does not give option to not change atime). But as per utimes 
man page, if any of the time field is 0, it would be set to current time. As 
per stat man page, truncate will not update atime, only mtime will be updated.
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html