put in new inode structure
authorKirk McKusick <mckusic@ucbvax.Berkeley.EDU>
Sat, 29 Aug 1981 12:22:39 +0000 (04:22 -0800)
committerKirk McKusick <mckusic@ucbvax.Berkeley.EDU>
Sat, 29 Aug 1981 12:22:39 +0000 (04:22 -0800)
SCCS-vsn: sbin/newfs/mkfs.c 1.2
SCCS-vsn: sbin/fsck/main.c 1.2
SCCS-vsn: old/dcheck/dcheck.c 1.2
SCCS-vsn: sbin/icheck/icheck.c 1.2
SCCS-vsn: sbin/ncheck/ncheck.c 1.2
SCCS-vsn: sbin/dumpfs/dumpfs.c 1.2

usr/src/old/dcheck/dcheck.c
usr/src/sbin/dumpfs/dumpfs.c
usr/src/sbin/fsck/main.c
usr/src/sbin/icheck/icheck.c
usr/src/sbin/ncheck/ncheck.c
usr/src/sbin/newfs/mkfs.c

index 77543be..743a671 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)dcheck.c    1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)dcheck.c    1.2 (Berkeley) %G%";
 /*
  * dcheck - check directory consistency
  */
 /*
  * dcheck - check directory consistency
  */
@@ -8,7 +8,6 @@ static  char *sccsid = "@(#)dcheck.c    1.1 (Berkeley) %G%";
 #include <stdio.h>
 #include "../h/param.h"
 #include "../h/inode.h"
 #include <stdio.h>
 #include "../h/param.h"
 #include "../h/inode.h"
-#include "../h/ino.h"
 #include "../h/dir.h"
 #include "../h/fs.h"
 
 #include "../h/dir.h"
 #include "../h/fs.h"
 
@@ -19,7 +18,7 @@ union {
 #define        sblock  fsun.fs
 
 struct dinode  itab[MAXIPG];
 #define        sblock  fsun.fs
 
 struct dinode  itab[MAXIPG];
-daddr_t        iaddr[NDADDR+NIADDR];
+struct dinode  *gip;
 ino_t  ilist[NB];
 
 int    fi;
 ino_t  ilist[NB];
 
 int    fi;
@@ -132,7 +131,7 @@ register struct dinode *ip;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
-       l3tol(iaddr, ip->di_addr, NDADDR+NIADDR);
+       gip = ip;
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
@@ -204,12 +203,12 @@ bmap(i)
        daddr_t ibuf[NINDIR];
 
        if(i < NDADDR)
        daddr_t ibuf[NINDIR];
 
        if(i < NDADDR)
-               return(iaddr[i]);
+               return(gip->di_db[i]);
        i -= NDADDR;
        if(i > NINDIR) {
                printf("%u - huge directory\n", ino);
                return((daddr_t)0);
        }
        i -= NDADDR;
        if(i > NINDIR) {
                printf("%u - huge directory\n", ino);
                return((daddr_t)0);
        }
-       bread(iaddr[NDADDR], (char *)ibuf, sizeof(ibuf));
+       bread(gip->di_ib[i], (char *)ibuf, sizeof(ibuf));
        return(ibuf[i]);
 }
        return(ibuf[i]);
 }
index 207078e..d5dd5ae 100644 (file)
@@ -1,7 +1,7 @@
-static char *sccsid = "@(#)dumpfs.c    1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)dumpfs.c    1.2 (Berkeley) %G%";
 #include "../h/param.h"
 #include "../h/fs.h"
 #include "../h/param.h"
 #include "../h/fs.h"
