Add two new functions, get{micro|nano}time.
They are atomic, but return in essence what is in the "time" variable. gettime() is now a macro front for getmicrotime(). Various patches to use the two new functions instead of the various hacks used in their absence. Some puntuation and grammer patches from Bruce. A couple of XXX comments.
This commit is contained in:
parent
9de765d73b
commit
a0502b19d4
@ -1,4 +1,4 @@
|
||||
/* $Id: msdosfs_denode.c,v 1.32 1998/02/18 09:28:33 jkh Exp $ */
|
||||
/* $Id: msdosfs_denode.c,v 1.33 1998/03/20 02:33:35 kato Exp $ */
|
||||
/* $NetBSD: msdosfs_denode.c,v 1.28 1998/02/10 14:10:00 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
@ -364,7 +364,7 @@ deupdat(dep, waitfor)
|
||||
|
||||
if (DETOV(dep)->v_mount->mnt_flag & MNT_RDONLY)
|
||||
return (0);
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
if ((dep->de_flag & DE_MODIFIED) == 0)
|
||||
return (0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: msdosfs_vnops.c,v 1.65 1998/03/06 09:46:31 msmith Exp $ */
|
||||
/* $Id: msdosfs_vnops.c,v 1.66 1998/03/20 02:33:42 kato Exp $ */
|
||||
/* $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
@ -180,7 +180,7 @@ msdosfs_create(ap)
|
||||
ndirent.de_devvp = pdep->de_devvp;
|
||||
ndirent.de_pmp = pdep->de_pmp;
|
||||
ndirent.de_flag = DE_ACCESS | DE_CREATE | DE_UPDATE;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(&ndirent, &ts, &ts, &ts);
|
||||
error = createde(&ndirent, pdep, &dep, cnp);
|
||||
if (error)
|
||||
@ -239,7 +239,7 @@ msdosfs_close(ap)
|
||||
|
||||
simple_lock(&vp->v_interlock);
|
||||
if (vp->v_usecount > 1) {
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
}
|
||||
simple_unlock(&vp->v_interlock);
|
||||
@ -340,7 +340,7 @@ msdosfs_getattr(ap)
|
||||
u_long dirsperblk = pmp->pm_BytesPerSec / sizeof(struct direntry);
|
||||
u_long fileid;
|
||||
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
vap->va_fsid = dep->de_dev;
|
||||
/*
|
||||
@ -1356,7 +1356,7 @@ msdosfs_mkdir(ap)
|
||||
bzero(&ndirent, sizeof(ndirent));
|
||||
ndirent.de_pmp = pmp;
|
||||
ndirent.de_flag = DE_ACCESS | DE_CREATE | DE_UPDATE;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(&ndirent, &ts, &ts, &ts);
|
||||
|
||||
/*
|
||||
|
@ -35,7 +35,7 @@
|
||||
*
|
||||
* @(#)portal_vnops.c 8.14 (Berkeley) 5/21/95
|
||||
*
|
||||
* $Id: portal_vnops.c,v 1.28 1997/10/27 13:33:41 bde Exp $
|
||||
* $Id: portal_vnops.c,v 1.29 1997/11/06 19:29:38 phk Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -453,8 +453,7 @@ portal_getattr(ap)
|
||||
vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
|
||||
vap->va_size = DEV_BSIZE;
|
||||
vap->va_blocksize = DEV_BSIZE;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &vap->va_atime);
|
||||
nanotime(&vap->va_atime);
|
||||
vap->va_mtime = vap->va_atime;
|
||||
vap->va_ctime = vap->va_ctime;
|
||||
vap->va_gen = 0;
|
||||
|
@ -36,7 +36,7 @@
|
||||
*
|
||||
* @(#)procfs_vnops.c 8.18 (Berkeley) 5/21/95
|
||||
*
|
||||
* $Id: procfs_vnops.c,v 1.54 1998/02/06 12:13:42 eivind Exp $
|
||||
* $Id: procfs_vnops.c,v 1.55 1998/02/09 06:09:46 eivind Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -475,11 +475,7 @@ procfs_getattr(ap)
|
||||
* p_stat structure is not addressible if u. gets
|
||||
* swapped out for that process.
|
||||
*/
|
||||
{
|
||||
struct timeval tv;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &vap->va_ctime);
|
||||
}
|
||||
nanotime(&vap->va_ctime);
|
||||
vap->va_atime = vap->va_mtime = vap->va_ctime;
|
||||
|
||||
/*
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.20 1998/01/30 11:34:02 phk Exp $
|
||||
* $Id: inode.h,v 1.21 1998/03/08 09:59:21 julian Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -143,29 +143,6 @@ struct indir {
|
||||
#define VTOI(vp) ((struct inode *)(vp)->v_data)
|
||||
#define ITOV(ip) ((ip)->i_vnode)
|
||||
|
||||
/*
|
||||
* XXX this is too long to be a macro, and isn't used in any time-critical
|
||||
* place; in fact it is only used in ufs_vnops.c so it shouldn't be in a
|
||||
* header file.
|
||||
*/
|
||||
#define ITIMES(ip, t1, t2) { \
|
||||
long tv_sec = time.tv_sec; \
|
||||
if ((ip)->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE)) { \
|
||||
(ip)->i_flag |= IN_MODIFIED; \
|
||||
if ((ip)->i_flag & IN_ACCESS) \
|
||||
(ip)->i_atime \
|
||||
= ((t1) == &time ? tv_sec : (t1)->tv_sec); \
|
||||
if ((ip)->i_flag & IN_UPDATE) { \
|
||||
(ip)->i_mtime \
|
||||
= ((t2) == &time ? tv_sec : (t2)->tv_sec); \
|
||||
(ip)->i_modrev++; \
|
||||
} \
|
||||
if ((ip)->i_flag & IN_CHANGE) \
|
||||
(ip)->i_ctime = tv_sec; \
|
||||
(ip)->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Determine if soft dependencies are being done */
|
||||
#define DOINGSOFTDEP(vp) ((vp)->v_mount->mnt_flag & MNT_SOFTDEP)
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.20 1998/01/30 11:34:02 phk Exp $
|
||||
* $Id: inode.h,v 1.21 1998/03/08 09:59:21 julian Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -143,29 +143,6 @@ struct indir {
|
||||
#define VTOI(vp) ((struct inode *)(vp)->v_data)
|
||||
#define ITOV(ip) ((ip)->i_vnode)
|
||||
|
||||
/*
|
||||
* XXX this is too long to be a macro, and isn't used in any time-critical
|
||||
* place; in fact it is only used in ufs_vnops.c so it shouldn't be in a
|
||||
* header file.
|
||||
*/
|
||||
#define ITIMES(ip, t1, t2) { \
|
||||
long tv_sec = time.tv_sec; \
|
||||
if ((ip)->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE)) { \
|
||||
(ip)->i_flag |= IN_MODIFIED; \
|
||||
if ((ip)->i_flag & IN_ACCESS) \
|
||||
(ip)->i_atime \
|
||||
= ((t1) == &time ? tv_sec : (t1)->tv_sec); \
|
||||
if ((ip)->i_flag & IN_UPDATE) { \
|
||||
(ip)->i_mtime \
|
||||
= ((t2) == &time ? tv_sec : (t2)->tv_sec); \
|
||||
(ip)->i_modrev++; \
|
||||
} \
|
||||
if ((ip)->i_flag & IN_CHANGE) \
|
||||
(ip)->i_ctime = tv_sec; \
|
||||
(ip)->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Determine if soft dependencies are being done */
|
||||
#define DOINGSOFTDEP(vp) ((vp)->v_mount->mnt_flag & MNT_SOFTDEP)
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)inode.h 7.17 (Berkeley) 5/8/91
|
||||
* $Id$
|
||||
* $Id: inode.h,v 1.4 1997/02/22 09:30:56 peter Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_INODE_H_
|
||||
@ -157,19 +157,6 @@ extern ino_t dirpref();
|
||||
(void) iupdat(ip, t1, t2, waitfor); \
|
||||
}
|
||||
|
||||
#define ITIMES(ip, t1, t2) { \
|
||||
if ((ip)->i_flag&(IUPD|IACC|ICHG)) { \
|
||||
(ip)->i_flag |= IMOD; \
|
||||
if ((ip)->i_flag&IACC) \
|
||||
(ip)->i_atime = (t1)->tv_sec; \
|
||||
if ((ip)->i_flag&IUPD) \
|
||||
(ip)->i_mtime = (t2)->tv_sec; \
|
||||
if ((ip)->i_flag&ICHG) \
|
||||
(ip)->i_ctime = time.tv_sec; \
|
||||
(ip)->i_flag &= ~(IACC|IUPD|ICHG); \
|
||||
} \
|
||||
}
|
||||
|
||||
/*
|
||||
* This overlays the fid sturcture (see mount.h)
|
||||
*/
|
||||
|
@ -39,7 +39,7 @@ static volatile int print_tci = 1;
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
|
||||
* $Id: kern_clock.c,v 1.57 1998/02/20 16:35:49 phk Exp $
|
||||
* $Id: kern_clock.c,v 1.58 1998/03/16 10:19:12 phk Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -222,17 +222,6 @@ hardclock(frame)
|
||||
++softticks;
|
||||
}
|
||||
|
||||
void
|
||||
gettime(struct timeval *tvp)
|
||||
{
|
||||
int s;
|
||||
|
||||
s = splclock();
|
||||
/* XXX should use microtime() iff tv_usec is used. */
|
||||
*tvp = time;
|
||||
splx(s);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute number of hz until specified time. Used to
|
||||
* compute third argument to timeout() from an absolute time.
|
||||
@ -495,6 +484,35 @@ sysctl_kern_clockrate SYSCTL_HANDLER_ARGS
|
||||
SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
|
||||
0, 0, sysctl_kern_clockrate, "S,clockinfo","");
|
||||
|
||||
|
||||
/*
|
||||
* We have four functions for looking at the clock, two for microseconds
|
||||
* and two for nanoseconds. For each there is fast but less precise
|
||||
* version "get{nano|micro}time" which will return a time which is up
|
||||
* to 1/HZ previous to the call, whereas the raw version "{nano|micro}time"
|
||||
* will return a timestamp which is as precise as possible.
|
||||
*/
|
||||
|
||||
void
|
||||
getmicrotime(struct timeval *tvp)
|
||||
{
|
||||
struct timecounter *tc;
|
||||
|
||||
tc = timecounter;
|
||||
tvp->tv_sec = tc->offset_sec;
|
||||
tvp->tv_usec = tc->offset_micro;
|
||||
}
|
||||
|
||||
void
|
||||
getnanotime(struct timespec *tsp)
|
||||
{
|
||||
struct timecounter *tc;
|
||||
|
||||
tc = timecounter;
|
||||
tsp->tv_sec = tc->offset_sec;
|
||||
tsp->tv_nsec = tc->offset_nano;
|
||||
}
|
||||
|
||||
void
|
||||
microtime(struct timeval *tv)
|
||||
{
|
||||
|
@ -39,7 +39,7 @@ static volatile int print_tci = 1;
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
|
||||
* $Id: kern_clock.c,v 1.57 1998/02/20 16:35:49 phk Exp $
|
||||
* $Id: kern_clock.c,v 1.58 1998/03/16 10:19:12 phk Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -222,17 +222,6 @@ hardclock(frame)
|
||||
++softticks;
|
||||
}
|
||||
|
||||
void
|
||||
gettime(struct timeval *tvp)
|
||||
{
|
||||
int s;
|
||||
|
||||
s = splclock();
|
||||
/* XXX should use microtime() iff tv_usec is used. */
|
||||
*tvp = time;
|
||||
splx(s);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute number of hz until specified time. Used to
|
||||
* compute third argument to timeout() from an absolute time.
|
||||
@ -495,6 +484,35 @@ sysctl_kern_clockrate SYSCTL_HANDLER_ARGS
|
||||
SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
|
||||
0, 0, sysctl_kern_clockrate, "S,clockinfo","");
|
||||
|
||||
|
||||
/*
|
||||
* We have four functions for looking at the clock, two for microseconds
|
||||
* and two for nanoseconds. For each there is fast but less precise
|
||||
* version "get{nano|micro}time" which will return a time which is up
|
||||
* to 1/HZ previous to the call, whereas the raw version "{nano|micro}time"
|
||||
* will return a timestamp which is as precise as possible.
|
||||
*/
|
||||
|
||||
void
|
||||
getmicrotime(struct timeval *tvp)
|
||||
{
|
||||
struct timecounter *tc;
|
||||
|
||||
tc = timecounter;
|
||||
tvp->tv_sec = tc->offset_sec;
|
||||
tvp->tv_usec = tc->offset_micro;
|
||||
}
|
||||
|
||||
void
|
||||
getnanotime(struct timespec *tsp)
|
||||
{
|
||||
struct timecounter *tc;
|
||||
|
||||
tc = timecounter;
|
||||
tsp->tv_sec = tc->offset_sec;
|
||||
tsp->tv_nsec = tc->offset_nano;
|
||||
}
|
||||
|
||||
void
|
||||
microtime(struct timeval *tv)
|
||||
{
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)kern_time.c 8.1 (Berkeley) 6/10/93
|
||||
* $Id: kern_time.c,v 1.41 1998/02/20 16:35:53 phk Exp $
|
||||
* $Id: kern_time.c,v 1.42 1998/02/25 04:10:32 bde Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -163,6 +163,7 @@ clock_settime(p, uap)
|
||||
return (error);
|
||||
if (ats.tv_nsec < 0 || ats.tv_nsec >= 1000000000)
|
||||
return (EINVAL);
|
||||
/* XXX Don't convert nsec->usec and back */
|
||||
TIMESPEC_TO_TIMEVAL(&atv, &ats);
|
||||
if ((error = settime(&atv)))
|
||||
return (error);
|
||||
|
@ -16,7 +16,7 @@
|
||||
* 4. Modifications may be freely made to this file if the above conditions
|
||||
* are met.
|
||||
*
|
||||
* $Id: sys_pipe.c,v 1.38 1998/02/06 12:13:26 eivind Exp $
|
||||
* $Id: sys_pipe.c,v 1.39 1998/02/09 06:09:25 eivind Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -251,7 +251,7 @@ pipeinit(cpipe)
|
||||
cpipe->pipe_state = 0;
|
||||
cpipe->pipe_peer = NULL;
|
||||
cpipe->pipe_busy = 0;
|
||||
gettime(&cpipe->pipe_ctime);
|
||||
getnanotime(&cpipe->pipe_ctime);
|
||||
cpipe->pipe_atime = cpipe->pipe_ctime;
|
||||
cpipe->pipe_mtime = cpipe->pipe_ctime;
|
||||
bzero(&cpipe->pipe_sel, sizeof cpipe->pipe_sel);
|
||||
@ -436,7 +436,7 @@ pipe_read(fp, uio, cred)
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
gettime(&rpipe->pipe_atime);
|
||||
getnanotime(&rpipe->pipe_atime);
|
||||
|
||||
--rpipe->pipe_busy;
|
||||
if ((rpipe->pipe_busy == 0) && (rpipe->pipe_state & PIPE_WANT)) {
|
||||
@ -908,7 +908,7 @@ pipe_write(fp, uio, cred)
|
||||
error = 0;
|
||||
|
||||
if (error == 0)
|
||||
gettime(&wpipe->pipe_mtime);
|
||||
getnanotime(&wpipe->pipe_mtime);
|
||||
|
||||
/*
|
||||
* We have something to offer,
|
||||
@ -1018,9 +1018,9 @@ pipe_stat(pipe, ub)
|
||||
ub->st_blksize = pipe->pipe_buffer.size;
|
||||
ub->st_size = pipe->pipe_buffer.cnt;
|
||||
ub->st_blocks = (ub->st_size + ub->st_blksize - 1) / ub->st_blksize;
|
||||
TIMEVAL_TO_TIMESPEC(&pipe->pipe_atime, &ub->st_atimespec);
|
||||
TIMEVAL_TO_TIMESPEC(&pipe->pipe_mtime, &ub->st_mtimespec);
|
||||
TIMEVAL_TO_TIMESPEC(&pipe->pipe_ctime, &ub->st_ctimespec);
|
||||
ub->st_atimespec = pipe->pipe_atime;
|
||||
ub->st_mtimespec = pipe->pipe_mtime;
|
||||
ub->st_ctimespec = pipe->pipe_ctime;
|
||||
/*
|
||||
* Left as 0: st_dev, st_ino, st_nlink, st_uid, st_gid, st_rdev,
|
||||
* st_flags, st_gen.
|
||||
|
@ -24,7 +24,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: devfs_tree.c,v 1.48 1997/11/08 19:02:26 julian Exp $
|
||||
* $Id: devfs_tree.c,v 1.49 1998/01/02 07:31:06 julian Exp $
|
||||
*/
|
||||
|
||||
#include "opt_devfs.h"
|
||||
@ -435,7 +435,7 @@ dev_add_node(int entrytype, union typeinfo *by, dn_p proto,
|
||||
*/
|
||||
bzero(dnp,sizeof(devnode_t));
|
||||
dnp->type = entrytype;
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(dnp->ctime))
|
||||
getnanotime(&(dnp->ctime));
|
||||
dnp->mtime = dnp->ctime;
|
||||
dnp->atime = dnp->ctime;
|
||||
dnp->nextsibling = dnp;
|
||||
@ -527,7 +527,7 @@ int
|
||||
dev_touch(devnm_p key) /* update the node for this dev */
|
||||
{
|
||||
DBPRINT(("dev_touch\n"));
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(key->dnp->mtime))
|
||||
getnanotime(&(key->dnp->mtime));
|
||||
return 0; /*XXX*/
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: devfs_vnops.c,v 1.51 1998/01/02 07:31:06 julian Exp $
|
||||
* $Id: devfs_vnops.c,v 1.52 1998/03/10 09:12:19 julian Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -531,7 +531,6 @@ devfs_setattr(struct vop_setattr_args *ap)
|
||||
gid_t *gp;
|
||||
int i;
|
||||
dn_p file_node;
|
||||
struct timeval tv;
|
||||
|
||||
if (error = devfs_vntodn(vp,&file_node))
|
||||
{
|
||||
@ -578,8 +577,7 @@ DBPRINT(("setattr\n"));
|
||||
return (EACCES);
|
||||
file_node->atime = vap->va_atime;
|
||||
file_node->mtime = vap->va_mtime;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &file_node->ctime);
|
||||
nanotime(&file_node->ctime);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -675,7 +673,7 @@ DBPRINT(("read\n"));
|
||||
case VCHR:
|
||||
case VBLK:
|
||||
error = VOCALL(spec_vnodeop_p, VOFFSET(vop_read), ap);
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(file_node->atime))
|
||||
getnanotime(&(file_node->atime));
|
||||
return(error);
|
||||
|
||||
default:
|
||||
@ -715,7 +713,7 @@ DBPRINT(("write\n"));
|
||||
case VCHR:
|
||||
case VBLK:
|
||||
error = VOCALL(spec_vnodeop_p, VOFFSET(vop_write), ap);
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(file_node->mtime))
|
||||
getnanotime(&(file_node->mtime));
|
||||
return(error);
|
||||
|
||||
default:
|
||||
@ -828,7 +826,7 @@ abortit:
|
||||
/***********************************
|
||||
* Start actually doing things.... *
|
||||
***********************************/
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(tdp->mtime));
|
||||
getnanotime(&(tdp->mtime));
|
||||
|
||||
|
||||
/*
|
||||
@ -918,7 +916,7 @@ abortit:
|
||||
/***********************************
|
||||
* Start actually doing things.... *
|
||||
***********************************/
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(tdp->atime));
|
||||
getnanotime(&(tdp->atime));
|
||||
error = dev_add_name(cnp->cn_nameptr,
|
||||
tdp,
|
||||
NULL,
|
||||
@ -1084,7 +1082,7 @@ abortit:
|
||||
/***********************************
|
||||
* Start actually doing things.... *
|
||||
***********************************/
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(fp->atime));
|
||||
getnanotime(&(fp->atime));
|
||||
/*
|
||||
* Check if just deleting a link name.
|
||||
*/
|
||||
@ -1276,7 +1274,7 @@ DBPRINT(("readdir\n"));
|
||||
startpos = uio->uio_offset;
|
||||
name_node = dir_node->by.Dir.dirlist;
|
||||
nodenumber = 0;
|
||||
TIMEVAL_TO_TIMESPEC(&time,&(dir_node->atime))
|
||||
getnanotime(&(dir_node->atime));
|
||||
|
||||
while ((name_node || (nodenumber < 2)) && (uio->uio_resid > 0))
|
||||
{
|
||||
|
@ -34,7 +34,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95
|
||||
* $Id: kernfs_vnops.c,v 1.27 1997/10/26 20:55:18 phk Exp $
|
||||
* $Id: kernfs_vnops.c,v 1.28 1997/10/27 13:33:40 bde Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -383,11 +383,7 @@ kernfs_getattr(ap)
|
||||
vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
|
||||
vap->va_size = 0;
|
||||
vap->va_blocksize = DEV_BSIZE;
|
||||
{
|
||||
struct timeval tv;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &vap->va_atime);
|
||||
}
|
||||
nanotime(&vap->va_atime);
|
||||
vap->va_mtime = vap->va_atime;
|
||||
vap->va_ctime = vap->va_ctime;
|
||||
vap->va_gen = 0;
|
||||
|
@ -35,7 +35,7 @@
|
||||
*
|
||||
* @(#)portal_vnops.c 8.14 (Berkeley) 5/21/95
|
||||
*
|
||||
* $Id: portal_vnops.c,v 1.28 1997/10/27 13:33:41 bde Exp $
|
||||
* $Id: portal_vnops.c,v 1.29 1997/11/06 19:29:38 phk Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -453,8 +453,7 @@ portal_getattr(ap)
|
||||
vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
|
||||
vap->va_size = DEV_BSIZE;
|
||||
vap->va_blocksize = DEV_BSIZE;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &vap->va_atime);
|
||||
nanotime(&vap->va_atime);
|
||||
vap->va_mtime = vap->va_atime;
|
||||
vap->va_ctime = vap->va_ctime;
|
||||
vap->va_gen = 0;
|
||||
|
@ -36,7 +36,7 @@
|
||||
*
|
||||
* @(#)procfs_vnops.c 8.18 (Berkeley) 5/21/95
|
||||
*
|
||||
* $Id: procfs_vnops.c,v 1.54 1998/02/06 12:13:42 eivind Exp $
|
||||
* $Id: procfs_vnops.c,v 1.55 1998/02/09 06:09:46 eivind Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -475,11 +475,7 @@ procfs_getattr(ap)
|
||||
* p_stat structure is not addressible if u. gets
|
||||
* swapped out for that process.
|
||||
*/
|
||||
{
|
||||
struct timeval tv;
|
||||
microtime(&tv);
|
||||
TIMEVAL_TO_TIMESPEC(&tv, &vap->va_ctime);
|
||||
}
|
||||
nanotime(&vap->va_ctime);
|
||||
vap->va_atime = vap->va_mtime = vap->va_ctime;
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: msdosfs_denode.c,v 1.32 1998/02/18 09:28:33 jkh Exp $ */
|
||||
/* $Id: msdosfs_denode.c,v 1.33 1998/03/20 02:33:35 kato Exp $ */
|
||||
/* $NetBSD: msdosfs_denode.c,v 1.28 1998/02/10 14:10:00 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
@ -364,7 +364,7 @@ deupdat(dep, waitfor)
|
||||
|
||||
if (DETOV(dep)->v_mount->mnt_flag & MNT_RDONLY)
|
||||
return (0);
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
if ((dep->de_flag & DE_MODIFIED) == 0)
|
||||
return (0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: msdosfs_vnops.c,v 1.65 1998/03/06 09:46:31 msmith Exp $ */
|
||||
/* $Id: msdosfs_vnops.c,v 1.66 1998/03/20 02:33:42 kato Exp $ */
|
||||
/* $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
@ -180,7 +180,7 @@ msdosfs_create(ap)
|
||||
ndirent.de_devvp = pdep->de_devvp;
|
||||
ndirent.de_pmp = pdep->de_pmp;
|
||||
ndirent.de_flag = DE_ACCESS | DE_CREATE | DE_UPDATE;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(&ndirent, &ts, &ts, &ts);
|
||||
error = createde(&ndirent, pdep, &dep, cnp);
|
||||
if (error)
|
||||
@ -239,7 +239,7 @@ msdosfs_close(ap)
|
||||
|
||||
simple_lock(&vp->v_interlock);
|
||||
if (vp->v_usecount > 1) {
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
}
|
||||
simple_unlock(&vp->v_interlock);
|
||||
@ -340,7 +340,7 @@ msdosfs_getattr(ap)
|
||||
u_long dirsperblk = pmp->pm_BytesPerSec / sizeof(struct direntry);
|
||||
u_long fileid;
|
||||
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(dep, &ts, &ts, &ts);
|
||||
vap->va_fsid = dep->de_dev;
|
||||
/*
|
||||
@ -1356,7 +1356,7 @@ msdosfs_mkdir(ap)
|
||||
bzero(&ndirent, sizeof(ndirent));
|
||||
ndirent.de_pmp = pmp;
|
||||
ndirent.de_flag = DE_ACCESS | DE_CREATE | DE_UPDATE;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
getnanotime(&ts);
|
||||
DETIMES(&ndirent, &ts, &ts, &ts);
|
||||
|
||||
/*
|
||||
|
@ -18,7 +18,7 @@
|
||||
* 5. Modifications may be freely made to this file if the above conditions
|
||||
* are met.
|
||||
*
|
||||
* $Id: pipe.h,v 1.8 1997/02/22 09:45:40 peter Exp $
|
||||
* $Id: pipe.h,v 1.9 1997/04/09 16:53:45 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_PIPE_H_
|
||||
@ -99,9 +99,9 @@ struct pipe {
|
||||
struct pipebuf pipe_buffer; /* data storage */
|
||||
struct pipemapping pipe_map; /* pipe mapping for direct I/O */
|
||||
struct selinfo pipe_sel; /* for compat with select */
|
||||
struct timeval pipe_atime; /* time of last access */
|
||||
struct timeval pipe_mtime; /* time of last modify */
|
||||
struct timeval pipe_ctime; /* time of status change */
|
||||
struct timespec pipe_atime; /* time of last access */
|
||||
struct timespec pipe_mtime; /* time of last modify */
|
||||
struct timespec pipe_ctime; /* time of status change */
|
||||
int pipe_pgid; /* process/group for async I/O */
|
||||
struct pipe *pipe_peer; /* link with other direction */
|
||||
u_int pipe_state; /* pipe status info */
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||
* $Id: time.h,v 1.19 1998/02/25 02:14:14 bde Exp $
|
||||
* $Id: time.h,v 1.20 1998/03/04 10:26:44 dufault Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIME_H_
|
||||
@ -78,20 +78,22 @@ struct timezone {
|
||||
#define DST_CAN 6 /* Canada */
|
||||
|
||||
/*
|
||||
* Structure used to interface to the machine dependent hardware
|
||||
* support for timekeeping.
|
||||
* Structure used to interface to the machine dependent hardware support
|
||||
* for timekeeping.
|
||||
*
|
||||
* A timecounter is a binary counter which has two simple properties:
|
||||
* * it runs at a fixed frequency.
|
||||
* * must not roll over in less than (1+epsilon)/HZ
|
||||
* A timecounter is a (hard or soft) binary counter which has two properties:
|
||||
* * it runs at a fixed, known frequency.
|
||||
* * it must not roll over in less than (1 + delta)/HZ seconds. "delta"
|
||||
* is expected to be less than 20 msec, but no hard data has been
|
||||
* collected on this. 16 bit at 5 MHz (31 msec) is known to work.
|
||||
*
|
||||
* get_timecount reads the counter.
|
||||
* get_timedelta() returns difference between the counter now and offset_count.
|
||||
*
|
||||
* get_timedelta returns difference between the counter now and offset_count
|
||||
* get_timecount() reads the counter.
|
||||
*
|
||||
* counter_mask removes unimplemented bits from the count value
|
||||
* counter_mask removes unimplemented bits from the count value.
|
||||
*
|
||||
* frequency should be obvious
|
||||
* frequency is the counter frequency in hz.
|
||||
*
|
||||
* name is a short mnemonic name for this counter.
|
||||
*
|
||||
@ -100,34 +102,44 @@ struct timezone {
|
||||
* adjustment [PPM << 16] which means that the smallest unit of correction
|
||||
* you can apply amounts to 481.5 usec/year.
|
||||
*
|
||||
* scale_micro [2^32 * usec/tick]
|
||||
*
|
||||
* scale_nano_i [ns/tick]
|
||||
*
|
||||
* scale_nano_f [(ns/2^32)/tick]
|
||||
* scale_micro [2^32 * usec/tick].
|
||||
* scale_nano_i [ns/tick].
|
||||
* scale_nano_f [(ns/2^32)/tick].
|
||||
*
|
||||
* offset_count is the contents of the counter which corresponds to the
|
||||
* rest of the offset_* values
|
||||
* rest of the offset_* values.
|
||||
*
|
||||
* offset_sec [s]
|
||||
* offset_micro [usec]
|
||||
* offset_sec [s].
|
||||
* offset_micro [usec].
|
||||
* offset_nano [ns/2^32] is misnamed, the real unit is .23283064365...
|
||||
* attoseconds (10E-18) and before you ask: yes, they are in fact
|
||||
* called attoseconds, it comes from "atten" for 18 in Danish/Swedish.
|
||||
*
|
||||
* Each timecounter must supply an array of three timecounters, this is needed
|
||||
* to guarantee atomicity in the code. Index zero is used to transport
|
||||
* modifications, for instance done with sysctl, into the timecounter being
|
||||
* used in a safe way. Such changes may be adopted with a delay of up to 1/HZ,
|
||||
* index one & two are used alternately for the actual timekeeping.
|
||||
*
|
||||
* `other' points to the opposite "work" timecounter, ie, in index one it
|
||||
* points to index two and vice versa
|
||||
*
|
||||
* `tweak' points to index zero.
|
||||
*
|
||||
*/
|
||||
|
||||
struct timecounter;
|
||||
typedef u_int timecounter_get_t __P((struct timecounter *));
|
||||
typedef unsigned timecounter_get_t __P((struct timecounter *));
|
||||
typedef u_int64_t timecounter_delta_t __P((void));
|
||||
|
||||
struct timecounter {
|
||||
/* These fields must be initialized by the driver */
|
||||
/* These fields must be initialized by the driver. */
|
||||
timecounter_get_t *get_timedelta;
|
||||
timecounter_delta_t *get_timecount;
|
||||
u_int64_t counter_mask;
|
||||
u_int32_t frequency;
|
||||
char *name;
|
||||
/* These fields will be managed by the generic code */
|
||||
/* These fields will be managed by the generic code. */
|
||||
int cost;
|
||||
int32_t adjustment;
|
||||
u_int32_t scale_micro;
|
||||
@ -211,14 +223,16 @@ struct clockinfo {
|
||||
extern struct timecounter *timecounter;
|
||||
|
||||
void forward_timecounter __P((void));
|
||||
void gettime __P((struct timeval *tv));
|
||||
void init_timecounter __P((struct timecounter *));
|
||||
void getmicrotime __P((struct timeval *tv));
|
||||
void getnanotime __P((struct timespec *tv));
|
||||
#define gettime(xxx) getmicrotime(xxx) /* XXX be compatible */
|
||||
void init_timecounter __P((struct timecounter *tc));
|
||||
int itimerfix __P((struct timeval *tv));
|
||||
int itimerdecr __P((struct itimerval *itp, int usec));
|
||||
void microtime __P((struct timeval *tv));
|
||||
void nanotime __P((struct timespec *ts));
|
||||
void second_overflow __P((u_int32_t *psec));
|
||||
void set_timecounter __P((struct timespec *));
|
||||
void set_timecounter __P((struct timespec *ts));
|
||||
void timevaladd __P((struct timeval *, struct timeval *));
|
||||
void timevalsub __P((struct timeval *, struct timeval *));
|
||||
#else /* !KERNEL */
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||
* $Id: time.h,v 1.19 1998/02/25 02:14:14 bde Exp $
|
||||
* $Id: time.h,v 1.20 1998/03/04 10:26:44 dufault Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIME_H_
|
||||
@ -78,20 +78,22 @@ struct timezone {
|
||||
#define DST_CAN 6 /* Canada */
|
||||
|
||||
/*
|
||||
* Structure used to interface to the machine dependent hardware
|
||||
* support for timekeeping.
|
||||
* Structure used to interface to the machine dependent hardware support
|
||||
* for timekeeping.
|
||||
*
|
||||
* A timecounter is a binary counter which has two simple properties:
|
||||
* * it runs at a fixed frequency.
|
||||
* * must not roll over in less than (1+epsilon)/HZ
|
||||
* A timecounter is a (hard or soft) binary counter which has two properties:
|
||||
* * it runs at a fixed, known frequency.
|
||||
* * it must not roll over in less than (1 + delta)/HZ seconds. "delta"
|
||||
* is expected to be less than 20 msec, but no hard data has been
|
||||
* collected on this. 16 bit at 5 MHz (31 msec) is known to work.
|
||||
*
|
||||
* get_timecount reads the counter.
|
||||
* get_timedelta() returns difference between the counter now and offset_count.
|
||||
*
|
||||
* get_timedelta returns difference between the counter now and offset_count
|
||||
* get_timecount() reads the counter.
|
||||
*
|
||||
* counter_mask removes unimplemented bits from the count value
|
||||
* counter_mask removes unimplemented bits from the count value.
|
||||
*
|
||||
* frequency should be obvious
|
||||
* frequency is the counter frequency in hz.
|
||||
*
|
||||
* name is a short mnemonic name for this counter.
|
||||
*
|
||||
@ -100,34 +102,44 @@ struct timezone {
|
||||
* adjustment [PPM << 16] which means that the smallest unit of correction
|
||||
* you can apply amounts to 481.5 usec/year.
|
||||
*
|
||||
* scale_micro [2^32 * usec/tick]
|
||||
*
|
||||
* scale_nano_i [ns/tick]
|
||||
*
|
||||
* scale_nano_f [(ns/2^32)/tick]
|
||||
* scale_micro [2^32 * usec/tick].
|
||||
* scale_nano_i [ns/tick].
|
||||
* scale_nano_f [(ns/2^32)/tick].
|
||||
*
|
||||
* offset_count is the contents of the counter which corresponds to the
|
||||
* rest of the offset_* values
|
||||
* rest of the offset_* values.
|
||||
*
|
||||
* offset_sec [s]
|
||||
* offset_micro [usec]
|
||||
* offset_sec [s].
|
||||
* offset_micro [usec].
|
||||
* offset_nano [ns/2^32] is misnamed, the real unit is .23283064365...
|
||||
* attoseconds (10E-18) and before you ask: yes, they are in fact
|
||||
* called attoseconds, it comes from "atten" for 18 in Danish/Swedish.
|
||||
*
|
||||
* Each timecounter must supply an array of three timecounters, this is needed
|
||||
* to guarantee atomicity in the code. Index zero is used to transport
|
||||
* modifications, for instance done with sysctl, into the timecounter being
|
||||
* used in a safe way. Such changes may be adopted with a delay of up to 1/HZ,
|
||||
* index one & two are used alternately for the actual timekeeping.
|
||||
*
|
||||
* `other' points to the opposite "work" timecounter, ie, in index one it
|
||||
* points to index two and vice versa
|
||||
*
|
||||
* `tweak' points to index zero.
|
||||
*
|
||||
*/
|
||||
|
||||
struct timecounter;
|
||||
typedef u_int timecounter_get_t __P((struct timecounter *));
|
||||
typedef unsigned timecounter_get_t __P((struct timecounter *));
|
||||
typedef u_int64_t timecounter_delta_t __P((void));
|
||||
|
||||
struct timecounter {
|
||||
/* These fields must be initialized by the driver */
|
||||
/* These fields must be initialized by the driver. */
|
||||
timecounter_get_t *get_timedelta;
|
||||
timecounter_delta_t *get_timecount;
|
||||
u_int64_t counter_mask;
|
||||
u_int32_t frequency;
|
||||
char *name;
|
||||
/* These fields will be managed by the generic code */
|
||||
/* These fields will be managed by the generic code. */
|
||||
int cost;
|
||||
int32_t adjustment;
|
||||
u_int32_t scale_micro;
|
||||
@ -211,14 +223,16 @@ struct clockinfo {
|
||||
extern struct timecounter *timecounter;
|
||||
|
||||
void forward_timecounter __P((void));
|
||||
void gettime __P((struct timeval *tv));
|
||||
void init_timecounter __P((struct timecounter *));
|
||||
void getmicrotime __P((struct timeval *tv));
|
||||
void getnanotime __P((struct timespec *tv));
|
||||
#define gettime(xxx) getmicrotime(xxx) /* XXX be compatible */
|
||||
void init_timecounter __P((struct timecounter *tc));
|
||||
int itimerfix __P((struct timeval *tv));
|
||||
int itimerdecr __P((struct itimerval *itp, int usec));
|
||||
void microtime __P((struct timeval *tv));
|
||||
void nanotime __P((struct timespec *ts));
|
||||
void second_overflow __P((u_int32_t *psec));
|
||||
void set_timecounter __P((struct timespec *));
|
||||
void set_timecounter __P((struct timespec *ts));
|
||||
void timevaladd __P((struct timeval *, struct timeval *));
|
||||
void timevalsub __P((struct timeval *, struct timeval *));
|
||||
#else /* !KERNEL */
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ffs_inode.c 8.13 (Berkeley) 4/21/95
|
||||
* $Id: ffs_inode.c,v 1.37 1998/03/16 01:55:43 dyson Exp $
|
||||
* $Id: ffs_inode.c,v 1.38 1998/03/19 22:49:42 dyson Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
@ -102,6 +102,7 @@ ffs_update(vp, access, modify, waitfor)
|
||||
*
|
||||
* XXX there should be a function or macro for reading the time
|
||||
* (e.g., some machines may require splclock()).
|
||||
* XXX there are: they're called get{micro|nano}time
|
||||
*/
|
||||
tv_sec = time.tv_sec;
|
||||
if (ip->i_flag & IN_ACCESS)
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.20 1998/01/30 11:34:02 phk Exp $
|
||||
* $Id: inode.h,v 1.21 1998/03/08 09:59:21 julian Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -143,29 +143,6 @@ struct indir {
|
||||
#define VTOI(vp) ((struct inode *)(vp)->v_data)
|
||||
#define ITOV(ip) ((ip)->i_vnode)
|
||||
|
||||
/*
|
||||
* XXX this is too long to be a macro, and isn't used in any time-critical
|
||||
* place; in fact it is only used in ufs_vnops.c so it shouldn't be in a
|
||||
* header file.
|
||||
*/
|
||||
#define ITIMES(ip, t1, t2) { \
|
||||
long tv_sec = time.tv_sec; \
|
||||
if ((ip)->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE)) { \
|
||||
(ip)->i_flag |= IN_MODIFIED; \
|
||||
if ((ip)->i_flag & IN_ACCESS) \
|
||||
(ip)->i_atime \
|
||||
= ((t1) == &time ? tv_sec : (t1)->tv_sec); \
|
||||
if ((ip)->i_flag & IN_UPDATE) { \
|
||||
(ip)->i_mtime \
|
||||
= ((t2) == &time ? tv_sec : (t2)->tv_sec); \
|
||||
(ip)->i_modrev++; \
|
||||
} \
|
||||
if ((ip)->i_flag & IN_CHANGE) \
|
||||
(ip)->i_ctime = tv_sec; \
|
||||
(ip)->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Determine if soft dependencies are being done */
|
||||
#define DOINGSOFTDEP(vp) ((vp)->v_mount->mnt_flag & MNT_SOFTDEP)
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95
|
||||
* $Id: ufs_vnops.c,v 1.78 1998/02/09 06:11:14 eivind Exp $
|
||||
* $Id: ufs_vnops.c,v 1.79 1998/03/08 09:59:44 julian Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
@ -122,6 +122,27 @@ union _qcvt {
|
||||
(q) = tmp.qcvt; \
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX this is too long to be a macro, and isn't used in any time-critical
|
||||
* place;
|
||||
*/
|
||||
#define ITIMES(ip) { \
|
||||
struct timeval tv; \
|
||||
getmicrotime(&tv); \
|
||||
if ((ip)->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE)) { \
|
||||
(ip)->i_flag |= IN_MODIFIED; \
|
||||
if ((ip)->i_flag & IN_ACCESS) \
|
||||
(ip)->i_atime = tv.tv_sec; \
|
||||
if ((ip)->i_flag & IN_UPDATE) { \
|
||||
(ip)->i_mtime = tv.tv_sec; \
|
||||
(ip)->i_modrev++; \
|
||||
} \
|
||||
if ((ip)->i_flag & IN_CHANGE) \
|
||||
(ip)->i_ctime = tv.tv_sec; \
|
||||
(ip)->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE); \
|
||||
} \
|
||||
}
|
||||
|
||||
/*
|
||||
* A virgin directory (no blushing please).
|
||||
*/
|
||||
@ -246,7 +267,7 @@ ufs_close(ap)
|
||||
|
||||
simple_lock(&vp->v_interlock);
|
||||
if (vp->v_usecount > 1)
|
||||
ITIMES(ip, &time, &time);
|
||||
ITIMES(ip);
|
||||
simple_unlock(&vp->v_interlock);
|
||||
return (0);
|
||||
}
|
||||
@ -349,7 +370,7 @@ ufs_getattr(ap)
|
||||
register struct inode *ip = VTOI(vp);
|
||||
register struct vattr *vap = ap->a_vap;
|
||||
|
||||
ITIMES(ip, &time, &time);
|
||||
ITIMES(ip);
|
||||
/*
|
||||
* Copy from inode table
|
||||
*/
|
||||
@ -1807,7 +1828,7 @@ ufsspec_close(ap)
|
||||
|
||||
simple_lock(&vp->v_interlock);
|
||||
if (ap->a_vp->v_usecount > 1)
|
||||
ITIMES(ip, &time, &time);
|
||||
ITIMES(ip);
|
||||
simple_unlock(&vp->v_interlock);
|
||||
return (VOCALL (spec_vnodeop_p, VOFFSET(vop_close), ap));
|
||||
}
|
||||
@ -1871,7 +1892,7 @@ ufsfifo_close(ap)
|
||||
|
||||
simple_lock(&vp->v_interlock);
|
||||
if (ap->a_vp->v_usecount > 1)
|
||||
ITIMES(ip, &time, &time);
|
||||
ITIMES(ip);
|
||||
simple_unlock(&vp->v_interlock);
|
||||
return (VOCALL (fifo_vnodeop_p, VOFFSET(vop_close), ap));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user