>>Hmm... would it be as easy as
>>VOP_GETATTR();
>>.
>>.
>>.
>>VOP_SETATTR();
>>
>>within the exec() code?
>>
>>Certainly this would be an 'easy' fix (and I can work up diffs for review),
>>but is it the 'correct' fix?
>
> No, it's not the correct fix. You shouldn't need to do the GETATTR first,
>and doing a SETATTR will cause a synchronous update of the atime, which is
>not what you want. This also doesn't fix that standard case of open/mmap() not
>updating the access time, which is the real problem, not execve.
> Guessing, I think the correct fix is probably to set the IN_ACCESS flag in
>ufs_open() [and similarly with other filesystems where this makes sense] if
>the filesystem is not mounted with the noatime flag. However, I'm not sure
>of the symantics of the access time in the relavent standards, and I seem
>to recall Bruce saying that it was incorrect to indicate an access on just
>an open(), but I may be mistaken.
Here is a patch that I just wrote that should implement the above. Please
test and report results (good or bad). :-)
-DG
David Greenman
Co-founder, The FreeBSD Project - http://www.freebsd.org
President, TeraSolutions, Inc. - http://www.terasolutions.com
Pave the road of life with opportunities.
Index: ufs_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ufs/ufs_vnops.c,v
retrieving revision 1.131.2.3
diff -c -r1.131.2.3 ufs_vnops.c
*** ufs_vnops.c 2001/02/26 04:23:21 1.131.2.3
--- ufs_vnops.c 2001/07/25 23:52:38
***************
*** 249,255 ****
/*
* Open called.
*
! * Nothing to do.
*/
/* ARGSUSED */
int
--- 249,255 ----
/*
* Open called.
*
! * Update last accessed time.
*/
/* ARGSUSED */
int
***************
*** 261,273 ****
struct proc *a_p;
} */ *ap;
{
/*
* Files marked append-only must be opened for appending.
*/
! if ((VTOI(ap->a_vp)->i_flags & APPEND) &&
(ap->a_mode & (FWRITE | O_APPEND)) == FWRITE)
return (EPERM);
return (0);
}
--- 261,280 ----
struct proc *a_p;
} */ *ap;
{
+ struct inode *ip;
+ ip = VTOI(ap->a_vp);
/*
* Files marked append-only must be opened for appending.
*/
! if ((ip->i_flags & APPEND) &&
(ap->a_mode & (FWRITE | O_APPEND)) == FWRITE)
return (EPERM);
+ /*
+ * Update file access time.
+ */
+ if ((ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) == 0)
+ ip->i_flag |= IN_ACCESS;
return (0);
}
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message