diff options
author | Doug Rabson <dfr@FreeBSD.org> | 1997-04-03 07:52:00 +0000 |
---|---|---|
committer | Doug Rabson <dfr@FreeBSD.org> | 1997-04-03 07:52:00 +0000 |
commit | 363880128ccbbc0bdf15c6ccd01a5adb0c421bc1 (patch) | |
tree | f616aea9a27859014c14ffc8a49230df4f66236d /sys/nfs/nfs_bio.c | |
parent | 138b38c068dcf9fb2afde64eb1876f6ade279389 (diff) | |
download | src-363880128ccbbc0bdf15c6ccd01a5adb0c421bc1.tar.gz src-363880128ccbbc0bdf15c6ccd01a5adb0c421bc1.zip |
The code which recovered from a modified directory situation did not check
for eof when re-caching the directory. This could cause it to loop forever
if a directory was truncated.
Notes
Notes:
svn path=/head/; revision=24577
Diffstat (limited to 'sys/nfs/nfs_bio.c')
-rw-r--r-- | sys/nfs/nfs_bio.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/nfs/nfs_bio.c b/sys/nfs/nfs_bio.c index e44450fa24fa..b5912b585724 100644 --- a/sys/nfs/nfs_bio.c +++ b/sys/nfs/nfs_bio.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_bio.c 8.9 (Berkeley) 3/30/95 - * $Id: nfs_bio.c,v 1.32 1997/02/22 09:42:35 peter Exp $ + * $Id: nfs_bio.c,v 1.33 1997/03/09 10:21:26 bde Exp $ */ @@ -293,6 +293,10 @@ again: break; case VDIR: nfsstats.biocache_readdirs++; + if (np->n_direofoffset + && uio->uio_offset >= np->n_direofoffset) { + return (0); + } lbn = uio->uio_offset / NFS_DIRBLKSIZ; on = uio->uio_offset & (NFS_DIRBLKSIZ - 1); bp = nfs_getcacheblk(vp, lbn, NFS_DIRBLKSIZ, p); @@ -315,6 +319,9 @@ again: * offset cookies. */ for (i = 0; i <= lbn && !error; i++) { + if (np->n_direofoffset + && (i * NFS_DIRBLKSIZ) >= np->n_direofoffset) + return (0); bp = nfs_getcacheblk(vp, i, NFS_DIRBLKSIZ, p); if (!bp) return (EINTR); |