Access times on executables (kern/25777)

Kirk McKusick mckusick at beastie.mckusick.com
Sat May 3 17:33:00 PDT 2003


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.


More information about the freebsd-arch mailing list