diff --git a/fs.c b/fs.c index 91533d1..49a736d 100644 --- a/fs.c +++ b/fs.c @@ -335,10 +335,10 @@ bmap(struct inode *ip, uint bn, int alloc) if(bn < NINDIRECT){ // Load indirect block, allocating if necessary. - if((addr = ip->addrs[INDIRECT]) == 0){ + if((addr = ip->addrs[NDIRECT]) == 0){ if(!alloc) return -1; - ip->addrs[INDIRECT] = addr = balloc(ip->dev); + ip->addrs[NDIRECT] = addr = balloc(ip->dev); } bp = bread(ip->dev, addr); a = (uint*)bp->data; @@ -375,16 +375,16 @@ itrunc(struct inode *ip) } } - if(ip->addrs[INDIRECT]){ - bp = bread(ip->dev, ip->addrs[INDIRECT]); + if(ip->addrs[NDIRECT]){ + bp = bread(ip->dev, ip->addrs[NDIRECT]); a = (uint*)bp->data; for(j = 0; j < NINDIRECT; j++){ if(a[j]) bfree(ip->dev, a[j]); } brelse(bp); - bfree(ip->dev, ip->addrs[INDIRECT]); - ip->addrs[INDIRECT] = 0; + bfree(ip->dev, ip->addrs[NDIRECT]); + ip->addrs[NDIRECT] = 0; } ip->size = 0; diff --git a/fs.h b/fs.h index c86483e..6f92592 100644 --- a/fs.h +++ b/fs.h @@ -15,11 +15,9 @@ struct superblock { uint ninodes; // Number of inodes. }; -#define NADDRS (NDIRECT+1) #define NDIRECT 12 -#define INDIRECT 12 #define NINDIRECT (BSIZE / sizeof(uint)) -#define MAXFILE (NDIRECT + NINDIRECT) +#define MAXFILE (NDIRECT + NINDIRECT) // On-disk inode structure struct dinode { @@ -28,7 +26,7 @@ struct dinode { short minor; // Minor device number (T_DEV only) short nlink; // Number of links to inode in file system uint size; // Size of file (bytes) - uint addrs[NADDRS]; // Data block addresses + uint addrs[NDIRECT+1]; // Data block addresses }; // Inodes per block. diff --git a/fsvar.h b/fsvar.h index 17bcb5b..7f135a9 100644 --- a/fsvar.h +++ b/fsvar.h @@ -11,7 +11,7 @@ struct inode { short minor; short nlink; uint size; - uint addrs[NADDRS]; + uint addrs[NDIRECT+1]; }; #define I_BUSY 0x1 diff --git a/mkfs.c b/mkfs.c index 24a4b4f..3a3c62a 100644 --- a/mkfs.c +++ b/mkfs.c @@ -259,17 +259,17 @@ iappend(uint inum, void *xp, int n) } x = xint(din.addrs[fbn]); } else { - if(xint(din.addrs[INDIRECT]) == 0) { + if(xint(din.addrs[NDIRECT]) == 0) { // printf("allocate indirect block\n"); - din.addrs[INDIRECT] = xint(freeblock++); + din.addrs[NDIRECT] = xint(freeblock++); usedblocks++; } // printf("read indirect block\n"); - rsect(xint(din.addrs[INDIRECT]), (char*) indirect); + rsect(xint(din.addrs[NDIRECT]), (char*) indirect); if(indirect[fbn - NDIRECT] == 0) { indirect[fbn - NDIRECT] = xint(freeblock++); usedblocks++; - wsect(xint(din.addrs[INDIRECT]), (char*) indirect); + wsect(xint(din.addrs[NDIRECT]), (char*) indirect); } x = xint(indirect[fbn-NDIRECT]); }