]> Zhao Yanbai Git Server - minix.git/commitdiff
mkfs: drop support for zone != block
authorBen Gras <ben@minix3.org>
Wed, 7 Nov 2012 17:23:03 +0000 (18:23 +0100)
committerBen Gras <ben@minix3.org>
Wed, 7 Nov 2012 22:16:40 +0000 (23:16 +0100)
usr.sbin/mkfs.mfs/mkfs.c

index f5dd3c18e833b44dc9e33c763e1e6396ebbe853b..3d154c2f7186ee350364ebb6188b1d1286d905d8 100644 (file)
@@ -67,7 +67,7 @@ typedef uint32_t zone_t;
 extern char *optarg;
 extern int optind;
 
-int next_zone, next_inode, zone_size, zone_shift = 0, zoff;
+int next_zone, next_inode, zoff;
 block_t nrblocks;
 int inode_offset, lct = 0, disk, fd, print = 0, file = 0;
 unsigned int nrinodes;
@@ -209,9 +209,6 @@ char *argv[];
        }
   }
 
-  zone_shift = 0;              /* for future use */
-  zone_size = 1 << zone_shift; /* nr of blocks per zone */
-
   if(!inodes_per_block)
        inodes_per_block = V2_INODES_PER_BLOCK(block_size);
 
@@ -368,7 +365,7 @@ printf("testb = 0x%x 0x%x 0x%x\n", testb[0], testb[1], testb[block_size-1]);
 
        put_block((block_t) 0, zero);   /* Write a null boot block. */
 
-  zones = nrblocks >> zone_shift;
+  zones = nrblocks;
 
   super(zones, inodes);
 
@@ -400,9 +397,8 @@ void detect_fs_size()
   initb += bitmapsize((uint32_t) zonecount, block_size);
   initb += START_BLOCK;
   initb += (inocount + inodes_per_block - 1) / inodes_per_block;
-  initb = (initb + (1 << zone_shift) - 1) >> zone_shift;
 
-  blockcount = initb+zonecount*zone_size;
+  blockcount = initb+zonecount;
   fseek(proto, point, SEEK_SET);
 }
 
@@ -422,8 +418,8 @@ void sizeup_dir()
        getline(line, token);
        p = token[0];
        if (*p == '$') {
-               dir_zones = (dir_entries / (NR_DIR_ENTRIES(block_size) * zone_size));           
-               if(dir_entries % (NR_DIR_ENTRIES(block_size) * zone_size))
+               dir_zones = (dir_entries / (NR_DIR_ENTRIES(block_size)));               
+               if(dir_entries % (NR_DIR_ENTRIES(block_size)))
                        dir_zones++;
                /* Assumes directory fits in direct blocks */
                zonecount += dir_zones;
@@ -453,8 +449,8 @@ void sizeup_dir()
                        }
                        size = ftell(f);
                        fclose(f);
-                       zone_t fzones= (size / (zone_size * block_size));
-                       if (size % (zone_size * block_size))
+                       zone_t fzones= (size / block_size);
+                       if (size % block_size)
                                fzones++;
                        if (fzones > nr_dzones)
                                fzones++;       /* Assumes files fit within single indirect */
@@ -568,8 +564,7 @@ ino_t inodes;
   inode_offset = START_BLOCK + sup->s_imap_blocks + sup->s_zmap_blocks;
   inodeblks = (inodes + inodes_per_block - 1) / inodes_per_block;
   initblks = inode_offset + inodeblks;
