Module Name: src Committed By: christos Date: Fri Nov 18 21:18:52 UTC 2011
Modified Files: src/sys/fs/nilfs: nilfs_vnops.c src/sys/fs/ptyfs: ptyfs_vnops.c src/sys/fs/puffs: puffs_vnops.c src/sys/fs/tmpfs: tmpfs_vnops.c src/sys/fs/udf: udf_vnops.c src/sys/ufs/ext2fs: ext2fs_readwrite.c ext2fs_vnops.c src/sys/ufs/ufs: ufs_readwrite.c ufs_vnops.c Log Message: Obey MNT_RELATIME, the only addition is that mkdir in ufs sets IN_ACCESS too. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/fs/nilfs/nilfs_vnops.c cvs rdiff -u -r1.36 -r1.37 src/sys/fs/ptyfs/ptyfs_vnops.c cvs rdiff -u -r1.161 -r1.162 src/sys/fs/puffs/puffs_vnops.c cvs rdiff -u -r1.92 -r1.93 src/sys/fs/tmpfs/tmpfs_vnops.c cvs rdiff -u -r1.68 -r1.69 src/sys/fs/udf/udf_vnops.c cvs rdiff -u -r1.57 -r1.58 src/sys/ufs/ext2fs/ext2fs_readwrite.c cvs rdiff -u -r1.100 -r1.101 src/sys/ufs/ext2fs/ext2fs_vnops.c cvs rdiff -u -r1.99 -r1.100 src/sys/ufs/ufs/ufs_readwrite.c cvs rdiff -u -r1.205 -r1.206 src/sys/ufs/ufs/ufs_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/nilfs/nilfs_vnops.c diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.15 src/sys/fs/nilfs/nilfs_vnops.c:1.16 --- src/sys/fs/nilfs/nilfs_vnops.c:1.15 Sun Oct 16 08:41:45 2011 +++ src/sys/fs/nilfs/nilfs_vnops.c Fri Nov 18 16:18:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: nilfs_vnops.c,v 1.15 2011/10/16 12:41:45 hannken Exp $ */ +/* $NetBSD: nilfs_vnops.c,v 1.16 2011/11/18 21:18:50 christos Exp $ */ /* * Copyright (c) 2008, 2009 Reinoud Zandijk @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.15 2011/10/16 12:41:45 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.16 2011/11/18 21:18:50 christos Exp $"); #endif /* not lint */ @@ -280,6 +280,8 @@ return EIO; /* mark node changed and request update */ nilfs_node->i_flags |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + nilfs_node->i_flags |= IN_ACCESS; /* * XXX TODO FFS has code here to reset setuid & setgid when we're not Index: src/sys/fs/ptyfs/ptyfs_vnops.c diff -u src/sys/fs/ptyfs/ptyfs_vnops.c:1.36 src/sys/fs/ptyfs/ptyfs_vnops.c:1.37 --- src/sys/fs/ptyfs/ptyfs_vnops.c:1.36 Fri Sep 16 14:43:44 2011 +++ src/sys/fs/ptyfs/ptyfs_vnops.c Fri Nov 18 16:18:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ptyfs_vnops.c,v 1.36 2011/09/16 18:43:44 christos Exp $ */ +/* $NetBSD: ptyfs_vnops.c,v 1.37 2011/11/18 21:18:50 christos Exp $ */ /* * Copyright (c) 1993, 1995 @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.36 2011/09/16 18:43:44 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.37 2011/11/18 21:18:50 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -426,8 +426,11 @@ ptyfs_setattr(void *v) if (vap->va_atime.tv_sec != VNOVAL) if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) ptyfs->ptyfs_flag |= PTYFS_ACCESS; - if (vap->va_mtime.tv_sec != VNOVAL) + if (vap->va_mtime.tv_sec != VNOVAL) { ptyfs->ptyfs_flag |= PTYFS_CHANGE | PTYFS_MODIFY; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ptyfs->ptyfs_flag |= PTYFS_ACCESS; + } if (vap->va_birthtime.tv_sec != VNOVAL) ptyfs->ptyfs_birthtime = vap->va_birthtime; ptyfs->ptyfs_flag |= PTYFS_CHANGE; Index: src/sys/fs/puffs/puffs_vnops.c diff -u src/sys/fs/puffs/puffs_vnops.c:1.161 src/sys/fs/puffs/puffs_vnops.c:1.162 --- src/sys/fs/puffs/puffs_vnops.c:1.161 Sun Oct 30 09:24:13 2011 +++ src/sys/fs/puffs/puffs_vnops.c Fri Nov 18 16:18:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_vnops.c,v 1.161 2011/10/30 13:24:13 hannken Exp $ */ +/* $NetBSD: puffs_vnops.c,v 1.162 2011/11/18 21:18:50 christos Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.161 2011/10/30 13:24:13 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.162 2011/11/18 21:18:50 christos Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -1967,6 +1967,8 @@ puffs_vnop_write(void *v) origoff = uio->uio_offset; while (uio->uio_resid > 0) { + if (vp->v_mount->mnt_flag & MNT_RELATIME) + uflags |= PUFFS_UPDATEATIME; uflags |= PUFFS_UPDATECTIME; uflags |= PUFFS_UPDATEMTIME; oldoff = uio->uio_offset; Index: src/sys/fs/tmpfs/tmpfs_vnops.c diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.92 src/sys/fs/tmpfs/tmpfs_vnops.c:1.93 --- src/sys/fs/tmpfs/tmpfs_vnops.c:1.92 Mon Sep 26 21:32:21 2011 +++ src/sys/fs/tmpfs/tmpfs_vnops.c Fri Nov 18 16:18:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: tmpfs_vnops.c,v 1.92 2011/09/27 01:32:21 christos Exp $ */ +/* $NetBSD: tmpfs_vnops.c,v 1.93 2011/11/18 21:18:51 christos Exp $ */ /* * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.92 2011/09/27 01:32:21 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.93 2011/11/18 21:18:51 christos Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -2465,8 +2465,11 @@ tmpfs_getpages(void *v) if ((vp->v_mount->mnt_flag & MNT_NOATIME) == 0) node->tn_status |= TMPFS_NODE_ACCESSED; - if ((access_type & VM_PROT_WRITE) != 0) + if ((access_type & VM_PROT_WRITE) != 0) { node->tn_status |= TMPFS_NODE_MODIFIED; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + node->tn_status |= TMPFS_NODE_ACCESSED; + } } /* Index: src/sys/fs/udf/udf_vnops.c diff -u src/sys/fs/udf/udf_vnops.c:1.68 src/sys/fs/udf/udf_vnops.c:1.69 --- src/sys/fs/udf/udf_vnops.c:1.68 Tue Oct 18 16:20:29 2011 +++ src/sys/fs/udf/udf_vnops.c Fri Nov 18 16:18:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_vnops.c,v 1.68 2011/10/18 20:20:29 hannken Exp $ */ +/* $NetBSD: udf_vnops.c,v 1.69 2011/11/18 21:18:51 christos Exp $ */ /* * Copyright (c) 2006, 2008 Reinoud Zandijk @@ -32,7 +32,7 @@ #include <sys/cdefs.h> #ifndef lint -__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.68 2011/10/18 20:20:29 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.69 2011/11/18 21:18:51 christos Exp $"); #endif /* not lint */ @@ -376,6 +376,8 @@ udf_write(void *v) /* mark node changed and request update */ udf_node->i_flags |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + udf_node->i_flags |= IN_ACCESS; /* * XXX TODO FFS has code here to reset setuid & setgid when we're not @@ -977,6 +979,8 @@ udf_chown(struct vnode *vp, uid_t new_ui /* mark node changed */ udf_node->i_flags |= IN_CHANGE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + udf_node->i_flags |= IN_ACCESS; return 0; } @@ -1013,6 +1017,8 @@ udf_chmod(struct vnode *vp, mode_t mode, /* mark node changed */ udf_node->i_flags |= IN_CHANGE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + udf_node->i_flags |= IN_ACCESS; return 0; } @@ -1063,6 +1069,8 @@ udf_chsize(struct vnode *vp, u_quad_t ne if (error == 0) { /* mark change */ udf_node->i_flags |= IN_CHANGE | IN_MODIFY; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + udf_node->i_flags |= IN_ACCESS; VN_KNOTE(vp, NOTE_ATTRIB | (extended ? NOTE_EXTEND : 0)); udf_update(vp, NULL, NULL, NULL, 0); } @@ -1116,8 +1124,11 @@ udf_chtimes(struct vnode *vp, if (atime->tv_sec != VNOVAL) if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) udf_node->i_flags |= IN_ACCESS; - if ((mtime->tv_sec != VNOVAL) || (birthtime->tv_sec != VNOVAL)) + if ((mtime->tv_sec != VNOVAL) || (birthtime->tv_sec != VNOVAL)) { udf_node->i_flags |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + udf_node->i_flags |= IN_ACCESS; + } return udf_update(vp, atime, mtime, birthtime, 0); } Index: src/sys/ufs/ext2fs/ext2fs_readwrite.c diff -u src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.57 src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.58 --- src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.57 Sat Jun 11 23:36:00 2011 +++ src/sys/ufs/ext2fs/ext2fs_readwrite.c Fri Nov 18 16:18:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_readwrite.c,v 1.57 2011/06/12 03:36:00 rmind Exp $ */ +/* $NetBSD: ext2fs_readwrite.c,v 1.58 2011/11/18 21:18:51 christos Exp $ */ /*- * Copyright (c) 1993 @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.57 2011/06/12 03:36:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.58 2011/11/18 21:18:51 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -374,6 +374,8 @@ ext2fs_write(void *v) out: ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; if (resid > uio->uio_resid && ap->a_cred && kauth_authorize_generic(ap->a_cred, KAUTH_GENERIC_ISSUSER, NULL)) ip->i_e2fs_mode &= ~(ISUID | ISGID); Index: src/sys/ufs/ext2fs/ext2fs_vnops.c diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.100 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.101 --- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.100 Tue Jul 12 12:59:48 2011 +++ src/sys/ufs/ext2fs/ext2fs_vnops.c Fri Nov 18 16:18:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_vnops.c,v 1.100 2011/07/12 16:59:48 dholland Exp $ */ +/* $NetBSD: ext2fs_vnops.c,v 1.101 2011/11/18 21:18:51 christos Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.100 2011/07/12 16:59:48 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.101 2011/11/18 21:18:51 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -431,8 +431,11 @@ ext2fs_setattr(void *v) if (vap->va_atime.tv_sec != VNOVAL) if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) ip->i_flag |= IN_ACCESS; - if (vap->va_mtime.tv_sec != VNOVAL) + if (vap->va_mtime.tv_sec != VNOVAL) { ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; + } error = ext2fs_update(vp, &vap->va_atime, &vap->va_mtime, UPDATE_WAIT); if (error) @@ -1282,6 +1285,8 @@ ext2fs_symlink(void *v) if (error) goto bad; ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; uvm_vnp_setsize(vp, len); } else error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, Index: src/sys/ufs/ufs/ufs_readwrite.c diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.99 src/sys/ufs/ufs/ufs_readwrite.c:1.100 --- src/sys/ufs/ufs/ufs_readwrite.c:1.99 Mon Jul 11 04:27:41 2011 +++ src/sys/ufs/ufs/ufs_readwrite.c Fri Nov 18 16:18:52 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_readwrite.c,v 1.99 2011/07/11 08:27:41 hannken Exp $ */ +/* $NetBSD: ufs_readwrite.c,v 1.100 2011/11/18 21:18:52 christos Exp $ */ /*- * Copyright (c) 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.99 2011/07/11 08:27:41 hannken Exp $"); +__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.100 2011/11/18 21:18:52 christos Exp $"); #ifdef LFS_READWRITE #define FS struct lfs @@ -507,6 +507,8 @@ WRITE(void *v) */ out: ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; if (resid > uio->uio_resid && ap->a_cred && kauth_authorize_generic(ap->a_cred, KAUTH_GENERIC_ISSUSER, NULL)) { ip->i_mode &= ~(ISUID | ISGID); Index: src/sys/ufs/ufs/ufs_vnops.c diff -u src/sys/ufs/ufs/ufs_vnops.c:1.205 src/sys/ufs/ufs/ufs_vnops.c:1.206 --- src/sys/ufs/ufs/ufs_vnops.c:1.205 Mon Sep 26 22:10:32 2011 +++ src/sys/ufs/ufs/ufs_vnops.c Fri Nov 18 16:18:52 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_vnops.c,v 1.205 2011/09/27 02:10:32 christos Exp $ */ +/* $NetBSD: ufs_vnops.c,v 1.206 2011/11/18 21:18:52 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.205 2011/09/27 02:10:32 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.206 2011/11/18 21:18:52 christos Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -638,8 +638,11 @@ ufs_setattr(void *v) if (vap->va_atime.tv_sec != VNOVAL) if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) ip->i_flag |= IN_ACCESS; - if (vap->va_mtime.tv_sec != VNOVAL) + if (vap->va_mtime.tv_sec != VNOVAL) { ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; + } if (vap->va_birthtime.tv_sec != VNOVAL && ip->i_ump->um_fstype == UFS2) { ip->i_ffs2_birthtime = vap->va_birthtime.tv_sec; @@ -2092,7 +2095,7 @@ ufs_mkdir(void *v) goto bad; ip->i_size = dirblksiz; DIP_ASSIGN(ip, size, dirblksiz); - ip->i_flag |= IN_CHANGE | IN_UPDATE; + ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE; uvm_vnp_setsize(tvp, ip->i_size); memcpy((void *)bp->b_data, (void *)&dirtemplate, sizeof dirtemplate); @@ -2286,6 +2289,8 @@ ufs_symlink(void *v) DIP_ASSIGN(ip, size, len); uvm_vnp_setsize(vp, ip->i_size); ip->i_flag |= IN_CHANGE | IN_UPDATE; + if (vp->v_mount->mnt_flag & MNT_RELATIME) + ip->i_flag |= IN_ACCESS; UFS_WAPBL_UPDATE(vp, NULL, NULL, 0); } else error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,