recover from out of range block numbers
authorBill Joy <bill@ucbvax.Berkeley.EDU>
Tue, 25 Nov 1980 04:47:15 +0000 (20:47 -0800)
committerBill Joy <bill@ucbvax.Berkeley.EDU>
Tue, 25 Nov 1980 04:47:15 +0000 (20:47 -0800)
SCCS-vsn: sys/kern/kern_physio.c 4.3
SCCS-vsn: sys/kern/vfs_bio.c 4.3
SCCS-vsn: sys/kern/vfs_cluster.c 4.3

usr/src/sys/kern/kern_physio.c
usr/src/sys/kern/vfs_bio.c
usr/src/sys/kern/vfs_cluster.c

index 14790e2..c236efd 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_physio.c   4.2     %G%     */
+/*     kern_physio.c   4.3     %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -298,9 +298,11 @@ dev_t dev;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
-       register int i, x;
-       register int dblkno = fsbtodb(blkno);
+       register int i, x, dblkno;
 
 
+       if ((unsigned)blkno >= 1 << (sizeof(int)*NBBY-PGSHIFT))
+               blkno = 1 << ((sizeof(int)*NBBY-PGSHIFT) + 1);
+       dblkno = fsbtodb(blkno);
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
index d847c09..a6a6293 100644 (file)
@@ -1,4 +1,4 @@
-/*     vfs_bio.c       4.2     %G%     */
+/*     vfs_bio.c       4.3     %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -298,9 +298,11 @@ dev_t dev;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
-       register int i, x;
-       register int dblkno = fsbtodb(blkno);
+       register int i, x, dblkno;
 
 
+       if ((unsigned)blkno >= 1 << (sizeof(int)*NBBY-PGSHIFT))
+               blkno = 1 << ((sizeof(int)*NBBY-PGSHIFT) + 1);
+       dblkno = fsbtodb(blkno);
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
index f73f0ba..5803433 100644 (file)
@@ -1,4 +1,4 @@
-/*     vfs_cluster.c   4.2     %G%     */
+/*     vfs_cluster.c   4.3     %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -298,9 +298,11 @@ dev_t dev;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
 daddr_t blkno;
 {
        register struct buf *bp, *dp, *ep;
-       register int i, x;
-       register int dblkno = fsbtodb(blkno);
+       register int i, x, dblkno;
 
 
+       if ((unsigned)blkno >= 1 << (sizeof(int)*NBBY-PGSHIFT))
+               blkno = 1 << ((sizeof(int)*NBBY-PGSHIFT) + 1);
+       dblkno = fsbtodb(blkno);
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
     loop:
        (void) spl0();
        for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];