From 56d45dcd52f5823c4a038876e6c82a9e4b2010ed Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Sat, 29 Aug 1981 04:22:39 -0800 Subject: [PATCH] put in new inode structure 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 | 11 ++-- usr/src/sbin/dumpfs/dumpfs.c | 4 +- usr/src/sbin/fsck/main.c | 7 +-- usr/src/sbin/icheck/icheck.c | 17 +++--- usr/src/sbin/ncheck/ncheck.c | 17 +++--- usr/src/sbin/newfs/mkfs.c | 104 ++++++++++------------------------- 6 files changed, 52 insertions(+), 108 deletions(-) diff --git a/usr/src/old/dcheck/dcheck.c b/usr/src/old/dcheck/dcheck.c index 77543be84a..743a671840 100644 --- a/usr/src/old/dcheck/dcheck.c +++ b/usr/src/old/dcheck/dcheck.c @@ -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 */ @@ -8,7 +8,6 @@ static char *sccsid = "@(#)dcheck.c 1.1 (Berkeley) %G%"; #include #include "../h/param.h" #include "../h/inode.h" -#include "../h/ino.h" #include "../h/dir.h" #include "../h/fs.h" @@ -19,7 +18,7 @@ union { #define sblock fsun.fs struct dinode itab[MAXIPG]; -daddr_t iaddr[NDADDR+NIADDR]; +struct dinode *gip; ino_t ilist[NB]; int fi; @@ -132,7 +131,7 @@ register struct dinode *ip; 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) @@ -204,12 +203,12 @@ bmap(i) 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); } - bread(iaddr[NDADDR], (char *)ibuf, sizeof(ibuf)); + bread(gip->di_ib[i], (char *)ibuf, sizeof(ibuf)); return(ibuf[i]); } diff --git a/usr/src/sbin/dumpfs/dumpfs.c b/usr/src/sbin/dumpfs/dumpfs.c index 207078e949..d5dd5aed53 100644 --- a/usr/src/sbin/dumpfs/dumpfs.c +++ b/usr/src/sbin/dumpfs/dumpfs.c @@ -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/ino.h" +#include "../h/inode.h" /* * dumpfs diff --git a/usr/src/sbin/fsck/main.c b/usr/src/sbin/fsck/main.c index 8292c1a54d..a6613b3f0e 100644 --- a/usr/src/sbin/fsck/main.c +++ b/usr/src/sbin/fsck/main.c @@ -1,10 +1,9 @@ -static char *sccsid = "@(#)main.c 1.1 (Berkeley) %G%"; +static char *sccsid = "@(#)main.c 1.2 (Berkeley) %G%"; #include #include #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 @@ -731,14 +730,12 @@ ckinode(dp, flg) register daddr_t *ap; register ret; int (*func)(), n, ndb, size; - daddr_t iaddrs[NDADDR+NIADDR]; if (SPECIAL) return (KEEPON); - l3tol(iaddrs, dp->di_addr, NDADDR+NIADDR); 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 diff --git a/usr/src/sbin/icheck/icheck.c b/usr/src/sbin/icheck/icheck.c index 041db8ce4a..d1e8f2c722 100644 --- a/usr/src/sbin/icheck/icheck.c +++ b/usr/src/sbin/icheck/icheck.c @@ -1,4 +1,4 @@ -static char *sccsid = "@(#)icheck.c 1.1 (Berkeley) %G%"; +static char *sccsid = "@(#)icheck.c 1.2 (Berkeley) %G%"; /* * icheck */ @@ -11,7 +11,6 @@ static char *sccsid = "@(#)icheck.c 1.1 (Berkeley) %G%"; #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)) @@ -31,7 +30,6 @@ union { #define cgrp cgun.cg struct dinode itab[MAXIPG]; -daddr_t iaddr[NDADDR+NIADDR]; daddr_t blist[NB]; char *bmap; @@ -311,25 +309,24 @@ register struct dinode *ip; printf("bad mode %u\n", ino); return; } - l3tol(iaddr, ip->di_addr, NDADDR+NIADDR); ndb = howmany(ip->di_size, BSIZE)-1; for(i=0; idi_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++) - chk(iaddr[i]+l, "data (frag)"); + chk(ip->di_db[i]+l, "data (frag)"); 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; idi_ib[i] == 0) continue; nindir++; if (i==NDADDR) { @@ -340,9 +337,9 @@ register struct dinode *ip; } 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; - bread(iaddr[i], (char *)ind1, sz*FSIZE); + bread(ip->di_ib[i], (char *)ind1, sz*FSIZE); nib = sz * (NINDIR/FRAG); for(j=0; j #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]; -daddr_t iaddr[NDADDR+NIADDR]; +struct dinode *gip; ino_t ilist[NB]; struct htab { @@ -150,7 +149,7 @@ register struct dinode *ip; 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) @@ -192,7 +191,7 @@ register struct dinode *ip; 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) @@ -298,13 +297,13 @@ bmap(i) { 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); } - bread(iaddr[NDADDR-3], (char *)ibuf, sizeof(ibuf)); + bread(gip->di_ib[i], (char *)ibuf, sizeof(ibuf)); return(ibuf[i]); } diff --git a/usr/src/sbin/newfs/mkfs.c b/usr/src/sbin/newfs/mkfs.c index 7976662e7c..b9b4bacc7e 100644 --- a/usr/src/sbin/newfs/mkfs.c +++ b/usr/src/sbin/newfs/mkfs.c @@ -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 @@ -20,7 +20,6 @@ static char *sccsid = "@(#)mkfs.c 1.1 (Berkeley) %G%"; #endif #include "../h/param.h" -#include "../h/ino.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; -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; @@ -377,26 +366,18 @@ tryagain: 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) - 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; @@ -434,6 +415,9 @@ struct inode *par; } in.i_uid = getnum(); in.i_gid = getnum(); + in.i_atime = utime; + in.i_mtime = utime; + in.i_ctime = utime; /* * general initialization prior to @@ -449,9 +433,9 @@ struct inode *par; in.i_nlink = 1; in.i_size = 0; for(i=0; ii_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; ii_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; idi_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); } - -badblk(bno) -daddr_t bno; -{ - - return(0); -} -- 2.20.1