diff options
author | bde <bde@FreeBSD.org> | 1997-03-22 06:53:45 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1997-03-22 06:53:45 +0000 |
commit | 0bc178170104cff1e818e849d08a50c6a4ee0851 (patch) | |
tree | 1a4787be89dc6587f785bb211bf92dd0ce277648 /sys/gnu | |
parent | 5610d80b6231f85421e587a175ddd4d4b0c735c5 (diff) | |
download | FreeBSD-src-0bc178170104cff1e818e849d08a50c6a4ee0851.zip FreeBSD-src-0bc178170104cff1e818e849d08a50c6a4ee0851.tar.gz |
Fixed some invalid (non-atomic) accesses to `time', mostly ones of the
form `tv = time'. Use a new function gettime(). The current version
just forces atomicicity without fixing precision or efficiency bugs.
Simplified some related valid accesses by using the central function.
Diffstat (limited to 'sys/gnu')
-rw-r--r-- | sys/gnu/ext2fs/ext2_alloc.c | 13 | ||||
-rw-r--r-- | sys/gnu/ext2fs/ext2_extern.h | 1 | ||||
-rw-r--r-- | sys/gnu/ext2fs/ext2_inode.c | 8 | ||||
-rw-r--r-- | sys/gnu/ext2fs/ext2_readwrite.c | 6 | ||||
-rw-r--r-- | sys/gnu/ext2fs/ext2_vnops.c | 6 | ||||
-rw-r--r-- | sys/gnu/fs/ext2fs/ext2_alloc.c | 13 | ||||
-rw-r--r-- | sys/gnu/fs/ext2fs/ext2_extern.h | 1 | ||||
-rw-r--r-- | sys/gnu/fs/ext2fs/ext2_inode.c | 8 | ||||
-rw-r--r-- | sys/gnu/fs/ext2fs/ext2_readwrite.c | 6 | ||||
-rw-r--r-- | sys/gnu/fs/ext2fs/ext2_vnops.c | 6 |
10 files changed, 22 insertions, 46 deletions
diff --git a/sys/gnu/ext2fs/ext2_alloc.c b/sys/gnu/ext2fs/ext2_alloc.c index 8d46733..eef5393 100644 --- a/sys/gnu/ext2fs/ext2_alloc.c +++ b/sys/gnu/ext2fs/ext2_alloc.c @@ -241,6 +241,7 @@ return ENOSPC; daddr_t start_lbn, end_lbn, soff, eoff, newblk, blkno; struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp; int i, len, start_lvl, end_lvl, pref, ssize; + struct timeval tv; vp = ap->a_vp; ip = VTOI(vp); @@ -346,13 +347,11 @@ return ENOSPC; else bwrite(sbp); } else { -#if !defined(__FreeBSD__) - struct timeval time; - get_time(&time); -#endif ip->i_flag |= IN_CHANGE | IN_UPDATE; - if (!doasyncfree) - VOP_UPDATE(vp, &time, &time, MNT_WAIT); + if (!doasyncfree) { + gettime(&tv); + VOP_UPDATE(vp, &tv, &tv, MNT_WAIT); + } } if (ssize < len) if (doasyncfree) @@ -441,7 +440,7 @@ ext2_valloc(ap) * XXX check if this makes sense in ext2 */ #if !defined(__FreeBSD__) - get_time(&time); + gettime(&time); #endif if (++nextgennumber < (u_long)time.tv_sec) nextgennumber = time.tv_sec; diff --git a/sys/gnu/ext2fs/ext2_extern.h b/sys/gnu/ext2fs/ext2_extern.h index 3f97cba..f287819 100644 --- a/sys/gnu/ext2fs/ext2_extern.h +++ b/sys/gnu/ext2fs/ext2_extern.h @@ -95,6 +95,7 @@ void mark_buffer_dirty __P((struct buf *bh)); #if !defined(__FreeBSD__) int bwrite(); /* FFS needs a bwrite routine. XXX */ +#define gettime get_time #endif /* diff --git a/sys/gnu/ext2fs/ext2_inode.c b/sys/gnu/ext2fs/ext2_inode.c index 788f5eb..9b94bc2 100644 --- a/sys/gnu/ext2fs/ext2_inode.c +++ b/sys/gnu/ext2fs/ext2_inode.c @@ -125,7 +125,7 @@ ext2_update(ap) } if (ip->i_flag & IN_CHANGE) { #if !defined(__FreeBSD__) - get_time(&time); + gettime(&time); #endif ip->i_ctime = time.tv_sec; } @@ -192,11 +192,7 @@ printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, ap->a_length); return EFBIG; oip = VTOI(ovp); -#if defined(__FreeBSD__) - tv = time; -#else - get_time(&tv); -#endif + gettime(&tv); if (ovp->v_type == VLNK && oip->i_size < ovp->v_mount->mnt_maxsymlinklen) { #if DIAGNOSTIC diff --git a/sys/gnu/ext2fs/ext2_readwrite.c b/sys/gnu/ext2fs/ext2_readwrite.c index 806c630..ae87153 100644 --- a/sys/gnu/ext2fs/ext2_readwrite.c +++ b/sys/gnu/ext2fs/ext2_readwrite.c @@ -313,11 +313,7 @@ WRITE(ap) uio->uio_resid = resid; } } else if (resid > uio->uio_resid && (ioflag & IO_SYNC)) { -#if !defined(__FreeBSD__) - get_time(&tv); -#else - tv = time; -#endif + gettime(&tv); error = VOP_UPDATE(vp, &tv, &tv, 1); } return (error); diff --git a/sys/gnu/ext2fs/ext2_vnops.c b/sys/gnu/ext2fs/ext2_vnops.c index 7bc803a..2075e07 100644 --- a/sys/gnu/ext2fs/ext2_vnops.c +++ b/sys/gnu/ext2fs/ext2_vnops.c @@ -333,10 +333,6 @@ loop: #endif } splx(s); -#if defined(__FreeBSD__) - tv = time; -#else - get_time(&tv); -#endif + gettime(&tv); return (VOP_UPDATE(ap->a_vp, &tv, &tv, ap->a_waitfor == MNT_WAIT)); } diff --git a/sys/gnu/fs/ext2fs/ext2_alloc.c b/sys/gnu/fs/ext2fs/ext2_alloc.c index 8d46733..eef5393 100644 --- a/sys/gnu/fs/ext2fs/ext2_alloc.c +++ b/sys/gnu/fs/ext2fs/ext2_alloc.c @@ -241,6 +241,7 @@ return ENOSPC; daddr_t start_lbn, end_lbn, soff, eoff, newblk, blkno; struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp; int i, len, start_lvl, end_lvl, pref, ssize; + struct timeval tv; vp = ap->a_vp; ip = VTOI(vp); @@ -346,13 +347,11 @@ return ENOSPC; else bwrite(sbp); } else { -#if !defined(__FreeBSD__) - struct timeval time; - get_time(&time); -#endif ip->i_flag |= IN_CHANGE | IN_UPDATE; - if (!doasyncfree) - VOP_UPDATE(vp, &time, &time, MNT_WAIT); + if (!doasyncfree) { + gettime(&tv); + VOP_UPDATE(vp, &tv, &tv, MNT_WAIT); + } } if (ssize < len) if (doasyncfree) @@ -441,7 +440,7 @@ ext2_valloc(ap) * XXX check if this makes sense in ext2 */ #if !defined(__FreeBSD__) - get_time(&time); + gettime(&time); #endif if (++nextgennumber < (u_long)time.tv_sec) nextgennumber = time.tv_sec; diff --git a/sys/gnu/fs/ext2fs/ext2_extern.h b/sys/gnu/fs/ext2fs/ext2_extern.h index 3f97cba..f287819 100644 --- a/sys/gnu/fs/ext2fs/ext2_extern.h +++ b/sys/gnu/fs/ext2fs/ext2_extern.h @@ -95,6 +95,7 @@ void mark_buffer_dirty __P((struct buf *bh)); #if !defined(__FreeBSD__) int bwrite(); /* FFS needs a bwrite routine. XXX */ +#define gettime get_time #endif /* diff --git a/sys/gnu/fs/ext2fs/ext2_inode.c b/sys/gnu/fs/ext2fs/ext2_inode.c index 788f5eb..9b94bc2 100644 --- a/sys/gnu/fs/ext2fs/ext2_inode.c +++ b/sys/gnu/fs/ext2fs/ext2_inode.c @@ -125,7 +125,7 @@ ext2_update(ap) } if (ip->i_flag & IN_CHANGE) { #if !defined(__FreeBSD__) - get_time(&time); + gettime(&time); #endif ip->i_ctime = time.tv_sec; } @@ -192,11 +192,7 @@ printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, ap->a_length); return EFBIG; oip = VTOI(ovp); -#if defined(__FreeBSD__) - tv = time; -#else - get_time(&tv); -#endif + gettime(&tv); if (ovp->v_type == VLNK && oip->i_size < ovp->v_mount->mnt_maxsymlinklen) { #if DIAGNOSTIC diff --git a/sys/gnu/fs/ext2fs/ext2_readwrite.c b/sys/gnu/fs/ext2fs/ext2_readwrite.c index 806c630..ae87153 100644 --- a/sys/gnu/fs/ext2fs/ext2_readwrite.c +++ b/sys/gnu/fs/ext2fs/ext2_readwrite.c @@ -313,11 +313,7 @@ WRITE(ap) uio->uio_resid = resid; } } else if (resid > uio->uio_resid && (ioflag & IO_SYNC)) { -#if !defined(__FreeBSD__) - get_time(&tv); -#else - tv = time; -#endif + gettime(&tv); error = VOP_UPDATE(vp, &tv, &tv, 1); } return (error); diff --git a/sys/gnu/fs/ext2fs/ext2_vnops.c b/sys/gnu/fs/ext2fs/ext2_vnops.c index 7bc803a..2075e07 100644 --- a/sys/gnu/fs/ext2fs/ext2_vnops.c +++ b/sys/gnu/fs/ext2fs/ext2_vnops.c @@ -333,10 +333,6 @@ loop: #endif } splx(s); -#if defined(__FreeBSD__) - tv = time; -#else - get_time(&tv); -#endif + gettime(&tv); return (VOP_UPDATE(ap->a_vp, &tv, &tv, ap->a_waitfor == MNT_WAIT)); } |