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;
 }

Reply via email to