1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-14 10:09:48 +00:00

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.
This commit is contained in:
Doug Rabson 1997-04-03 07:52:00 +00:00
parent 138b38c068
commit 363880128c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=24577
2 changed files with 16 additions and 2 deletions

View File

@ -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 @@ nfs_bioread(vp, uio, ioflag, cred)
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 @@ nfs_bioread(vp, uio, ioflag, cred)
* 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);

View File

@ -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 @@ nfs_bioread(vp, uio, ioflag, cred)
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 @@ nfs_bioread(vp, uio, ioflag, cred)
* 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);