-#include "../h/ino.h"
+#include "../h/inode.h"
 
 /*
  * dumpfs
 
 /*
  * dumpfs
index 8292c1a..a6613b3 100644 (file)
@@ -1,10 +1,9 @@
-static char *sccsid = "@(#)main.c      1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)main.c      1.2 (Berkeley) %G%";
 #include <stdio.h>
 #include <ctype.h>
 #include "../h/param.h"
 #include "../h/fs.h"
 #include "../h/dir.h"
 #include <stdio.h>
 #include <ctype.h>
 #include "../h/param.h"
 #include "../h/fs.h"
 #include "../h/dir.h"
-#include "../h/ino.h"
 #include "../h/inode.h"
 #include "../h/stat.h"
 #include <fstab.h>
 #include "../h/inode.h"
 #include "../h/stat.h"
 #include <fstab.h>
@@ -731,14 +730,12 @@ ckinode(dp, flg)
        register daddr_t *ap;
        register ret;
        int (*func)(), n, ndb, size;
        register daddr_t *ap;
        register ret;
        int (*func)(), n, ndb, size;
-       daddr_t iaddrs[NDADDR+NIADDR];
 
        if (SPECIAL)
                return (KEEPON);
 
        if (SPECIAL)
                return (KEEPON);
-       l3tol(iaddrs, dp->di_addr, NDADDR+NIADDR);
        func = (flg == ADDR) ? pfunc : dirscan;
        ndb = howmany(dp->di_size, BSIZE);
        func = (flg == ADDR) ? pfunc : dirscan;
        ndb = howmany(dp->di_size, BSIZE);
-       for (ap = iaddrs; ap < &iaddrs[NDADDR]; ap++) {
+       for (ap = dp->di_db; ap < &dp->di_db[NDADDR]; ap++) {
                if (--ndb == 0 && (dp->di_size&BMASK))
                        size = howmany(dp->di_size&BMASK, FSIZE);
                else
                if (--ndb == 0 && (dp->di_size&BMASK))
                        size = howmany(dp->di_size&BMASK, FSIZE);
                else
index 041db8c..d1e8f2c 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)icheck.c    1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)icheck.c    1.2 (Berkeley) %G%";
 /*
  * icheck
  */
 /*
  * icheck
  */
@@ -11,7 +11,6 @@ static        char *sccsid = "@(#)icheck.c    1.1 (Berkeley) %G%";
 #endif
 #include "../h/param.h"
 #include "../h/inode.h"
 #endif
 #include "../h/param.h"
 #include "../h/inode.h"
-#include "../h/ino.h"
 #include "../h/fs.h"
 
 #define        setbit(a, i)    ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
 #include "../h/fs.h"
 
 #define        setbit(a, i)    ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
@@ -31,7 +30,6 @@ union {
 #define        cgrp cgun.cg
 
 struct dinode  itab[MAXIPG];
 #define        cgrp cgun.cg
 
 struct dinode  itab[MAXIPG];
-daddr_t        iaddr[NDADDR+NIADDR];
 daddr_t        blist[NB];
 char   *bmap;
 
 daddr_t        blist[NB];
 char   *bmap;
 
@@ -311,25 +309,24 @@ register struct dinode *ip;
                printf("bad mode %u\n", ino);
                return;
        }
                printf("bad mode %u\n", ino);
                return;
        }
