Change VOP_UPDATE() semantics:
* Make 2nd and 3rd args timespecs, not timevals. * Consistently pass a Boolean as the 4th arg (except in LFS). Also, fix ffs_update() and lfs_update() to actually change the nsec fields.
This commit is contained in:
parent
540f9550c0
commit
261382c331
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: vnode_if.src,v 1.9 1996/02/09 14:45:38 mycroft Exp $
|
||||
# $NetBSD: vnode_if.src,v 1.10 1996/05/11 18:26:27 mycroft Exp $
|
||||
#
|
||||
# Copyright (c) 1992, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
|
@ -289,8 +289,8 @@ vop_truncate {
|
|||
|
||||
vop_update {
|
||||
IN struct vnode *vp;
|
||||
IN struct timeval *access;
|
||||
IN struct timeval *modify;
|
||||
IN struct timespec *access;
|
||||
IN struct timespec *modify;
|
||||
IN int waitfor;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: nfs_vnops.c,v 1.61 1996/04/03 23:25:42 thorpej Exp $ */
|
||||
/* $NetBSD: nfs_vnops.c,v 1.62 1996/05/11 18:26:49 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
|
@ -3037,8 +3037,8 @@ nfs_update(v)
|
|||
#if 0
|
||||
struct vop_update_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct timeval *a_ta;
|
||||
struct timeval *a_tm;
|
||||
struct timespec *a_ta;
|
||||
struct timespec *a_tm;
|
||||
int a_waitfor;
|
||||
} */ *ap = v;
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ffs_alloc.c,v 1.10 1996/03/17 02:16:18 christos Exp $ */
|
||||
/* $NetBSD: ffs_alloc.c,v 1.11 1996/05/11 18:27:09 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
|
@ -338,6 +338,7 @@ ffs_reallocblks(v)
|
|||
daddr_t start_lbn, end_lbn, soff, newblk, blkno;
|
||||
struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp;
|
||||
int i, len, start_lvl, end_lvl, pref, ssize;
|
||||
struct timespec ts;
|
||||
|
||||
vp = ap->a_vp;
|
||||
ip = VTOI(vp);
|
||||
|
@ -451,9 +452,10 @@ ffs_reallocblks(v)
|
|||
bwrite(sbp);
|
||||
} else {
|
||||
ip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
if (!doasyncfree)
|
||||
VOP_UPDATE(vp, (struct timeval *)&time,
|
||||
(struct timeval *)&time, MNT_WAIT);
|
||||
if (!doasyncfree) {
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
VOP_UPDATE(vp, &ts, &ts, 1);
|
||||
}
|
||||
}
|
||||
if (ssize < len)
|
||||
if (doasyncfree)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ffs_inode.c,v 1.9 1996/02/09 22:22:23 christos Exp $ */
|
||||
/* $NetBSD: ffs_inode.c,v 1.10 1996/05/11 18:27:19 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
|
@ -81,8 +81,8 @@ ffs_update(v)
|
|||
{
|
||||
struct vop_update_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct timeval *a_access;
|
||||
struct timeval *a_modify;
|
||||
struct timespec *a_access;
|
||||
struct timespec *a_modify;
|
||||
int a_waitfor;
|
||||
} */ *ap = v;
|
||||
register struct fs *fs;
|
||||
|
@ -99,14 +99,19 @@ ffs_update(v)
|
|||
if ((ip->i_flag &
|
||||
(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0)
|
||||
return (0);
|
||||
if (ip->i_flag & IN_ACCESS)
|
||||
if (ip->i_flag & IN_ACCESS) {
|
||||
ip->i_atime = ap->a_access->tv_sec;
|
||||
ip->i_atimensec = ap->a_access->tv_nsec;
|
||||
}
|
||||
if (ip->i_flag & IN_UPDATE) {
|
||||
ip->i_mtime = ap->a_modify->tv_sec;
|
||||
ip->i_mtimensec = ap->a_modify->tv_nsec;
|
||||
ip->i_modrev++;
|
||||
}
|
||||
if (ip->i_flag & IN_CHANGE)
|
||||
if (ip->i_flag & IN_CHANGE) {
|
||||
ip->i_ctime = time.tv_sec;
|
||||
ip->i_ctimensec = time.tv_usec * 1000;
|
||||
}
|
||||
ip->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE);
|
||||
fs = ip->i_fs;
|
||||
/*
|
||||
|
@ -162,7 +167,7 @@ ffs_truncate(v)
|
|||
struct buf *bp;
|
||||
int offset, size, level;
|
||||
long count, nblocks, vflags, blocksreleased = 0;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
register int i;
|
||||
int aflags, error, allerror;
|
||||
off_t osize;
|
||||
|
@ -170,7 +175,7 @@ ffs_truncate(v)
|
|||
if (length < 0)
|
||||
return (EINVAL);
|
||||
oip = VTOI(ovp);
|
||||
tv = time;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
if (ovp->v_type == VLNK &&
|
||||
(oip->i_size < ovp->v_mount->mnt_maxsymlinklen ||
|
||||
(ovp->v_mount->mnt_maxsymlinklen == 0 &&
|
||||
|
@ -182,11 +187,11 @@ ffs_truncate(v)
|
|||
bzero((char *)&oip->i_shortlink, (u_int)oip->i_size);
|
||||
oip->i_size = 0;
|
||||
oip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
return (VOP_UPDATE(ovp, &tv, &tv, 1));
|
||||
return (VOP_UPDATE(ovp, &ts, &ts, 1));
|
||||
}
|
||||
if (oip->i_size == length) {
|
||||
oip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
return (VOP_UPDATE(ovp, &tv, &tv, 0));
|
||||
return (VOP_UPDATE(ovp, &ts, &ts, 0));
|
||||
}
|
||||
#ifdef QUOTA
|
||||
if ((error = getinoquota(oip)) != 0)
|
||||
|
@ -219,7 +224,7 @@ ffs_truncate(v)
|
|||
else
|
||||
bawrite(bp);
|
||||
oip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
return (VOP_UPDATE(ovp, &tv, &tv, 1));
|
||||
return (VOP_UPDATE(ovp, &ts, &ts, 1));
|
||||
}
|
||||
/*
|
||||
* Shorten the size of the file. If the file is not being
|
||||
|
@ -275,7 +280,7 @@ ffs_truncate(v)
|
|||
for (i = NDADDR - 1; i > lastblock; i--)
|
||||
oip->i_db[i] = 0;
|
||||
oip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
if ((error = VOP_UPDATE(ovp, &tv, &tv, MNT_WAIT)) != 0)
|
||||
if ((error = VOP_UPDATE(ovp, &ts, &ts, 1)) != 0)
|
||||
allerror = error;
|
||||
/*
|
||||
* Having written the new inode to disk, save its new configuration
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ffs_vnops.c,v 1.6 1996/02/09 22:22:27 christos Exp $ */
|
||||
/* $NetBSD: ffs_vnops.c,v 1.7 1996/05/11 18:27:24 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
|
@ -249,11 +249,11 @@ ffs_fsync(v)
|
|||
struct proc *a_p;
|
||||
} */ *ap = v;
|
||||
register struct vnode *vp = ap->a_vp;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
|
||||
vflushbuf(vp, ap->a_waitfor == MNT_WAIT);
|
||||
tv = time;
|
||||
return (VOP_UPDATE(ap->a_vp, &tv, &tv, ap->a_waitfor == MNT_WAIT));
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
return (VOP_UPDATE(ap->a_vp, &ts, &ts, ap->a_waitfor == MNT_WAIT));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lfs_inode.c,v 1.4 1996/02/09 22:28:52 christos Exp $ */
|
||||
/* $NetBSD: lfs_inode.c,v 1.5 1996/05/11 18:27:35 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1986, 1989, 1991, 1993
|
||||
|
@ -85,8 +85,8 @@ lfs_update(v)
|
|||
{
|
||||
struct vop_update_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct timeval *a_access;
|
||||
struct timeval *a_modify;
|
||||
struct timespec *a_access;
|
||||
struct timespec *a_modify;
|
||||
int a_waitfor;
|
||||
} */ *ap = v;
|
||||
struct vnode *vp = ap->a_vp;
|
||||
|
@ -98,14 +98,19 @@ lfs_update(v)
|
|||
if ((ip->i_flag &
|
||||
(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0)
|
||||
return (0);
|
||||
if (ip->i_flag & IN_ACCESS)
|
||||
if (ip->i_flag & IN_ACCESS) {
|
||||
ip->i_atime = ap->a_access->tv_sec;
|
||||
ip->i_atimensec = ap->a_access->tv_nsec;
|
||||
}
|
||||
if (ip->i_flag & IN_UPDATE) {
|
||||
ip->i_mtime = ap->a_modify->tv_sec;
|
||||
ip->i_mtimensec = ap->a_modify->tv_nsec;
|
||||
(ip)->i_modrev++;
|
||||
}
|
||||
if (ip->i_flag & IN_CHANGE)
|
||||
if (ip->i_flag & IN_CHANGE) {
|
||||
ip->i_ctime = time.tv_sec;
|
||||
ip->i_ctimensec = time.tv_usec * 1000;
|
||||
}
|
||||
ip->i_flag &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE);
|
||||
|
||||
if (!(ip->i_flag & IN_MODIFIED))
|
||||
|
@ -161,7 +166,7 @@ lfs_truncate(v)
|
|||
register struct vnode *vp = ap->a_vp;
|
||||
off_t length = ap->a_length;
|
||||
struct buf *bp, *sup_bp;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
struct ifile *ifp;
|
||||
struct inode *ip;
|
||||
struct lfs *fs;
|
||||
|
@ -172,7 +177,7 @@ lfs_truncate(v)
|
|||
int e1, e2, depth, lastseg, num, offset, seg, size;
|
||||
|
||||
ip = VTOI(vp);
|
||||
tv = time;
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
if (vp->v_type == VLNK && vp->v_mount->mnt_maxsymlinklen > 0) {
|
||||
#ifdef DIAGNOSTIC
|
||||
if (length != 0)
|
||||
|
@ -181,7 +186,7 @@ lfs_truncate(v)
|
|||
bzero((char *)&ip->i_shortlink, (u_int)ip->i_size);
|
||||
ip->i_size = 0;
|
||||
ip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
return (VOP_UPDATE(vp, &tv, &tv, 0));
|
||||
return (VOP_UPDATE(vp, &ts, &ts, 0));
|
||||
}
|
||||
vnode_pager_setsize(vp, (u_long)length);
|
||||
|
||||
|
@ -190,7 +195,7 @@ lfs_truncate(v)
|
|||
/* If length is larger than the file, just update the times. */
|
||||
if (ip->i_size <= length) {
|
||||
ip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
return (VOP_UPDATE(vp, &tv, &tv, 0));
|
||||
return (VOP_UPDATE(vp, &ts, &ts, 0));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -358,6 +363,6 @@ lfs_truncate(v)
|
|||
fs->lfs_avail += fsbtodb(fs, a_released);
|
||||
e1 = vinvalbuf(vp, (length > 0) ? V_SAVE : 0, ap->a_cred, ap->a_p,
|
||||
0, 0);
|
||||
e2 = VOP_UPDATE(vp, &tv, &tv, 0);
|
||||
e2 = VOP_UPDATE(vp, &ts, &ts, 0);
|
||||
return (e1 ? e1 : e2 ? e2 : 0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lfs_vnops.c,v 1.10 1996/02/09 22:28:59 christos Exp $ */
|
||||
/* $NetBSD: lfs_vnops.c,v 1.11 1996/05/11 18:27:41 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1986, 1989, 1991, 1993
|
||||
|
@ -233,10 +233,10 @@ lfs_fsync(v)
|
|||
int a_waitfor;
|
||||
struct proc *a_p;
|
||||
} */ *ap = v;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
|
||||
tv = time;
|
||||
return (VOP_UPDATE(ap->a_vp, &tv, &tv,
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
return (VOP_UPDATE(ap->a_vp, &ts, &ts,
|
||||
ap->a_waitfor == MNT_WAIT ? LFS_SYNC : 0));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ufs_inode.c,v 1.6 1996/02/09 22:36:05 christos Exp $ */
|
||||
/* $NetBSD: ufs_inode.c,v 1.7 1996/05/11 18:27:52 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991, 1993
|
||||
|
@ -83,7 +83,7 @@ ufs_inactive(v)
|
|||
} */ *ap = v;
|
||||
register struct vnode *vp = ap->a_vp;
|
||||
register struct inode *ip = VTOI(vp);
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
int mode, error;
|
||||
extern int prtactive;
|
||||
|
||||
|
@ -120,8 +120,8 @@ ufs_inactive(v)
|
|||
VOP_VFREE(vp, ip->i_number, mode);
|
||||
}
|
||||
if (ip->i_flag & (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) {
|
||||
tv = time;
|
||||
VOP_UPDATE(vp, &tv, &tv, 0);
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
VOP_UPDATE(vp, &ts, &ts, 0);
|
||||
}
|
||||
VOP_UNLOCK(vp);
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ufs_readwrite.c,v 1.8 1996/02/09 22:36:11 christos Exp $ */
|
||||
/* $NetBSD: ufs_readwrite.c,v 1.9 1996/05/11 18:27:57 mycroft Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
|
@ -181,6 +181,7 @@ WRITE(v)
|
|||
daddr_t lbn;
|
||||
off_t osize;
|
||||
int blkoffset, error, flags, ioflag, resid, size, xfersize;
|
||||
struct timespec ts;
|
||||
|
||||
ioflag = ap->a_ioflag;
|
||||
uio = ap->a_uio;
|
||||
|
@ -292,8 +293,9 @@ WRITE(v)
|
|||
uio->uio_offset -= resid - uio->uio_resid;
|
||||
uio->uio_resid = resid;
|
||||
}
|
||||
} else if (resid > uio->uio_resid && (ioflag & IO_SYNC))
|
||||
error = VOP_UPDATE(vp, (struct timeval *)&time,
|
||||
(struct timeval *)&time, 1);
|
||||
} else if (resid > uio->uio_resid && (ioflag & IO_SYNC)) {
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
error = VOP_UPDATE(vp, &ts, &ts, 1);
|
||||
}
|
||||
return (error);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ufs_vnops.c,v 1.17 1996/02/11 02:06:13 christos Exp $ */
|
||||
/* $NetBSD: ufs_vnops.c,v 1.18 1996/05/11 18:28:04 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
|
@ -313,7 +313,6 @@ ufs_setattr(v)
|
|||
register struct inode *ip = VTOI(vp);
|
||||
register struct ucred *cred = ap->a_cred;
|
||||
register struct proc *p = ap->a_p;
|
||||
struct timeval atimeval, mtimeval;
|
||||
int error;
|
||||
|
||||
/*
|
||||
|
@ -372,11 +371,7 @@ ufs_setattr(v)
|
|||
ip->i_flag |= IN_ACCESS;
|
||||
if (vap->va_mtime.tv_sec != VNOVAL)
|
||||
ip->i_flag |= IN_CHANGE | IN_UPDATE;
|
||||
atimeval.tv_sec = vap->va_atime.tv_sec;
|
||||
atimeval.tv_usec = vap->va_atime.tv_nsec / 1000;
|
||||
mtimeval.tv_sec = vap->va_mtime.tv_sec;
|
||||
mtimeval.tv_usec = vap->va_mtime.tv_nsec / 1000;
|
||||
error = VOP_UPDATE(vp, &atimeval, &mtimeval, 1);
|
||||
error = VOP_UPDATE(vp, &vap->va_atime, &vap->va_mtime, 1);
|
||||
if (error)
|
||||
return (error);
|
||||
}
|
||||
|
@ -660,7 +655,7 @@ ufs_link(v)
|
|||
register struct vnode *vp = ap->a_vp;
|
||||
register struct componentname *cnp = ap->a_cnp;
|
||||
register struct inode *ip;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
int error;
|
||||
|
||||
#ifdef DIAGNOSTIC
|
||||
|
@ -694,8 +689,8 @@ ufs_link(v)
|
|||
}
|
||||
ip->i_nlink++;
|
||||
ip->i_flag |= IN_CHANGE;
|
||||
tv = time;
|
||||
error = VOP_UPDATE(vp, &tv, &tv, 1);
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
error = VOP_UPDATE(vp, &ts, &ts, 1);
|
||||
if (!error)
|
||||
error = ufs_direnter(ip, dvp, cnp);
|
||||
if (error) {
|
||||
|
@ -814,7 +809,7 @@ ufs_rename(v)
|
|||
register struct componentname *fcnp = ap->a_fcnp;
|
||||
register struct inode *ip, *xp, *dp;
|
||||
struct dirtemplate dirbuf;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
int doingdirectory = 0, oldparent = 0, newparent = 0;
|
||||
int error = 0;
|
||||
u_char namlen;
|
||||
|
@ -917,8 +912,8 @@ abortit:
|
|||
*/
|
||||
ip->i_nlink++;
|
||||
ip->i_flag |= IN_CHANGE;
|
||||
tv = time;
|
||||
if ((error = VOP_UPDATE(fvp, &tv, &tv, 1)) != 0) {
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
if ((error = VOP_UPDATE(fvp, &ts, &ts, 1)) != 0) {
|
||||
VOP_UNLOCK(fvp);
|
||||
goto bad;
|
||||
}
|
||||
|
@ -975,14 +970,14 @@ abortit:
|
|||
}
|
||||
dp->i_nlink++;
|
||||
dp->i_flag |= IN_CHANGE;
|
||||
if ((error = VOP_UPDATE(tdvp, &tv, &tv, 1)) != 0)
|
||||
if ((error = VOP_UPDATE(tdvp, &ts, &ts, 1)) != 0)
|
||||
goto bad;
|
||||
}
|
||||
if ((error = ufs_direnter(ip, tdvp, tcnp)) != 0) {
|
||||
if (doingdirectory && newparent) {
|
||||
dp->i_nlink--;
|
||||
dp->i_flag |= IN_CHANGE;
|
||||
(void)VOP_UPDATE(tdvp, &tv, &tv, 1);
|
||||
(void)VOP_UPDATE(tdvp, &ts, &ts, 1);
|
||||
}
|
||||
goto bad;
|
||||
}
|
||||
|
@ -1197,7 +1192,7 @@ ufs_mkdir(v)
|
|||
register struct inode *ip, *dp;
|
||||
struct vnode *tvp;
|
||||
struct dirtemplate dirtemplate, *dtp;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
int error, dmode;
|
||||
|
||||
#ifdef DIAGNOSTIC
|
||||
|
@ -1237,8 +1232,8 @@ ufs_mkdir(v)
|
|||
ip->i_nlink = 2;
|
||||
if (cnp->cn_flags & ISWHITEOUT)
|
||||
ip->i_flags |= UF_OPAQUE;
|
||||
tv = time;
|
||||
error = VOP_UPDATE(tvp, &tv, &tv, 1);
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
error = VOP_UPDATE(tvp, &ts, &ts, 1);
|
||||
|
||||
/*
|
||||
* Bump link count in parent directory
|
||||
|
@ -1248,7 +1243,7 @@ ufs_mkdir(v)
|
|||
*/
|
||||
dp->i_nlink++;
|
||||
dp->i_flag |= IN_CHANGE;
|
||||
if ((error = VOP_UPDATE(dvp, &tv, &tv, 1)) != 0)
|
||||
if ((error = VOP_UPDATE(dvp, &ts, &ts, 1)) != 0)
|
||||
goto bad;
|
||||
|
||||
/* Initialize directory with "." and ".." from static template. */
|
||||
|
@ -2000,7 +1995,7 @@ ufs_makeinode(mode, dvp, vpp, cnp)
|
|||
struct componentname *cnp;
|
||||
{
|
||||
register struct inode *ip, *pdir;
|
||||
struct timeval tv;
|
||||
struct timespec ts;
|
||||
struct vnode *tvp;
|
||||
int error;
|
||||
|
||||
|
@ -2045,8 +2040,8 @@ ufs_makeinode(mode, dvp, vpp, cnp)
|
|||
/*
|
||||
* Make sure inode goes to disk before directory entry.
|
||||
*/
|
||||
tv = time;
|
||||
if ((error = VOP_UPDATE(tvp, &tv, &tv, 1)) != 0)
|
||||
TIMEVAL_TO_TIMESPEC(&time, &ts);
|
||||
if ((error = VOP_UPDATE(tvp, &ts, &ts, 1)) != 0)
|
||||
goto bad;
|
||||
if ((error = ufs_direnter(ip, dvp, cnp)) != 0)
|
||||
goto bad;
|
||||
|
|
Loading…
Reference in New Issue