diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vnode_if.src | 8 | ||||
-rw-r--r-- | sys/nfs/nfs_vnops.c | 8 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_alloc.c | 12 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_inode.c | 29 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 10 | ||||
-rw-r--r-- | sys/ufs/lfs/lfs_inode.c | 27 | ||||
-rw-r--r-- | sys/ufs/lfs/lfs_vnops.c | 10 | ||||
-rw-r--r-- | sys/ufs/ufs/ufs_inode.c | 10 | ||||
-rw-r--r-- | sys/ufs/ufs/ufs_readwrite.c | 12 | ||||
-rw-r--r-- | sys/ufs/ufs/ufs_vnops.c | 41 |
10 files changed, 88 insertions, 79 deletions
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index 4866330f88b..0a8c45ace58 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -1,5 +1,5 @@ -# $OpenBSD: vnode_if.src,v 1.3 1996/04/19 16:09:14 niklas Exp $ -# $NetBSD: vnode_if.src,v 1.9 1996/02/09 14:45:38 mycroft Exp $ +# $OpenBSD: vnode_if.src,v 1.4 1996/05/22 11:47:12 deraadt 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. @@ -290,8 +290,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; }; diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c index c6e640bed5c..0786c40fac6 100644 --- a/sys/nfs/nfs_vnops.c +++ b/sys/nfs/nfs_vnops.c @@ -1,5 +1,5 @@ -/* $OpenBSD: nfs_vnops.c,v 1.7 1996/04/21 22:30:36 deraadt Exp $ */ -/* $NetBSD: nfs_vnops.c,v 1.61 1996/04/03 23:25:42 thorpej Exp $ */ +/* $OpenBSD: nfs_vnops.c,v 1.8 1996/05/22 11:47:16 deraadt Exp $ */ +/* $NetBSD: nfs_vnops.c,v 1.62 1996/05/11 18:26:49 mycroft Exp $ */ /* * Copyright (c) 1989, 1993 @@ -3038,8 +3038,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 diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index a4bea4eb5d1..666560caf32 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ffs_alloc.c,v 1.3 1996/04/21 22:32:28 deraadt Exp $ */ -/* $NetBSD: ffs_alloc.c,v 1.10 1996/03/17 02:16:18 christos Exp $ */ +/* $OpenBSD: ffs_alloc.c,v 1.4 1996/05/22 11:47:17 deraadt Exp $ */ +/* $NetBSD: ffs_alloc.c,v 1.11 1996/05/11 18:27:09 mycroft Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -339,6 +339,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); @@ -452,9 +453,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) diff --git a/sys/ufs/ffs/ffs_inode.c b/sys/ufs/ffs/ffs_inode.c index 70f7147cf54..855966780a4 100644 --- a/sys/ufs/ffs/ffs_inode.c +++ b/sys/ufs/ffs/ffs_inode.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ffs_inode.c,v 1.2 1996/02/27 07:27:37 niklas Exp $ */ -/* $NetBSD: ffs_inode.c,v 1.9 1996/02/09 22:22:23 christos Exp $ */ +/* $OpenBSD: ffs_inode.c,v 1.3 1996/05/22 11:47:18 deraadt Exp $ */ +/* $NetBSD: ffs_inode.c,v 1.10 1996/05/11 18:27:19 mycroft Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -82,8 +82,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; @@ -100,14 +100,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; /* @@ -163,7 +168,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; @@ -171,7 +176,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 && @@ -183,11 +188,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) @@ -220,7 +225,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 @@ -276,7 +281,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 diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 2fb888dc4e1..e9462ff50be 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ffs_vnops.c,v 1.2 1996/02/27 07:27:41 niklas Exp $ */ -/* $NetBSD: ffs_vnops.c,v 1.6 1996/02/09 22:22:27 christos Exp $ */ +/* $OpenBSD: ffs_vnops.c,v 1.3 1996/05/22 11:47:18 deraadt Exp $ */ +/* $NetBSD: ffs_vnops.c,v 1.7 1996/05/11 18:27:24 mycroft Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -250,11 +250,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)); } /* diff --git a/sys/ufs/lfs/lfs_inode.c b/sys/ufs/lfs/lfs_inode.c index 72acdfbdcad..882e7c535c8 100644 --- a/sys/ufs/lfs/lfs_inode.c +++ b/sys/ufs/lfs/lfs_inode.c @@ -1,5 +1,5 @@ -/* $OpenBSD: lfs_inode.c,v 1.2 1996/02/27 07:13:25 niklas Exp $ */ -/* $NetBSD: lfs_inode.c,v 1.4 1996/02/09 22:28:52 christos Exp $ */ +/* $OpenBSD: lfs_inode.c,v 1.3 1996/05/22 11:47:19 deraadt Exp $ */ +/* $NetBSD: lfs_inode.c,v 1.5 1996/05/11 18:27:35 mycroft Exp $ */ /* * Copyright (c) 1986, 1989, 1991, 1993 @@ -86,8 +86,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; @@ -99,14 +99,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)) @@ -162,7 +167,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; @@ -173,7 +178,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) @@ -182,7 +187,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); @@ -191,7 +196,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)); } /* @@ -359,6 +364,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); } diff --git a/sys/ufs/lfs/lfs_vnops.c b/sys/ufs/lfs/lfs_vnops.c index 24ed50153f7..f0b80c6edc7 100644 --- a/sys/ufs/lfs/lfs_vnops.c +++ b/sys/ufs/lfs/lfs_vnops.c @@ -1,5 +1,5 @@ -/* $OpenBSD: lfs_vnops.c,v 1.2 1996/02/27 07:13:31 niklas Exp $ */ -/* $NetBSD: lfs_vnops.c,v 1.10 1996/02/09 22:28:59 christos Exp $ */ +/* $OpenBSD: lfs_vnops.c,v 1.3 1996/05/22 11:47:20 deraadt Exp $ */ +/* $NetBSD: lfs_vnops.c,v 1.11 1996/05/11 18:27:41 mycroft Exp $ */ /* * Copyright (c) 1986, 1989, 1991, 1993 @@ -234,10 +234,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)); } diff --git a/sys/ufs/ufs/ufs_inode.c b/sys/ufs/ufs/ufs_inode.c index 063c2d97010..fcc0b25f235 100644 --- a/sys/ufs/ufs/ufs_inode.c +++ b/sys/ufs/ufs/ufs_inode.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ufs_inode.c,v 1.2 1996/02/27 07:21:27 niklas Exp $ */ -/* $NetBSD: ufs_inode.c,v 1.6 1996/02/09 22:36:05 christos Exp $ */ +/* $OpenBSD: ufs_inode.c,v 1.3 1996/05/22 11:47:21 deraadt Exp $ */ +/* $NetBSD: ufs_inode.c,v 1.7 1996/05/11 18:27:52 mycroft Exp $ */ /* * Copyright (c) 1991, 1993 @@ -84,7 +84,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; @@ -121,8 +121,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); /* diff --git a/sys/ufs/ufs/ufs_readwrite.c b/sys/ufs/ufs/ufs_readwrite.c index f9ff9a1eca7..04795457609 100644 --- a/sys/ufs/ufs/ufs_readwrite.c +++ b/sys/ufs/ufs/ufs_readwrite.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ufs_readwrite.c,v 1.2 1996/02/27 07:21:31 niklas Exp $ */ -/* $NetBSD: ufs_readwrite.c,v 1.8 1996/02/09 22:36:11 christos Exp $ */ +/* $OpenBSD: ufs_readwrite.c,v 1.3 1996/05/22 11:47:21 deraadt Exp $ */ +/* $NetBSD: ufs_readwrite.c,v 1.9 1996/05/11 18:27:57 mycroft Exp $ */ /*- * Copyright (c) 1993 @@ -182,6 +182,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; @@ -293,8 +294,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); } diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index 69236048330..f78258249fa 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -1,5 +1,5 @@ -/* $OpenBSD: ufs_vnops.c,v 1.3 1996/02/27 22:56:14 niklas Exp $ */ -/* $NetBSD: ufs_vnops.c,v 1.17 1996/02/11 02:06:13 christos Exp $ */ +/* $OpenBSD: ufs_vnops.c,v 1.4 1996/05/22 11:47:22 deraadt Exp $ */ +/* $NetBSD: ufs_vnops.c,v 1.18 1996/05/11 18:28:04 mycroft Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -314,7 +314,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; /* @@ -373,11 +372,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); } @@ -661,7 +656,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 @@ -695,8 +690,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) { @@ -815,7 +810,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; @@ -918,8 +913,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; } @@ -976,14 +971,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; } @@ -1198,7 +1193,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 @@ -1238,8 +1233,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 @@ -1249,7 +1244,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. */ @@ -2001,7 +1996,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; @@ -2046,8 +2041,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; |