-       l3tol(iaddr, ip->di_addr, NDADDR+NIADDR);
        ndb = howmany(ip->di_size, BSIZE)-1;
        for(i=0; i<NDADDR; i++) {
        ndb = howmany(ip->di_size, BSIZE)-1;
        for(i=0; i<NDADDR; i++) {
-               if(iaddr[i] == 0)
+               if(ip->di_db[i] == 0)
                        continue;
                if (i==ndb && (ip->di_size&BMASK)) {
                        sz = howmany(ip->di_size - i * BSIZE, FSIZE);
                        for (l = 0; l < sz; l++)
                        continue;
                if (i==ndb && (ip->di_size&BMASK)) {
                        sz = howmany(ip->di_size - i * BSIZE, FSIZE);
                        for (l = 0; l < sz; l++)
-                               chk(iaddr[i]+l, "data (frag)");
+                               chk(ip->di_db[i]+l, "data (frag)");
                        szfrag += sz;
                        nfrag++;
                } else {
                        for (l = 0; l < FRAG; l++)
                        szfrag += sz;
                        nfrag++;
                } else {
                        for (l = 0; l < FRAG; l++)
-                               chk(iaddr[i]+l, "data (block)");
+                               chk(ip->di_db[i]+l, "data (block)");
                        nblock++;
                }
        }
        for(i=NDADDR; i<NDADDR+NIADDR;i++) {
                        nblock++;
                }
        }
        for(i=NDADDR; i<NDADDR+NIADDR;i++) {
-               if(iaddr[i] == 0)
+               if(ip->di_ib[i] == 0)
                        continue;
                nindir++;
                if (i==NDADDR) {
                        continue;
                nindir++;
                if (i==NDADDR) {
@@ -340,9 +337,9 @@ register struct dinode *ip;
                } else
                        sz = FRAG;
                for (j = 0; j < FRAG; j++)
                } else
                        sz = FRAG;
                for (j = 0; j < FRAG; j++)
-                       if (chk(iaddr[i]+j, "1st indirect"))
+                       if (chk(ip->di_ib[i]+j, "1st indirect"))
                                continue;
                                continue;
-               bread(iaddr[i], (char *)ind1, sz*FSIZE);
+               bread(ip->di_ib[i], (char *)ind1, sz*FSIZE);
                nib = sz * (NINDIR/FRAG);
                for(j=0; j<nib; j++) {
                        if(ind1[j] == 0)
                nib = sz * (NINDIR/FRAG);
                for(j=0; j<nib; j++) {
                        if(ind1[j] == 0)
index e8745fd..32af317 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)ncheck.c    1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)ncheck.c    1.2 (Berkeley) %G%";
 /*
  * ncheck -- obtain file names from reading filesystem
  */
 /*
  * ncheck -- obtain file names from reading filesystem
  */
@@ -10,13 +10,12 @@ static      char *sccsid = "@(#)ncheck.c    1.1 (Berkeley) %G%";
 #include <stdio.h>
 #include "../h/param.h"
 #include "../h/inode.h"
 #include <stdio.h>
 #include "../h/param.h"
 #include "../h/inode.h"
-#include "../h/ino.h"
 #include "../h/dir.h"
 #include "../h/fs.h"
 
 struct fs      sblock;
 struct dinode  itab[MAXIPG];
 #include "../h/dir.h"
 #include "../h/fs.h"
 
 struct fs      sblock;
 struct dinode  itab[MAXIPG];
-daddr_t        iaddr[NDADDR+NIADDR];
+struct         dinode  *gip;
 ino_t  ilist[NB];
 struct htab
 {
 ino_t  ilist[NB];
 struct htab
 {
@@ -150,7 +149,7 @@ register struct dinode *ip;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
-       l3tol(iaddr, ip->di_addr, NDADDR);
+       gip = ip;
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
@@ -192,7 +191,7 @@ register struct dinode *ip;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
 
        if((ip->di_mode&IFMT) != IFDIR)
                return;
-       l3tol(iaddr, ip->di_addr, NDADDR);
+       gip = ip;
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
        doff = 0;
        for(i=0;; i++) {
                if(doff >= ip->di_size)
@@ -298,13 +297,13 @@ bmap(i)
 {
        daddr_t ibuf[NINDIR];
 
 {
        daddr_t ibuf[NINDIR];
 
-       if(i < NDADDR-3)
-               return(iaddr[i]);
-       i -= NDADDR-3;
+       if(i < NDADDR)
+               return(gip->di_db[i]);
+       i -= NDADDR;
        if(i > NINDIR) {
                fprintf(stderr, "ncheck: %u - huge directory\n", ino);
                return((daddr_t)0);
        }
        if(i > NINDIR) {
                fprintf(stderr, "ncheck: %u - huge directory\n", ino);
                return((daddr_t)0);
        }
-       bread(iaddr[NDADDR-3], (char *)ibuf, sizeof(ibuf));
+       bread(gip->di_ib[i], (char *)ibuf, sizeof(ibuf));
        return(ibuf[i]);
 }
        return(ibuf[i]);
 }
index 7976662..b9b4bac 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)mkfs.c      1.1 (Berkeley) %G%";
+static char *sccsid = "@(#)mkfs.c      1.2 (Berkeley) %G%";
 
 /*
  * make file system for cylinder-group style file systems
 
 /*
  * make file system for cylinder-group style file systems
@@ -20,7 +20,6 @@ static        char *sccsid = "@(#)mkfs.c      1.1 (Berkeley) %G%";
 #endif
 
 #include "../h/param.h"
 #endif
 
 #include "../h/param.h"
-#include "../h/ino.h"
 #include "../h/inode.h"
 #include "../h/fs.h"
 #include "../h/dir.h"
 #include "../h/inode.h"
 #include "../h/fs.h"
 #include "../h/dir.h"
@@ -327,16 +326,6 @@ initcg(c)
                dmax = sblock.fs_size;
        d = cbase;
        cs = fscs+c;
                dmax = sblock.fs_size;
        d = cbase;
        cs = fscs+c;
-tryagain:
-       for (i = cgdmin(c,&sblock) - FRAG; i >= 0; i -= FRAG)
-               if (badblk(d)) {
-                       d += i + FRAG;
-                       if (d + sblock.fs_ipg/INOPB >= dmax) {
-                               printf("bad blocks: cyl grp %d unusable\n", c);
-                               exit(1);
-                       }
-                       goto tryagain;
-               }
        cs->cs_ndir = 0;
        acg.cg_time = utime;
        acg.cg_magic = CG_MAGIC;
        cs->cs_ndir = 0;
        acg.cg_time = utime;
        acg.cg_magic = CG_MAGIC;
@@ -377,26 +366,18 @@ tryagain:
        for (d = 0; d < dmin; d += FRAG)
                clrblock(acg.cg_free, d/FRAG);
        while ((d+FRAG) <= dmax - cbase) {
        for (d = 0; d < dmin; d += FRAG)
                clrblock(acg.cg_free, d/FRAG);
        while ((d+FRAG) <= dmax - cbase) {
-               if (badblk(cbase+d))
-                       clrblock(acg.cg_free, d/FRAG);
-               else {
-                       setblock(acg.cg_free, d/FRAG);
-                       acg.cg_nbfree++;
-                       s = d * NSPF;
-                       acg.cg_b[s/sblock.fs_spc]
-                           [s%sblock.fs_nsect*NRPOS/sblock.fs_nsect]++;
-               }
+               setblock(acg.cg_free, d/FRAG);
+               acg.cg_nbfree++;
+               s = d * NSPF;
+               acg.cg_b[s/sblock.fs_spc]
+                   [s%sblock.fs_nsect*NRPOS/sblock.fs_nsect]++;
                d += FRAG;
        }
        if (d < dmax - cbase)
                d += FRAG;
        }
        if (d < dmax - cbase)
-               if (badblk(d))
-                       for (; d < dmax - cbase; d++)
-                               clrbit(acg.cg_free, d);
-               else
-                       for (; d < dmax - cbase; d++) {
-                               setbit(acg.cg_free, d);
-                               acg.cg_nffree++;
-                       }
+               for (; d < dmax - cbase; d++) {
+                       setbit(acg.cg_free, d);
+                       acg.cg_nffree++;
+               }
        for (; d < MAXBPG; d++)
                clrbit(acg.cg_free, d);
        sblock.fs_nffree += acg.cg_nffree;
        for (; d < MAXBPG; d++)
                clrbit(acg.cg_free, d);
        sblock.fs_nffree += acg.cg_nffree;
@@ -434,6 +415,9 @@ struct inode *par;
        }
        in.i_uid = getnum();
        in.i_gid = getnum();
        }
        in.i_uid = getnum();
        in.i_gid = getnum();
+       in.i_atime = utime;
+       in.i_mtime = utime;
+       in.i_ctime = utime;
 
        /*
         * general initialization prior to
 
        /*
         * general initialization prior to
@@ -449,9 +433,9 @@ struct inode *par;
        in.i_nlink = 1;
        in.i_size = 0;
        for(i=0; i<NDADDR; i++)
        in.i_nlink = 1;
        in.i_size = 0;
        for(i=0; i<NDADDR; i++)
-               in.i_un.i_f.i_db[i] = (daddr_t)0;
+               in.i_db[i] = (daddr_t)0;
        for(i=0; i<NIADDR; i++)
        for(i=0; i<NIADDR; i++)
-               in.i_un.i_f.i_ib[i] = (daddr_t)0;
+               in.i_ib[i] = (daddr_t)0;
        if(par == (struct inode *)0) {
                par = &in;
                in.i_nlink--;
        if(par == (struct inode *)0) {
                par = &in;
                in.i_nlink--;
@@ -489,7 +473,7 @@ struct inode *par;
 
                i = getnum() & 0377;
                f = getnum() & 0377;
 
                i = getnum() & 0377;
                f = getnum() & 0377;
-               in.i_un.i_d.i_rdev = makedev(i, f);
+               in.i_rdev = makedev(i, f);
                break;
 
        case IFDIR:
                break;
 
        case IFDIR:
@@ -739,51 +723,19 @@ daddr_t *ib;
        }
        d = itod(ip->i_number,&sblock);
        rdfs(d, BSIZE, buf);
        }
        d = itod(ip->i_number,&sblock);
        rdfs(d, BSIZE, buf);
-       dp = (struct dinode *)buf;
-       dp += itoo(ip->i_number);
-
-       dp->di_mode = ip->i_mode;
-       dp->di_nlink = ip->i_nlink;
-       dp->di_uid = ip->i_uid;
-       dp->di_gid = ip->i_gid;
-       dp->di_size = ip->i_size;
-       dp->di_atime = utime;
-       dp->di_mtime = utime;
-       dp->di_ctime = utime;
-
-       switch(ip->i_mode&IFMT) {
-
-       case IFDIR:
-       case IFREG:
-               for(i=0; i<*aibc; i++) {
-                       if(i >= NDADDR)
-                               break;
-                       ip->i_un.i_f.i_db[i] = ib[i];
-               }
-               if(*aibc >= NDADDR) {
-                       ip->i_un.i_f.i_ib[0] = alloc(BSIZE);
-                       for(i=0; i<NINDIR-NDADDR; i++) {
-                               ib[i] = ib[i+NDADDR];
-                               ib[i+NDADDR] = (daddr_t)0;
-                       }
-                       wtfs(ip->i_un.i_f.i_ib[0], (char *)ib);
+       for(i=0; i<*aibc; i++) {
+               if(i >= NDADDR)
+                       break;
+               ip->i_db[i] = ib[i];
+       }
+       if(*aibc >= NDADDR) {
+               ip->i_ib[0] = alloc(BSIZE);
+               for(i=0; i<NINDIR-NDADDR; i++) {
+                       ib[i] = ib[i+NDADDR];
+                       ib[i+NDADDR] = (daddr_t)0;
                }
                }
-
-       case IFBLK:
-       case IFCHR:
-               ltol3(dp->di_addr, ip->i_un.i_f.i_db, NDADDR+NIADDR);
-               break;
-
-       default:
-               printf("bad mode %o\n", ip->i_mode);
-               exit(1);
+               wtfs(ip->i_ib[0], (char *)ib);
        }
        }
+       ((struct dinode *)buf+itoo(ip->i_number))->di_ic = ip->i_ic;
        wtfs(d, BSIZE, buf);
 }
        wtfs(d, BSIZE, buf);
 }
-
-badblk(bno)
-daddr_t bno;
-{
-
-       return(0);
-}