diff --git a/sbin/growfs/debug.c b/sbin/growfs/debug.c index 5072fc176ca8..7b57ec764492 100644 --- a/sbin/growfs/debug.c +++ b/sbin/growfs/debug.c @@ -44,7 +44,6 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* not lint */ -/* ********************************************************** INCLUDES ***** */ #include #include @@ -57,15 +56,13 @@ static const char rcsid[] = #ifdef FS_DEBUG -/* *********************************************************** GLOBALS ***** */ -static FILE *dbg_log=NULL; -static unsigned int indent=0; +static FILE *dbg_log = NULL; +static unsigned int indent = 0; /* * prototypes not done here, as they come with debug.h */ -/* ********************************************************** dbg_open ***** */ /* * Open the filehandle where all debug output has to go. */ @@ -74,14 +71,13 @@ dbg_open(const char *fn) { if (strcmp(fn, "-") == 0) - dbg_log=fopen("/dev/stdout", "a"); + dbg_log = fopen("/dev/stdout", "a"); else - dbg_log=fopen(fn, "a"); + dbg_log = fopen(fn, "a"); return; } -/* ********************************************************* dbg_close ***** */ /* * Close the filehandle where all debug output went to. */ @@ -89,15 +85,14 @@ void dbg_close(void) { - if(dbg_log) { + if (dbg_log) { fclose(dbg_log); - dbg_log=NULL; + dbg_log = NULL; } return; } -/* ****************************************************** dbg_dump_hex ***** */ /* * Dump out a full file system block in hex. */ @@ -106,17 +101,16 @@ dbg_dump_hex(struct fs *sb, const char *comment, unsigned char *mem) { int i, j, k; - if(!dbg_log) { + if (!dbg_log) return; - } + fprintf(dbg_log, "===== START HEXDUMP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)mem, comment); indent++; - for (i=0; ifs_bsize; i+=24) { - for (j=0; j<3; j++) { - for (k=0; k<8; k++) { + for (i = 0; i < sb->fs_bsize; i += 24) { + for (j = 0; j < 3; j++) { + for (k = 0; k < 8; k++) fprintf(dbg_log, "%02x ", *mem++); - } fprintf(dbg_log, " "); } fprintf(dbg_log, "\n"); @@ -127,7 +121,6 @@ dbg_dump_hex(struct fs *sb, const char *comment, unsigned char *mem) return; } -/* ******************************************************* dbg_dump_fs ***** */ /* * Dump the superblock. */ @@ -135,12 +128,11 @@ void dbg_dump_fs(struct fs *sb, const char *comment) { #ifdef FSMAXSNAP - int j; + int j; #endif /* FSMAXSNAP */ - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START SUPERBLOCK =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)sb, comment); @@ -308,10 +300,10 @@ dbg_dump_fs(struct fs *sb, const char *comment) sb->fs_pendinginodes); #ifdef FSMAXSNAP - for(j=0; jfs_snapinum[j]); - if(!sb->fs_snapinum[j]) { /* list is dense */ + if (!sb->fs_snapinum[j]) { /* list is dense */ break; } } @@ -356,7 +348,6 @@ dbg_dump_fs(struct fs *sb, const char *comment) return; } -/* ******************************************************* dbg_dump_cg ***** */ /* * Dump a cylinder group. */ @@ -365,9 +356,8 @@ dbg_dump_cg(const char *comment, struct cg *cgr) { int j; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START CYLINDER GROUP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); @@ -383,7 +373,7 @@ dbg_dump_cg(const char *comment, struct cg *cgr) fprintf(dbg_log, "rotor int32_t 0x%08x\n", cgr->cg_rotor); fprintf(dbg_log, "frotor int32_t 0x%08x\n", cgr->cg_frotor); fprintf(dbg_log, "irotor int32_t 0x%08x\n", cgr->cg_irotor); - for(j=0; jcg_frsum[j]); } @@ -411,7 +401,6 @@ dbg_dump_cg(const char *comment, struct cg *cgr) return; } -/* ***************************************************** dbg_dump_csum ***** */ /* * Dump a cylinder summary. */ @@ -419,9 +408,8 @@ void dbg_dump_csum(const char *comment, struct csum *cs) { - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START CYLINDER SUMMARY =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cs, comment); @@ -438,7 +426,6 @@ dbg_dump_csum(const char *comment, struct csum *cs) return; } -/* ************************************************ dbg_dump_csum_total ***** */ /* * Dump a cylinder summary. */ @@ -446,9 +433,8 @@ void dbg_dump_csum_total(const char *comment, struct csum_total *cs) { - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START CYLINDER SUMMARY TOTAL =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cs, comment); @@ -475,7 +461,6 @@ dbg_dump_csum_total(const char *comment, struct csum_total *cs) return; } -/* **************************************************** dbg_dump_inmap ***** */ /* * Dump the inode allocation map in one cylinder group. */ @@ -485,30 +470,29 @@ dbg_dump_inmap(struct fs *sb, const char *comment, struct cg *cgr) int j,k,l,e; unsigned char *cp; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START INODE ALLOCATION MAP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); indent++; - cp=(unsigned char *)cg_inosused(cgr); - e=sb->fs_ipg/8; - for(j=0; jfs_ipg / 8; + for (j = 0; j < e; j += 32) { fprintf(dbg_log, "%08x: ", j); - for(k=0; k<32; k+=8) { - if(j+k+8fs_old_nspf) - e=howmany((sb->fs_old_cpg * sb->fs_old_spc / sb->fs_old_nspf), CHAR_BIT); + e = howmany((sb->fs_old_cpg * sb->fs_old_spc / sb->fs_old_nspf), CHAR_BIT); else e = 0; - for(j=0; jfs_old_nspf) - e=howmany(sb->fs_old_cpg * sb->fs_old_spc / (sb->fs_old_nspf << sb->fs_fragshift), CHAR_BIT); + e = howmany(sb->fs_old_cpg * sb->fs_old_spc / (sb->fs_old_nspf << sb->fs_fragshift), CHAR_BIT); else e = 0; - for(j=0; jfs_contigsumsize; j++) { + ip = (int *)cg_clustersum(cgr); + for (j = 0; j <= sb->fs_contigsumsize; j++) { fprintf(dbg_log, "%02d: %8d\n", j, *ip++); } @@ -651,7 +629,6 @@ dbg_dump_clsum(struct fs *sb, const char *comment, struct cg *cgr) * will leave it disabled for now; it should probably be re-enabled * specifically for UFS1. */ -/* **************************************************** dbg_dump_sptbl ***** */ /* * Dump the block summary, and the rotational layout table. */ @@ -661,23 +638,21 @@ dbg_dump_sptbl(struct fs *sb, const char *comment, struct cg *cgr) int j,k; int *ip; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START BLOCK SUMMARY AND POSITION TABLE =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); indent++; - ip=(int *)cg_blktot(cgr); - for(j=0; jfs_old_cpg; j++) { + ip = (int *)cg_blktot(cgr); + for (j = 0; j < sb->fs_old_cpg; j++) { fprintf(dbg_log, "%2d: %5d = ", j, *ip++); - for(k=0; kfs_old_nrpos; k++) { + for (k = 0; k < sb->fs_old_nrpos; k++) { fprintf(dbg_log, "%4d", cg_blks(sb, cgr, j)[k]); - if(kfs_old_nrpos-1) { + if (k < sb->fs_old_nrpos - 1) fprintf(dbg_log, " + "); - } } fprintf(dbg_log, "\n"); } @@ -689,7 +664,6 @@ dbg_dump_sptbl(struct fs *sb, const char *comment, struct cg *cgr) } #endif -/* ************************************************** dbg_dump_ufs1_ino ***** */ /* * Dump a UFS1 inode structure. */ @@ -699,9 +673,8 @@ dbg_dump_ufs1_ino(struct fs *sb, const char *comment, struct ufs1_dinode *ino) int ictr; int remaining_blocks; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START UFS1 INODE DUMP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)ino, comment); @@ -723,25 +696,25 @@ dbg_dump_ufs1_ino(struct fs *sb, const char *comment, struct ufs1_dinode *ino) fprintf(dbg_log, "ctimensec int32_t 0x%08x\n", ino->di_ctimensec); - remaining_blocks=howmany(ino->di_size, sb->fs_bsize); /* XXX ts - +1? */ - for(ictr=0; ictr < MIN(NDADDR, remaining_blocks); ictr++) { + remaining_blocks = howmany(ino->di_size, sb->fs_bsize); /* XXX ts - +1? */ + for (ictr = 0; ictr < MIN(NDADDR, remaining_blocks); ictr++) { fprintf(dbg_log, "db ufs_daddr_t[%x] 0x%08x\n", ictr, ino->di_db[ictr]); } - remaining_blocks-=NDADDR; - if(remaining_blocks>0) { + remaining_blocks -= NDADDR; + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs_daddr_t[0] 0x%08x\n", ino->di_ib[0]); } - remaining_blocks-=howmany(sb->fs_bsize, sizeof(ufs1_daddr_t)); - if(remaining_blocks>0) { + remaining_blocks -= howmany(sb->fs_bsize, sizeof(ufs1_daddr_t)); + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs_daddr_t[1] 0x%08x\n", ino->di_ib[1]); } -#define SQUARE(a) ((a)*(a)) - remaining_blocks-=SQUARE(howmany(sb->fs_bsize, sizeof(ufs1_daddr_t))); +#define SQUARE(a) ((a) * (a)) + remaining_blocks -= SQUARE(howmany(sb->fs_bsize, sizeof(ufs1_daddr_t))); #undef SQUARE - if(remaining_blocks>0) { + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs_daddr_t[2] 0x%08x\n", ino->di_ib[2]); } @@ -758,7 +731,6 @@ dbg_dump_ufs1_ino(struct fs *sb, const char *comment, struct ufs1_dinode *ino) return; } -/* ************************************************** dbg_dump_ufs2_ino ***** */ /* * Dump a UFS2 inode structure. */ @@ -768,9 +740,8 @@ dbg_dump_ufs2_ino(struct fs *sb, const char *comment, struct ufs2_dinode *ino) int ictr; int remaining_blocks; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START UFS2 INODE DUMP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)ino, comment); @@ -785,8 +756,8 @@ dbg_dump_ufs2_ino(struct fs *sb, const char *comment, struct ufs2_dinode *ino) ((unsigned int *)&(ino->di_size))[1], ((unsigned int *)&(ino->di_size))[0]); fprintf(dbg_log, "blocks u_int64_t 0x%08x%08x\n", - ((unsigned int *)&(ino->di_blocks))[1], - ((unsigned int *)&(ino->di_blocks))[0]); + ((unsigned int *)&(ino->di_blocks))[1], + ((unsigned int *)&(ino->di_blocks))[0]); fprintf(dbg_log, "atime ufs_time_t %10jd\n", ino->di_atime); fprintf(dbg_log, "mtime ufs_time_t %10jd\n", ino->di_mtime); fprintf(dbg_log, "ctime ufs_time_t %10jd\n", ino->di_ctime); @@ -802,25 +773,25 @@ dbg_dump_ufs2_ino(struct fs *sb, const char *comment, struct ufs2_dinode *ino) /* XXX: What do we do with di_extb[NXADDR]? */ - remaining_blocks=howmany(ino->di_size, sb->fs_bsize); /* XXX ts - +1? */ - for(ictr=0; ictr < MIN(NDADDR, remaining_blocks); ictr++) { + remaining_blocks = howmany(ino->di_size, sb->fs_bsize); /* XXX ts - +1? */ + for (ictr = 0; ictr < MIN(NDADDR, remaining_blocks); ictr++) { fprintf(dbg_log, "db ufs2_daddr_t[%x] 0x%16jx\n", ictr, ino->di_db[ictr]); } - remaining_blocks-=NDADDR; - if(remaining_blocks>0) { + remaining_blocks -= NDADDR; + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs2_daddr_t[0] 0x%16jx\n", ino->di_ib[0]); } - remaining_blocks-=howmany(sb->fs_bsize, sizeof(ufs2_daddr_t)); - if(remaining_blocks>0) { + remaining_blocks -= howmany(sb->fs_bsize, sizeof(ufs2_daddr_t)); + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs2_daddr_t[1] 0x%16jx\n", ino->di_ib[1]); } -#define SQUARE(a) ((a)*(a)) - remaining_blocks-=SQUARE(howmany(sb->fs_bsize, sizeof(ufs2_daddr_t))); +#define SQUARE(a) ((a) * (a)) + remaining_blocks -= SQUARE(howmany(sb->fs_bsize, sizeof(ufs2_daddr_t))); #undef SQUARE - if(remaining_blocks>0) { + if (remaining_blocks > 0) { fprintf(dbg_log, "ib ufs2_daddr_t[2] 0x%16jx\n", ino->di_ib[2]); } @@ -831,7 +802,6 @@ dbg_dump_ufs2_ino(struct fs *sb, const char *comment, struct ufs2_dinode *ino) return; } -/* ***************************************************** dbg_dump_iblk ***** */ /* * Dump an indirect block. The iteration to dump a full file has to be * written around. @@ -841,9 +811,8 @@ dbg_dump_iblk(struct fs *sb, const char *comment, char *block, size_t length) { unsigned int *mem, i, j, size; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START INDIRECT BLOCK DUMP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)block, @@ -855,14 +824,13 @@ dbg_dump_iblk(struct fs *sb, const char *comment, char *block, size_t length) else size = sizeof(ufs2_daddr_t); - mem=(unsigned int *)block; - for (i=0; (size_t)ifs_bsize, size), - length); i+=8) { + mem = (unsigned int *)block; + for (i = 0; (size_t)i < MIN(howmany(sb->fs_bsize, size), length); + i += 8) { fprintf(dbg_log, "%04x: ", i); - for (j=0; j<8; j++) { - if((size_t)(i+j) __FBSDID("$FreeBSD$"); -/* ********************************************************** INCLUDES ***** */ #include #include #include @@ -72,7 +71,6 @@ __FBSDID("$FreeBSD$"); #include "debug.h" -/* *************************************************** GLOBALS & TYPES ***** */ #ifdef FS_DEBUG int _dbg_lvl_ = (DL_INFO); /* DL_TRC */ #endif /* FS_DEBUG */ @@ -117,7 +115,7 @@ union dinode { static ufs2_daddr_t inoblk; /* inode block address */ static char inobuf[MAXBSIZE]; /* inode block */ static ino_t maxino; /* last valid inode */ -static int unlabeled; /* unlabeled partition, e.g. vinum volume etc. */ +static int unlabeled; /* unlabeled partition, e.g. vinum volume */ /* * An array of elements of type struct gfs_bpp describes all blocks to @@ -130,10 +128,9 @@ struct gfs_bpp { #define GFS_FL_FIRST 1 #define GFS_FL_LAST 2 unsigned int flags; /* special handling required */ - int found; /* how many references were updated */ + int found; /* how many references were updated */ }; -/* ******************************************************** PROTOTYPES ***** */ static void growfs(int, int, unsigned int); static void rdfs(ufs2_daddr_t, size_t, void *, int); static void wtfs(ufs2_daddr_t, size_t, void *, int, unsigned int); @@ -158,7 +155,6 @@ static void indirchk(ufs_lbn_t, ufs_lbn_t, ufs2_daddr_t, ufs_lbn_t, struct gfs_bpp *, int, int, unsigned int); static void get_dev_size(int, int *); -/* ************************************************************ growfs ***** */ /* * Here we actually start growing the file system. We basically read the * cylinder summary from the first cylinder group as we want to update @@ -174,12 +170,12 @@ static void growfs(int fsi, int fso, unsigned int Nflag) { DBG_FUNC("growfs") - time_t modtime; - uint cylno; - int i, j, width; - char tmpbuf[100]; + time_t modtime; + uint cylno; + int i, j, width; + char tmpbuf[100]; #ifdef FSIRAND - static int randinit=0; + static int randinit=0; DBG_ENTER; @@ -198,37 +194,35 @@ growfs(int fsi, int fso, unsigned int Nflag) * Get the cylinder summary into the memory. */ fscs = (struct csum *)calloc((size_t)1, (size_t)sblock.fs_cssize); - if(fscs == NULL) { + if (fscs == NULL) errx(1, "calloc failed"); - } for (i = 0; i < osblock.fs_cssize; i += osblock.fs_bsize) { rdfs(fsbtodb(&osblock, osblock.fs_csaddr + numfrags(&osblock, i)), (size_t)MIN(osblock.fs_cssize - i, - osblock.fs_bsize), (void *)(((char *)fscs)+i), fsi); + osblock.fs_bsize), (void *)(((char *)fscs) + i), fsi); } #ifdef FS_DEBUG -{ - struct csum *dbg_csp; - int dbg_csc; - char dbg_line[80]; + { + struct csum *dbg_csp; + int dbg_csc; + char dbg_line[80]; - dbg_csp=fscs; - for(dbg_csc=0; dbg_csc= width) { printf("\n"); i = 0; @@ -288,20 +282,18 @@ growfs(int fsi, int fso, unsigned int Nflag) DBG_PRINT0("fscs written\n"); #ifdef FS_DEBUG -{ - struct csum *dbg_csp; - int dbg_csc; - char dbg_line[80]; + { + struct csum *dbg_csp; + int dbg_csc; + char dbg_line[80]; - dbg_csp=fscs; - for(dbg_csc=0; dbg_csc 0) @@ -549,7 +538,6 @@ initcg(int cylno, time_t modtime, int fso, unsigned int Nflag) return; } -/* ******************************************************* frag_adjust ***** */ /* * Here we add or subtract (sign +1/-1) the available fragments in a given * block to or from the fragment statistics. By subtracting before and adding @@ -570,45 +558,38 @@ frag_adjust(ufs2_daddr_t frag, int sign) * Here frag only needs to point to any fragment in the block we want * to examine. */ - for(f=rounddown(frag, sblock.fs_frag); - ffound++; DBG_PRINT3("scg (%jd->%jd)[%d] reference updated\n", - (intmax_t)f->old, - (intmax_t)f->new, - fragnum); + (intmax_t)f->old, (intmax_t)f->new, fragnum); /* * Copy the block back immediately. @@ -669,7 +648,6 @@ cond_bl_upd(ufs2_daddr_t *block, struct gfs_bpp *field, int fsi, int fso, return (0); } -/* ************************************************************ updjcg ***** */ /* * Here we do all needed work for the former last cylinder group. It has to be * changed in any case, even if the file system ended exactly on the end of @@ -685,10 +663,10 @@ static void updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) { DBG_FUNC("updjcg") - ufs2_daddr_t cbase, dmax, dupper; - struct csum *cs; - int i,k; - int j=0; + ufs2_daddr_t cbase, dmax, dupper; + struct csum *cs; + int i, k; + int j = 0; DBG_ENTER; @@ -699,9 +677,7 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) rdfs(fsbtodb(&osblock, cgtod(&osblock, cylno)), (size_t)osblock.fs_cgsize, (void *)&aocg, fsi); DBG_PRINT0("jcg read\n"); - DBG_DUMP_CG(&sblock, - "old joining cg", - &aocg); + DBG_DUMP_CG(&sblock, "old joining cg", &aocg); memcpy((void *)&cgun1, (void *)&cgun2, sizeof(cgun2)); @@ -713,16 +689,14 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) * cylinder group we have to change that value now to fs_cpg. */ - if(cgbase(&osblock, cylno+1) == osblock.fs_size) { + if (cgbase(&osblock, cylno + 1) == osblock.fs_size) { if (sblock.fs_magic == FS_UFS1_MAGIC) acg.cg_old_ncyl=sblock.fs_old_cpg; wtfs(fsbtodb(&sblock, cgtod(&sblock, cylno)), (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag); DBG_PRINT0("jcg written\n"); - DBG_DUMP_CG(&sblock, - "new joining cg", - &acg); + DBG_DUMP_CG(&sblock, "new joining cg", &acg); DBG_LEAVE; return; @@ -736,9 +710,8 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) if (dmax > sblock.fs_size) dmax = sblock.fs_size; dupper = cgdmin(&sblock, cylno) - cbase; - if (cylno == 0) { /* XXX fscs may be relocated */ + if (cylno == 0) /* XXX fscs may be relocated */ dupper += howmany(sblock.fs_cssize, sblock.fs_fsize); - } /* * Set pointer to the cylinder summary for our cylinder group. @@ -760,21 +733,16 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) } else { acg.cg_old_ncyl = sblock.fs_old_cpg; } - DBG_PRINT2("jcg dbg: %d %u", - cylno, - sblock.fs_ncg); + DBG_PRINT2("jcg dbg: %d %u", cylno, sblock.fs_ncg); #ifdef FS_DEBUG if (sblock.fs_magic == FS_UFS1_MAGIC) - DBG_PRINT2("%d %u", - acg.cg_old_ncyl, - sblock.fs_old_cpg); + DBG_PRINT2("%d %u", acg.cg_old_ncyl, sblock.fs_old_cpg); #endif DBG_PRINT0("\n"); acg.cg_ndblk = dmax - cbase; - sblock.fs_dsize += acg.cg_ndblk-aocg.cg_ndblk; - if (sblock.fs_contigsumsize > 0) { + sblock.fs_dsize += acg.cg_ndblk - aocg.cg_ndblk; + if (sblock.fs_contigsumsize > 0) acg.cg_nclusterblks = acg.cg_ndblk / sblock.fs_frag; - } /* * Now we have to update the free fragment bitmap for our new free @@ -788,15 +756,16 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) * Handle the first new block here if it was partially available * before. */ - if(osblock.fs_size % sblock.fs_frag) { - if(roundup(osblock.fs_size, sblock.fs_frag)<=sblock.fs_size) { + if (osblock.fs_size % sblock.fs_frag) { + if (roundup(osblock.fs_size, sblock.fs_frag) <= + sblock.fs_size) { /* * The new space is enough to fill at least this * block */ - j=0; - for(i=roundup(osblock.fs_size-cbase, sblock.fs_frag)-1; - i>=osblock.fs_size-cbase; + j = 0; + for (i = roundup(osblock.fs_size - cbase, + sblock.fs_frag) - 1; i >= osblock.fs_size - cbase; i--) { setbit(cg_blksfree(&acg), i); acg.cg_cs.cs_nffree++; @@ -808,44 +777,43 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) * already existing fragment at the former end of the * file system. */ - if(isblock(&sblock, cg_blksfree(&acg), - ((osblock.fs_size - cgbase(&sblock, cylno))/ - sblock.fs_frag))) { + if (isblock(&sblock, cg_blksfree(&acg), + ((osblock.fs_size - cgbase(&sblock, cylno)) / + sblock.fs_frag))) { /* * The block is now completely available. */ DBG_PRINT0("block was\n"); - acg.cg_frsum[osblock.fs_size%sblock.fs_frag]--; + acg.cg_frsum[osblock.fs_size % sblock.fs_frag]--; acg.cg_cs.cs_nbfree++; - acg.cg_cs.cs_nffree-=sblock.fs_frag; - k=rounddown(osblock.fs_size-cbase, + acg.cg_cs.cs_nffree -= sblock.fs_frag; + k = rounddown(osblock.fs_size - cbase, + sblock.fs_frag); + updclst((osblock.fs_size - cbase) / sblock.fs_frag); - updclst((osblock.fs_size-cbase)/sblock.fs_frag); } else { /* * Lets rejoin a possible partially growed * fragment. */ - k=0; - while(isset(cg_blksfree(&acg), i) && - (i>=rounddown(osblock.fs_size-cbase, + k = 0; + while (isset(cg_blksfree(&acg), i) && + (i >= rounddown(osblock.fs_size - cbase, sblock.fs_frag))) { i--; k++; } - if(k) { + if (k) acg.cg_frsum[k]--; - } - acg.cg_frsum[k+j]++; + acg.cg_frsum[k + j]++; } } else { /* * We only grow by some fragments within this last * block. */ - for(i=sblock.fs_size-cbase-1; - i>=osblock.fs_size-cbase; - i--) { + for (i = sblock.fs_size - cbase - 1; + i >= osblock.fs_size - cbase; i--) { setbit(cg_blksfree(&acg), i); acg.cg_cs.cs_nffree++; j++; @@ -853,26 +821,25 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) /* * Lets rejoin a possible partially growed fragment. */ - k=0; - while(isset(cg_blksfree(&acg), i) && - (i>=rounddown(osblock.fs_size-cbase, + k = 0; + while (isset(cg_blksfree(&acg), i) && + (i >= rounddown(osblock.fs_size - cbase, sblock.fs_frag))) { i--; k++; } - if(k) { + if (k) acg.cg_frsum[k]--; - } - acg.cg_frsum[k+j]++; + acg.cg_frsum[k + j]++; } } /* * Handle all new complete blocks here. */ - for(i=roundup(osblock.fs_size-cbase, sblock.fs_frag); - i+sblock.fs_frag<=dmax-cbase; /* XXX <= or only < ? */ - i+=sblock.fs_frag) { + for (i = roundup(osblock.fs_size - cbase, sblock.fs_frag); + i + sblock.fs_frag <= dmax - cbase; /* XXX <= or only < ? */ + i += sblock.fs_frag) { j = i / sblock.fs_frag; setblock(&sblock, cg_blksfree(&acg), j); updclst(j); @@ -911,15 +878,12 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, unsigned int Nflag) wtfs(fsbtodb(&sblock, cgtod(&sblock, cylno)), (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag); DBG_PRINT0("jcg written\n"); - DBG_DUMP_CG(&sblock, - "new joining cg", - &acg); + DBG_DUMP_CG(&sblock, "new joining cg", &acg); DBG_LEAVE; return; } -/* ********************************************************** updcsloc ***** */ /* * Here we update the location of the cylinder summary. We have two possible * ways of growing the cylinder summary. @@ -940,20 +904,20 @@ static void updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) { DBG_FUNC("updcsloc") - struct csum *cs; - int ocscg, ncscg; - int blocks; - ufs2_daddr_t cbase, dupper, odupper, d, f, g; - int ind, inc; - uint cylno; - struct gfs_bpp *bp; - int i, l; - int lcs=0; - int block; + struct csum *cs; + int ocscg, ncscg; + int blocks; + ufs2_daddr_t cbase, dupper, odupper, d, f, g; + int ind, inc; + uint cylno; + struct gfs_bpp *bp; + int i, l; + int lcs = 0; + int block; DBG_ENTER; - if(howmany(sblock.fs_cssize, sblock.fs_fsize) == + if (howmany(sblock.fs_cssize, sblock.fs_fsize) == howmany(osblock.fs_cssize, osblock.fs_fsize)) { /* * No new fragment needed. @@ -961,9 +925,9 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) DBG_LEAVE; return; } - ocscg=dtog(&osblock, osblock.fs_csaddr); - cs=fscs+ocscg; - blocks = 1+howmany(sblock.fs_cssize, sblock.fs_bsize)- + ocscg = dtog(&osblock, osblock.fs_csaddr); + cs = fscs + ocscg; + blocks = 1 + howmany(sblock.fs_cssize, sblock.fs_bsize) - howmany(osblock.fs_cssize, osblock.fs_bsize); /* @@ -975,9 +939,7 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) rdfs(fsbtodb(&osblock, cgtod(&osblock, ocscg)), (size_t)osblock.fs_cgsize, (void *)&aocg, fsi); DBG_PRINT0("oscg read\n"); - DBG_DUMP_CG(&sblock, - "old summary cg", - &aocg); + DBG_DUMP_CG(&sblock, "old summary cg", &aocg); memcpy((void *)&cgun1, (void *)&cgun2, sizeof(cgun2)); @@ -993,7 +955,7 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * also up to 8*3 blocks for indirect blocks for all possible * references. */ - if(/*((int)sblock.fs_time&0x3)>0||*/ cs->cs_nbfree < blocks) { + if (/*((int)sblock.fs_time&0x3)>0||*/ cs->cs_nbfree < blocks) { /* * There is not enough space in the old cylinder group to * relocate all blocks as needed, so we relocate the whole @@ -1014,28 +976,26 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * clusters a lot easier. */ DBG_TRC; - if(sblock.fs_ncg-osblock.fs_ncg < 2) { + if (sblock.fs_ncg - osblock.fs_ncg < 2) errx(2, "panic: not enough space"); - } /* * Point "d" to the first fragment not used by the cylinder * summary. */ - d=osblock.fs_csaddr+(osblock.fs_cssize/osblock.fs_fsize); + d = osblock.fs_csaddr + (osblock.fs_cssize / osblock.fs_fsize); /* * Set up last cluster size ("lcs") already here. Calculate * the size for the trailing cluster just behind where "d" * points to. */ - if(sblock.fs_contigsumsize > 0) { - for(block=howmany(d%sblock.fs_fpg, sblock.fs_frag), - lcs=0; lcs 0) { + for (block = howmany(d % sblock.fs_fpg, sblock.fs_frag), + lcs = 0; lcs < sblock.fs_contigsumsize; block++, lcs++) { - if(isclr(cg_clustersfree(&acg), block)){ + if (isclr(cg_clustersfree(&acg), block)) break; - } } } @@ -1044,19 +1004,17 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) */ d--; - DBG_PRINT1("d=%jd\n", - (intmax_t)d); - if((d+1)%sblock.fs_frag) { + DBG_PRINT1("d=%jd\n", (intmax_t)d); + if ((d + 1) % sblock.fs_frag) { /* * The end of the cylinder summary is not a complete * block. */ DBG_TRC; - frag_adjust(d%sblock.fs_fpg, -1); - for(; (d+1)%sblock.fs_frag; d--) { - DBG_PRINT1("d=%jd\n", - (intmax_t)d); - setbit(cg_blksfree(&acg), d%sblock.fs_fpg); + frag_adjust(d % sblock.fs_fpg, -1); + for (; (d + 1) % sblock.fs_frag; d--) { + DBG_PRINT1("d=%jd\n", (intmax_t)d); + setbit(cg_blksfree(&acg), d % sblock.fs_fpg); acg.cg_cs.cs_nffree++; sblock.fs_cstotal.cs_nffree++; } @@ -1067,21 +1025,20 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) d++; frag_adjust(d%sblock.fs_fpg, 1); - if(isblock(&sblock, cg_blksfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag)) { + if (isblock(&sblock, cg_blksfree(&acg), + (d % sblock.fs_fpg) / sblock.fs_frag)) { DBG_PRINT1("d=%jd\n", (intmax_t)d); - acg.cg_cs.cs_nffree-=sblock.fs_frag; + acg.cg_cs.cs_nffree -= sblock.fs_frag; acg.cg_cs.cs_nbfree++; - sblock.fs_cstotal.cs_nffree-=sblock.fs_frag; + sblock.fs_cstotal.cs_nffree -= sblock.fs_frag; sblock.fs_cstotal.cs_nbfree++; - if(sblock.fs_contigsumsize > 0) { + if (sblock.fs_contigsumsize > 0) { setbit(cg_clustersfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); - if(lcs < sblock.fs_contigsumsize) { - if(lcs) { - cg_clustersum(&acg) - [lcs]--; - } + (d % sblock.fs_fpg) / + sblock.fs_frag); + if (lcs < sblock.fs_contigsumsize) { + if (lcs) + cg_clustersum(&acg)[lcs]--; lcs++; cg_clustersum(&acg)[lcs]++; } @@ -1095,24 +1052,23 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) } DBG_PRINT1("d=%jd\n", (intmax_t)d); - for(d=rounddown(d, sblock.fs_frag); d >= osblock.fs_csaddr; - d-=sblock.fs_frag) { + for (d = rounddown(d, sblock.fs_frag); d >= osblock.fs_csaddr; + d -= sblock.fs_frag) { DBG_TRC; DBG_PRINT1("d=%jd\n", (intmax_t)d); setblock(&sblock, cg_blksfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); + (d % sblock.fs_fpg) / sblock.fs_frag); acg.cg_cs.cs_nbfree++; sblock.fs_cstotal.cs_nbfree++; - if(sblock.fs_contigsumsize > 0) { + if (sblock.fs_contigsumsize > 0) { setbit(cg_clustersfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); + (d % sblock.fs_fpg) / sblock.fs_frag); /* * The last cluster size is already set up. */ - if(lcs < sblock.fs_contigsumsize) { - if(lcs) { + if (lcs < sblock.fs_contigsumsize) { + if (lcs) cg_clustersum(&acg)[lcs]--; - } lcs++; cg_clustersum(&acg)[lcs]++; } @@ -1127,25 +1083,22 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) wtfs(fsbtodb(&sblock, cgtod(&sblock, ocscg)), (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag); DBG_PRINT0("oscg written\n"); - DBG_DUMP_CG(&sblock, - "old summary cg", - &acg); + DBG_DUMP_CG(&sblock, "old summary cg", &acg); /* * Find the beginning of the new cylinder group containing the * cylinder summary. */ - sblock.fs_csaddr=cgdmin(&sblock, osblock.fs_ncg); - ncscg=dtog(&sblock, sblock.fs_csaddr); - cs=fscs+ncscg; - + sblock.fs_csaddr = cgdmin(&sblock, osblock.fs_ncg); + ncscg = dtog(&sblock, sblock.fs_csaddr); + cs = fscs + ncscg; /* * If Nflag is specified, we would now read random data instead * of an empty cg structure from disk. So we can't simulate that * part for now. */ - if(Nflag) { + if (Nflag) { DBG_PRINT0("nscg update skipped\n"); DBG_LEAVE; return; @@ -1158,9 +1111,7 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) rdfs(fsbtodb(&sblock, cgtod(&sblock, ncscg)), (size_t)sblock.fs_cgsize, (void *)&aocg, fsi); DBG_PRINT0("nscg read\n"); - DBG_DUMP_CG(&sblock, - "new summary cg", - &aocg); + DBG_DUMP_CG(&sblock, "new summary cg", &aocg); memcpy((void *)&cgun1, (void *)&cgun2, sizeof(cgun2)); @@ -1168,16 +1119,16 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * Allocate all complete blocks used by the new cylinder * summary. */ - for(d=sblock.fs_csaddr; d+sblock.fs_frag <= - sblock.fs_csaddr+(sblock.fs_cssize/sblock.fs_fsize); - d+=sblock.fs_frag) { + for (d = sblock.fs_csaddr; d + sblock.fs_frag <= + sblock.fs_csaddr + (sblock.fs_cssize / sblock.fs_fsize); + d += sblock.fs_frag) { clrblock(&sblock, cg_blksfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); + (d % sblock.fs_fpg) / sblock.fs_frag); acg.cg_cs.cs_nbfree--; sblock.fs_cstotal.cs_nbfree--; - if(sblock.fs_contigsumsize > 0) { + if (sblock.fs_contigsumsize > 0) { clrbit(cg_clustersfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); + (d % sblock.fs_fpg) / sblock.fs_frag); } } @@ -1185,24 +1136,23 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * Allocate all fragments used by the cylinder summary in the * last block. */ - if(d 0) { + sblock.fs_cstotal.cs_nffree += sblock.fs_frag; + if (sblock.fs_contigsumsize > 0) clrbit(cg_clustersfree(&acg), - (d%sblock.fs_fpg)/sblock.fs_frag); - } + (d % sblock.fs_fpg) / sblock.fs_frag); - frag_adjust(d%sblock.fs_fpg, +1); + frag_adjust(d % sblock.fs_fpg, 1); } /* * XXX Handle the cluster statistics here in the case this @@ -1226,9 +1176,7 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) wtfs(fsbtodb(&sblock, cgtod(&sblock, ncscg)), (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag); DBG_PRINT0("nscg written\n"); - DBG_DUMP_CG(&sblock, - "new summary cg", - &acg); + DBG_DUMP_CG(&sblock, "new summary cg", &acg); DBG_LEAVE; return; @@ -1246,17 +1194,16 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) odupper = osblock.fs_csaddr - cbase + howmany(osblock.fs_cssize, osblock.fs_fsize); - sblock.fs_dsize -= dupper-odupper; + sblock.fs_dsize -= dupper - odupper; /* * Allocate the space for the array of blocks to be relocated. */ - bp=(struct gfs_bpp *)malloc(((dupper-odupper)/sblock.fs_frag+2)* - sizeof(struct gfs_bpp)); - if(bp == NULL) { + bp = (struct gfs_bpp *)malloc(((dupper - odupper) / + sblock.fs_frag + 2) * sizeof(struct gfs_bpp)); + if (bp == NULL) errx(1, "malloc failed"); - } - memset((char *)bp, 0, ((dupper-odupper)/sblock.fs_frag+2)* + memset((char *)bp, 0, ((dupper - odupper) / sblock.fs_frag + 2) * sizeof(struct gfs_bpp)); /* @@ -1267,18 +1214,16 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * Handle the first new block here (but only if some fragments where * already used for the cylinder summary). */ - ind=0; + ind = 0; frag_adjust(odupper, -1); - for(d=odupper; ((d= dupper) { - bp[ind].flags|=GFS_FL_LAST; - } + bp[ind].old = d / sblock.fs_frag; + bp[ind].flags |= GFS_FL_FIRST; + if (roundup(d, sblock.fs_frag) >= dupper) + bp[ind].flags |= GFS_FL_LAST; ind++; } } else { @@ -1299,37 +1244,33 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) /* * Handle all needed complete blocks here. */ - for(; d+sblock.fs_frag<=dupper; d+=sblock.fs_frag) { - DBG_PRINT1("scg block check loop d=%jd\n", - (intmax_t)d); - if(!isblock(&sblock, cg_blksfree(&acg), d/sblock.fs_frag)) { - for(f=d; f 0) { - clrbit(cg_clustersfree(&acg), d/sblock.fs_frag); - for(lcs=0, l=(d/sblock.fs_frag)+1; - lcs 0) { + clrbit(cg_clustersfree(&acg), d / sblock.fs_frag); + for (lcs = 0, l = (d / sblock.fs_frag) + 1; + lcs < sblock.fs_contigsumsize; l++, lcs++ ) { + if (isclr(cg_clustersfree(&acg), l)) break; - } } - if(lcs < sblock.fs_contigsumsize) { - cg_clustersum(&acg)[lcs+1]--; - if(lcs) { + if (lcs < sblock.fs_contigsumsize) { + cg_clustersum(&acg)[lcs + 1]--; + if (lcs) cg_clustersum(&acg)[lcs]++; - } } } } @@ -1342,56 +1283,52 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) /* * Handle all fragments needed in the last new affected block. */ - if(d 0) { - clrbit(cg_clustersfree(&acg), d/sblock.fs_frag); - for(lcs=0, l=(d/sblock.fs_frag)+1; - lcs 0) { + clrbit(cg_clustersfree(&acg), d / sblock.fs_frag); + for (lcs = 0, l =(d / sblock.fs_frag) + 1; + lcs < sblock.fs_contigsumsize; l++, lcs++ ) { + if (isclr(cg_clustersfree(&acg),l)) break; - } } - if(lcs < sblock.fs_contigsumsize) { - cg_clustersum(&acg)[lcs+1]--; - if(lcs) { + if (lcs < sblock.fs_contigsumsize) { + cg_clustersum(&acg)[lcs + 1]--; + if (lcs) cg_clustersum(&acg)[lcs]++; - } } } } - for(; d%jd) block relocated\n", - (intmax_t)bp[i].old, - (intmax_t)bp[i].new); + (intmax_t)bp[i].old, (intmax_t)bp[i].new); } /* @@ -1493,24 +1424,21 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * cylinder groups, within those over all non zero length * inodes. */ - for(cylno=0; cylno0 ; inc--) { + for (cylno = 0; cylno < osblock.fs_ncg; cylno++) { + DBG_PRINT1("scg doing cg (%d)\n", cylno); + for (inc = osblock.fs_ipg - 1 ; inc > 0 ; inc--) updrefs(cylno, (ino_t)inc, bp, fsi, fso, Nflag); - } } /* * All inodes are checked, now make sure the number of * references found make sense. */ - for(i=0; isblock.fs_frag)) { + for (i = 0; i < ind; i++) { + if (!bp[i].found || (bp[i].found > sblock.fs_frag)) { warnx("error: %jd refs found for block %jd.", (intmax_t)bp[i].found, (intmax_t)bp[i].old); } - } } /* @@ -1532,15 +1460,12 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) wtfs(fsbtodb(&sblock, cgtod(&sblock, ocscg)), (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag); DBG_PRINT0("scg written\n"); - DBG_DUMP_CG(&sblock, - "new summary cg", - &acg); + DBG_DUMP_CG(&sblock, "new summary cg", &acg); DBG_LEAVE; return; } -/* ************************************************************** rdfs ***** */ /* * Here we read some block(s) from disk. */ @@ -1552,22 +1477,18 @@ rdfs(ufs2_daddr_t bno, size_t size, void *bf, int fsi) DBG_ENTER; - if (bno < 0) { + if (bno < 0) err(32, "rdfs: attempting to read negative block number"); - } - if (lseek(fsi, (off_t)bno * DEV_BSIZE, 0) < 0) { + if (lseek(fsi, (off_t)bno * DEV_BSIZE, 0) < 0) err(33, "rdfs: seek error: %jd", (intmax_t)bno); - } n = read(fsi, bf, size); - if (n != (ssize_t)size) { + if (n != (ssize_t)size) err(34, "rdfs: read error: %jd", (intmax_t)bno); - } DBG_LEAVE; return; } -/* ************************************************************** wtfs ***** */ /* * Here we write some block(s) to disk. */ @@ -1583,19 +1504,16 @@ wtfs(ufs2_daddr_t bno, size_t size, void *bf, int fso, unsigned int Nflag) DBG_LEAVE; return; } - if (lseek(fso, (off_t)bno * DEV_BSIZE, SEEK_SET) < 0) { + if (lseek(fso, (off_t)bno * DEV_BSIZE, SEEK_SET) < 0) err(35, "wtfs: seek error: %ld", (long)bno); - } n = write(fso, bf, size); - if (n != (ssize_t)size) { + if (n != (ssize_t)size) err(36, "wtfs: write error: %ld", (long)bno); - } DBG_LEAVE; return; } -/* ************************************************************* alloc ***** */ /* * Here we allocate a free block in the current cylinder group. It is assumed, * that acg contains the current cylinder group. As we may take a block from @@ -1605,11 +1523,11 @@ static ufs2_daddr_t alloc(void) { DBG_FUNC("alloc") - ufs2_daddr_t d, blkno; - int lcs1, lcs2; - int l; - int csmin, csmax; - int dlower, dupper, dmax; + ufs2_daddr_t d, blkno; + int lcs1, lcs2; + int l; + int csmin, csmax; + int dlower, dupper, dmax; DBG_ENTER; @@ -1629,45 +1547,36 @@ alloc(void) * block here which we have to relocate a couple of seconds later again * again, and we are not prepared to to this anyway. */ - blkno=-1; - dlower=cgsblock(&sblock, acg.cg_cgx)-cgbase(&sblock, acg.cg_cgx); - dupper=cgdmin(&sblock, acg.cg_cgx)-cgbase(&sblock, acg.cg_cgx); - dmax=cgbase(&sblock, acg.cg_cgx)+sblock.fs_fpg; - if (dmax > sblock.fs_size) { + blkno =- 1; + dlower = cgsblock(&sblock, acg.cg_cgx) - cgbase(&sblock, acg.cg_cgx); + dupper = cgdmin(&sblock, acg.cg_cgx) - cgbase(&sblock, acg.cg_cgx); + dmax = cgbase(&sblock, acg.cg_cgx) + sblock.fs_fpg; + if (dmax > sblock.fs_size) dmax = sblock.fs_size; - } - dmax-=cgbase(&sblock, acg.cg_cgx); /* retransform into cg */ - csmin=sblock.fs_csaddr-cgbase(&sblock, acg.cg_cgx); - csmax=csmin+howmany(sblock.fs_cssize, sblock.fs_fsize); - DBG_PRINT3("seek range: dl=%d, du=%d, dm=%d\n", - dlower, - dupper, - dmax); - DBG_PRINT2("range cont: csmin=%d, csmax=%d\n", - csmin, - csmax); + dmax -= cgbase(&sblock, acg.cg_cgx); /* retransform into cg */ + csmin = sblock.fs_csaddr - cgbase(&sblock, acg.cg_cgx); + csmax = csmin + howmany(sblock.fs_cssize, sblock.fs_fsize); + DBG_PRINT3("seek range: dl=%d, du=%d, dm=%d\n", dlower, dupper, dmax); + DBG_PRINT2("range cont: csmin=%d, csmax=%d\n", csmin, csmax); - for(d=0; (d=csmin && d<=csmax) { + for (d = 0; (d < dlower && blkno == -1); d += sblock.fs_frag) { + if (d >= csmin && d <= csmax) continue; - } - if(isblock(&sblock, cg_blksfree(&acg), fragstoblks(&sblock, - d))) { + if (isblock(&sblock, cg_blksfree(&acg), fragstoblks(&sblock, d))) { blkno = fragstoblks(&sblock, d);/* Yeah found a block */ break; } } - for(d=dupper; (d=csmin && d<=csmax) { + for (d = dupper; (d < dmax && blkno == -1); d += sblock.fs_frag) { + if (d >= csmin && d <= csmax) { continue; } - if(isblock(&sblock, cg_blksfree(&acg), fragstoblks(&sblock, - d))) { + if (isblock(&sblock, cg_blksfree(&acg), fragstoblks(&sblock, d))) { blkno = fragstoblks(&sblock, d);/* Yeah found a block */ break; } } - if(blkno==-1) { + if (blkno == -1) { warnx("internal error: couldn't find promised block in cg"); DBG_LEAVE; return (0); @@ -1676,7 +1585,7 @@ alloc(void) /* * This is needed if the block was found already in the first loop. */ - d=blkstofrags(&sblock, blkno); + d = blkstofrags(&sblock, blkno); clrblock(&sblock, cg_blksfree(&acg), blkno); if (sblock.fs_contigsumsize > 0) { @@ -1691,33 +1600,29 @@ alloc(void) * * Lets start with the blocks before our allocated block ... */ - for(lcs1=0, l=blkno-1; lcs1d_partitions[2]; - } else if (*cp>='a' && *cp<='h') { - pp = &lp->d_partitions[*cp - 'a']; - } else { - errx(1, "unknown device"); - } - p_size = pp->p_size; - } else { - get_dev_size(fsi, &p_size); - } + if (lp != NULL) { + if (isdigit(*cp)) + pp = &lp->d_partitions[2]; + else if (*cp>='a' && *cp<='h') + pp = &lp->d_partitions[*cp - 'a']; + else + errx(1, "unknown device"); + p_size = pp->p_size; + } else { + get_dev_size(fsi, &p_size); + } /* * Check if that partition is suitable for growing a file system. */ - if (p_size < 1) { + if (p_size < 1) errx(1, "partition is unavailable"); - } /* * Read the current superblock, and take a backup. @@ -2103,21 +1992,19 @@ main(int argc, char **argv) sblockloc = sblock_try[i] / DEV_BSIZE; rdfs(sblockloc, (size_t)SBLOCKSIZE, (void *)&(osblock), fsi); if ((osblock.fs_magic == FS_UFS1_MAGIC || - (osblock.fs_magic == FS_UFS2_MAGIC && - osblock.fs_sblockloc == sblock_try[i])) && + (osblock.fs_magic == FS_UFS2_MAGIC && + osblock.fs_sblockloc == sblock_try[i])) && osblock.fs_bsize <= MAXBSIZE && osblock.fs_bsize >= (int32_t) sizeof(struct fs)) break; } - if (sblock_try[i] == -1) { + if (sblock_try[i] == -1) errx(1, "superblock not recognized"); - } memcpy((void *)&fsun1, (void *)&fsun2, sizeof(fsun2)); maxino = sblock.fs_ncg * sblock.fs_ipg; DBG_OPEN("/tmp/growfs.debug"); /* already here we need a superblock */ - DBG_DUMP_FS(&sblock, - "old sblock"); + DBG_DUMP_FS(&sblock, "old sblock"); /* * Determine size to grow to. Default to the full size specified in @@ -2125,17 +2012,16 @@ main(int argc, char **argv) */ sblock.fs_size = dbtofsb(&osblock, p_size); if (size != 0) { - if (size > p_size){ + if (size > p_size) errx(1, "there is not enough space (%d < %d)", p_size, size); - } sblock.fs_size = dbtofsb(&osblock, size); } /* * Are we really growing ? */ - if(osblock.fs_size >= sblock.fs_size) { + if (osblock.fs_size >= sblock.fs_size) { errx(1, "we are not growing (%jd->%jd)", (intmax_t)osblock.fs_size, (intmax_t)sblock.fs_size); } @@ -2145,16 +2031,15 @@ main(int argc, char **argv) /* * Check if we find an active snapshot. */ - if(ExpertFlag == 0) { - for(j=0; j= sblock.fs_size) { + if (osblock.fs_size >= sblock.fs_size) errx(1, "not enough new space"); - } DBG_PRINT0("sblock calculated\n"); @@ -2239,17 +2123,18 @@ main(int argc, char **argv) /* * Update the disk label. */ - if (!unlabeled) { - pp->p_fsize = sblock.fs_fsize; - pp->p_frag = sblock.fs_frag; - pp->p_cpg = sblock.fs_fpg; + if (!unlabeled) { + pp->p_fsize = sblock.fs_fsize; + pp->p_frag = sblock.fs_frag; + pp->p_cpg = sblock.fs_fpg; - return_disklabel(fso, lp, Nflag); - DBG_PRINT0("label rewritten\n"); - } + return_disklabel(fso, lp, Nflag); + DBG_PRINT0("label rewritten\n"); + } close(fsi); - if(fso>-1) close(fso); + if (fso > -1) + close(fso); DBG_CLOSE; @@ -2257,7 +2142,6 @@ main(int argc, char **argv) return 0; } -/* ************************************************** return_disklabel ***** */ /* * Write the updated disklabel back to disk. */ @@ -2270,26 +2154,24 @@ return_disklabel(int fd, struct disklabel *lp, unsigned int Nflag) DBG_ENTER; - if(!lp) { + if (!lp) { DBG_LEAVE; return; } - if(!Nflag) { - lp->d_checksum=0; + if (!Nflag) { + lp->d_checksum = 0; sum = 0; - ptr=(u_short *)lp; + ptr = (u_short *)lp; /* * recalculate checksum */ - while(ptr < (u_short *)&lp->d_partitions[lp->d_npartitions]) { + while (ptr < (u_short *)&lp->d_partitions[lp->d_npartitions]) sum ^= *ptr++; - } lp->d_checksum=sum; - if (ioctl(fd, DIOCWDINFO, (char *)lp) < 0) { + if (ioctl(fd, DIOCWDINFO, (char *)lp) < 0) errx(1, "DIOCWDINFO failed"); - } } free(lp); @@ -2297,7 +2179,6 @@ return_disklabel(int fd, struct disklabel *lp, unsigned int Nflag) return ; } -/* ***************************************************** get_disklabel ***** */ /* * Read the disklabel from disk. */ @@ -2305,25 +2186,24 @@ static struct disklabel * get_disklabel(int fd) { DBG_FUNC("get_disklabel") - static struct disklabel *lab; + static struct disklabel *lab; DBG_ENTER; - lab=(struct disklabel *)malloc(sizeof(struct disklabel)); + lab = (struct disklabel *)malloc(sizeof(struct disklabel)); if (!lab) errx(1, "malloc failed"); - if (!ioctl(fd, DIOCGDINFO, (char *)lab)) - return (lab); + if (!ioctl(fd, DIOCGDINFO, (char *)lab)) + return (lab); - unlabeled++; + unlabeled++; DBG_LEAVE; return (NULL); } -/* ************************************************************* usage ***** */ /* * Dump a line of usage. */ @@ -2340,7 +2220,6 @@ usage(void) exit(1); } -/* *********************************************************** updclst ***** */ /* * This updates most parameters and the bitmap related to cluster. We have to * assume that sblock, osblock, acg are set up. @@ -2349,13 +2228,12 @@ static void updclst(int block) { DBG_FUNC("updclst") - static int lcs=0; + static int lcs = 0; DBG_ENTER; - if(sblock.fs_contigsumsize < 1) { /* no clustering */ + if (sblock.fs_contigsumsize < 1) /* no clustering */ return; - } /* * update cluster allocation map */ @@ -2364,20 +2242,18 @@ updclst(int block) /* * update cluster summary table */ - if(!lcs) { + if (!lcs) { /* * calculate size for the trailing cluster */ - for(block--; lcs