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

Reply via email to