]> Devi Nivas Git - cs3210-lab0.git/commitdiff
check blockno passed to idestart
authorFrans Kaashoek <kaashoek@mit.edu>
Fri, 10 Apr 2015 11:15:06 +0000 (07:15 -0400)
committerFrans Kaashoek <kaashoek@mit.edu>
Fri, 10 Apr 2015 11:15:06 +0000 (07:15 -0400)
ide.c
mkfs.c
param.h

diff --git a/ide.c b/ide.c
index 96216ea17afe30cf2a23583d90eef8e82d698aef..ed5a572ec6e395ea0272d5d2a3a4125e544f28c2 100644 (file)
--- a/ide.c
+++ b/ide.c
@@ -48,7 +48,7 @@ void
 ideinit(void)
 {
   int i;
-
+  
   initlock(&idelock, "ide");
   picenable(IRQ_IDE);
   ioapicenable(IRQ_IDE, ncpu - 1);
@@ -73,6 +73,8 @@ idestart(struct buf *b)
 {
   if(b == 0)
     panic("idestart");
+  if(b->blockno >= FSSIZE)
+    panic("incorrect blockno");
   int sector_per_block =  BSIZE/SECTOR_SIZE;
   int sector = b->blockno * sector_per_block;
 
diff --git a/mkfs.c b/mkfs.c
index 2d2859d4323afc81ee4194db7e73cd3cda8ce38c..7197bc1c8bde3bd047cb8988b1efcff66f2e0b61 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
 
 #define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
 
-#define SIZE 1000
 #define NINODES 200
 
 // Disk layout:
 // [ boot block | sb block | inode blocks | bit map | data blocks | log ]
 
-int nbitmap = SIZE/(BSIZE*8) + 1;
+int nbitmap = FSSIZE/(BSIZE*8) + 1;
 int ninodeblocks = NINODES / IPB + 1;
 int nlog = LOGSIZE;  
 int nmeta;    // Number of meta blocks (inode, bitmap, and 2 extra)
@@ -90,18 +89,18 @@ main(int argc, char *argv[])
   }
 
   nmeta = 2 + ninodeblocks + nbitmap;
-  nblocks = SIZE - nlog - nmeta;
+  nblocks = FSSIZE - nlog - nmeta;
 
-  sb.size = xint(SIZE);
+  sb.size = xint(FSSIZE);
   sb.nblocks = xint(nblocks); // so whole disk is size sectors
   sb.ninodes = xint(NINODES);
   sb.nlog = xint(nlog);
 
-  printf("nmeta %d (boot, super, inode blocks %u, bitmap blocks %u) blocks %d log %u total %d\n", nmeta, ninodeblocks, nbitmap, nblocks, nlog, SIZE);
+  printf("nmeta %d (boot, super, inode blocks %u, bitmap blocks %u) blocks %d log %u total %d\n", nmeta, ninodeblocks, nbitmap, nblocks, nlog, FSSIZE);
 
   freeblock = nmeta;     // the first free block that we can allocate
 
-  for(i = 0; i < SIZE; i++)
+  for(i = 0; i < FSSIZE; i++)
     wsect(i, zeroes);
 
   memset(buf, 0, sizeof(buf));
@@ -164,7 +163,6 @@ main(int argc, char *argv[])
 void
 wsect(uint sec, void *buf)
 {
-  printf("seek to %d\n", sec * BSIZE);
   if(lseek(fsfd, sec * BSIZE, 0) != sec * BSIZE){
     perror("lseek");
     exit(1);
@@ -183,7 +181,6 @@ winode(uint inum, struct dinode *ip)
   struct dinode *dip;
 
   bn = IBLOCK(inum);
-  printf("winode %d\n", bn);
   rsect(bn, buf);
   dip = ((struct dinode*)buf) + (inum % IPB);
   *dip = *ip;
diff --git a/param.h b/param.h
index 1a73f42adb4ebd581f718d37565a8402fbd45ee2..a7e90efff401373750c70adbf0a9e65fbb52b4d3 100644 (file)
--- a/param.h
+++ b/param.h
@@ -10,4 +10,5 @@
 #define MAXOPBLOCKS  10  // max # of blocks any FS op writes
 #define LOGSIZE      (MAXOPBLOCKS*3)  // max data blocks in on-disk log
 #define NBUF         (MAXOPBLOCKS*3)  // size of disk block cache
+#define FSSIZE       1000  // size of file system in blocks