Module Name: src
Committed By: uch
Date: Wed Jul 13 12:22:49 UTC 2011
Modified Files:
src/sys/fs/v7fs: v7fs_vnops.c
Log Message:
Fix inode update method. chown and chmod works.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/fs/v7fs/v7fs_vnops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/fs/v7fs/v7fs_vnops.c
diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.1 src/sys/fs/v7fs/v7fs_vnops.c:1.2
--- src/sys/fs/v7fs/v7fs_vnops.c:1.1 Mon Jun 27 11:52:25 2011
+++ src/sys/fs/v7fs/v7fs_vnops.c Wed Jul 13 12:22:49 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vnops.c,v 1.1 2011/06/27 11:52:25 uch Exp $ */
+/* $NetBSD: v7fs_vnops.c,v 1.2 2011/07/13 12:22:49 uch Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.1 2011/06/27 11:52:25 uch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.2 2011/07/13 12:22:49 uch Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -439,7 +439,9 @@
struct v7fs_node *v7node = vp->v_data;
struct v7fs_self *fs = v7node->v7fsmount->core;
struct v7fs_inode *inode = &v7node->inode;
+ struct timespec *acc, *mod;
int error = 0;
+ acc = mod = NULL;
DPRINTF("\n");
@@ -476,20 +478,28 @@
uvm_vnp_setsize(vp, vap->va_size);
}
- if (vap->va_uid != (uid_t)VNOVAL)
+ if (vap->va_uid != (uid_t)VNOVAL) {
inode->uid = vap->va_uid;
- if (vap->va_gid != (uid_t)VNOVAL)
+ }
+ if (vap->va_gid != (uid_t)VNOVAL) {
inode->gid = vap->va_gid;
- if (vap->va_mode != (mode_t)VNOVAL)
+ }
+ if (vap->va_mode != (mode_t)VNOVAL) {
v7fs_inode_chmod(inode, vap->va_mode);
- if (vap->va_atime.tv_sec != VNOVAL)
- inode->atime = vap->va_atime.tv_sec;
- if (vap->va_mtime.tv_sec != VNOVAL)
- inode->mtime = vap->va_mtime.tv_sec;
- if (vap->va_ctime.tv_sec != VNOVAL)
- inode->ctime = vap->va_ctime.tv_sec;
+ }
+ if (vap->va_atime.tv_sec != VNOVAL) {
+ acc = &vap->va_atime;
+ }
+ if (vap->va_mtime.tv_sec != VNOVAL) {
+ mod = &vap->va_mtime;
+ v7node->update_mtime = true;
+ }
+ if (vap->va_ctime.tv_sec != VNOVAL) {
+ v7node->update_ctime = true;
+ }
- v7fs_update(vp, 0, 0, 0);
+ v7node->update_atime = true;
+ v7fs_update(vp, acc, mod, 0);
return error;
}