-  sup->s_firstdatazone_old = nb =
-       (initblks + (1 << zone_shift) - 1) >> zone_shift;
+  sup->s_firstdatazone_old = nb = initblks;
   if(nb >= zones) pexit("bit maps too large");
   if(nb != sup->s_firstdatazone_old) {
        /* The field is too small to store the value. Fortunately, the value
@@ -581,7 +576,7 @@ ino_t inodes;
   }
   sup->s_firstdatazone = nb;
   zoff = sup->s_firstdatazone - 1;
-  sup->s_log_zone_size = zone_shift;
+  sup->s_log_zone_size = 0;
   {
        v2sq = (zone_t) V2_INDIRECTS(block_size) * V2_INDIRECTS(block_size);
        zo = V2_NR_DZONES + (zone_t) V2_INDIRECTS(block_size) + v2sq;
@@ -646,7 +641,7 @@ void enter_symlink(ino_t inode, char *link)
   buf = alloc_block();
   z = alloc_zone();
   strcpy(buf, link);
-  put_block((z << zone_shift), buf);
+  put_block(z, buf);
 
   add_zone(inode, z, (size_t) strlen(link), current_time);
 
@@ -724,7 +719,7 @@ void eat_file(inode, f)
 ino_t inode;
 int f;
 {
-  int ct, i, j, k;
+  int ct, k;
   zone_t z;
   char *buf;
   uint32_t timeval;
@@ -732,15 +727,13 @@ int f;
   buf = alloc_block();
 
   do {
-       for (i = 0, j = 0; i < zone_size; i++, j += ct) {
-               for (k = 0; k < block_size; k++) buf[k] = 0;
-               if ((ct = read(f, buf, block_size)) > 0) {
-                       if (i == 0) z = alloc_zone();
-                       put_block((z << zone_shift) + i, buf);
-               }
+       for (k = 0; k < block_size; k++) buf[k] = 0;
+       if ((ct = read(f, buf, block_size)) > 0) {
+               z = alloc_zone();
+               put_block(z, buf);
        }
        timeval = (dflag ? current_time : file_time(f));
-       if (ct) add_zone(inode, z, (size_t) j, timeval);
+       if (ct) add_zone(inode, z, (size_t) ct, timeval);
   } while (ct == block_size);
   close(f);
   free(buf);
@@ -766,7 +759,7 @@ char *name;
 {
   /* Enter child in parent directory */
   /* Works for dir > 1 block and zone > block */
-  unsigned int i, j, k, l;
+  unsigned int i, j, k;
   block_t b;
   zone_t z;
   char *p1, *p2;
@@ -785,8 +778,8 @@ char *name;
                ino->d2_zone[k] = z;
        }
 
-       for (l = 0; l < zone_size; l++) {
-               get_block((z << zone_shift) + l, (char *) dir_entry);
+       {
+               get_block(z, (char *) dir_entry);
                for (i = 0; i < NR_DIR_ENTRIES(block_size); i++) {
                        if (dir_entry[i].mfs_d_ino == 0) {
                                dir_entry[i].mfs_d_ino = child;
@@ -798,7 +791,7 @@ char *name;
                                        *p2++ = *p1;
                                        if (*p1 != 0) p1++;
                                }
-                               put_block((z << zone_shift) + l, (char *) dir_entry);
+                               put_block(z, (char *) dir_entry);
                                put_block(b, (char *) inoblock);
                                free(dir_entry);
                                free(inoblock);
@@ -851,7 +844,7 @@ void add_zone(ino_t n, zone_t z, size_t bytes, uint32_t cur_time)
   if (p->d2_zone[V2_NR_DZONES] == 0) p->d2_zone[V2_NR_DZONES] = alloc_zone();
   indir = p->d2_zone[V2_NR_DZONES];
   put_block(b, (char *) inode);
-  b = indir << zone_shift;
+  b = indir;
   get_block(b, (char *) blk);
   for (i = 0; i < V2_INDIRECTS(block_size); i++)
        if (blk[i] == 0) {
@@ -960,15 +953,13 @@ static zone_t alloc_zone()
   /* Allocate a new zone */
   /* Works for zone > block */
   block_t b;
-  int i;
   zone_t z;
 
   z = next_zone++;
-  b = z << zone_shift;
-  if ((b + zone_size) > nrblocks)
+  b = z;
+  if ((b + 1) > nrblocks)
        pexit("File system not big enough for all the files");
-  for (i = 0; i < zone_size; i++)
-       put_block(b + i, zero); /* give an empty zone */
+  put_block(b, zero);  /* give an empty zone */
   /* DEBUG FIXME.  This assumes the bit is in the first zone map block. */
   insert_bit(zone_map, (int) (z - zoff));      /* lint, NOT OK because
                                                 * z hasn't been broken