Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 03 May 2003 17:32:57 -0700
From:      Kirk McKusick <mckusick@beastie.mckusick.com>
To:        Bruce Evans <bde@zeta.org.au>, Jens Schweikhardt <schweikh@FreeBSD.org>
Cc:        Brian Buhrow <buhrow@lothlorien.nfbcal.org>
Subject:   Access times on executables (kern/25777)
Message-ID:  <200305040032.h440WvTh015707@beastie.mckusick.com>

next in thread | raw e-mail | index | archive | help
I was asked to review kern/25777 which points out that FreeBSD at
some point stopped updating access times on files being executed
which is counter to its earlier behavior and to POSIX. I propose
that the fix below be put in to restore this behavior. Those
concerned with the overhead of the updates can use the "noatimes"
mount option to disable it. Comments?

	Kirk McKusick

=-=-=-=-=

Index: sys/kern_exec.c
===================================================================
RCS file: /usr/ncvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.218
diff -c -r1.218 kern_exec.c
*** kern_exec.c	1 Apr 2003 01:26:20 -0000	1.218
--- kern_exec.c	4 May 2003 00:26:00 -0000
***************
*** 598,603 ****
--- 598,618 ----
  		exec_setregs(td, imgp->entry_addr,
  		    (u_long)(uintptr_t)stack_base, imgp->ps_strings);
  
+ 	/*
+ 	 * At this point, it counts as an access.
+ 	 * Ensure that atime gets updated if needed.
+ 	 */
+ 	if (!(textvp->v_mount->mnt_flag & MNT_NOATIME)) {
+ 		struct vattr vattr;
+ 
+ 		VATTR_NULL(&vattr);
+ 		vfs_timestamp(&vattr.va_atime);
+ 		VOP_LEASE(textvp, td, p->p_ucred, LEASE_WRITE);
+ 		vn_lock(textvp, LK_EXCLUSIVE | LK_RETRY, td);
+ 		(void) VOP_SETATTR(textvp, &vattr, p->p_ucred, td);
+ 		VOP_UNLOCK(textvp, 0, td);
+ 	}
+ 
  done1:
  	/*
  	 * Free any resources malloc'd earlier that we didn't use.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305040032.h440WvTh015707>