diff options
-rw-r--r-- | sbin/growfs/debug.c | 190 | ||||
-rw-r--r-- | sbin/growfs/growfs.c | 883 |
2 files changed, 457 insertions, 616 deletions
diff --git a/sbin/growfs/debug.c b/sbin/growfs/debug.c index 5072fc1..7b57ec7 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 <sys/param.h> #include <limits.h> @@ -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; i<sb->fs_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; j<FSMAXSNAP; j++) { + for (j = 0; j < FSMAXSNAP; j++) { fprintf(dbg_log, "snapinum int32_t[%2d] 0x%08x\n", j, sb->fs_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; j<MAXFRAG; j++) { + for (j = 0; j < MAXFRAG; j++) { fprintf(dbg_log, "frsum int32_t[%d] 0x%08x\n", j, cgr->cg_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; j<e; j+=32) { + cp = (unsigned char *)cg_inosused(cgr); + e = sb->fs_ipg / 8; + for (j = 0; j < e; j += 32) { fprintf(dbg_log, "%08x: ", j); - for(k=0; k<32; k+=8) { - if(j+k+8<e) { + for (k = 0; k < 32; k += 8) { + if (j + k + 8 < e) { fprintf(dbg_log, "%02x%02x%02x%02x%02x%02x%02x%02x ", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } else { - for(l=0; (l<8)&&(j+k+l<e); l++) { + for (l = 0; (l < 8) && (j + k + l < e); l++) { fprintf(dbg_log, "%02x", cp[l]); } } - cp+=8; + cp += 8; } fprintf(dbg_log, "\n"); } @@ -520,7 +504,6 @@ dbg_dump_inmap(struct fs *sb, const char *comment, struct cg *cgr) } -/* **************************************************** dbg_dump_frmap ***** */ /* * Dump the fragment allocation map in one cylinder group. */ @@ -530,33 +513,32 @@ dbg_dump_frmap(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 FRAGMENT ALLOCATION MAP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); indent++; - cp=(unsigned char *)cg_blksfree(cgr); + cp = (unsigned char *)cg_blksfree(cgr); if (sb->fs_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; j<e; j+=32) { + for (j = 0; j < e; j += 32) { fprintf(dbg_log, "%08x: ", j); - for(k=0; k<32; k+=8) { - if(j+k+8<e) { + for (k = 0; k < 32; k += 8) { + if (j + k + 8 <e) { fprintf(dbg_log, "%02x%02x%02x%02x%02x%02x%02x%02x ", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } else { - for(l=0; (l<8)&&(j+k+l<e); l++) { + for (l = 0; (l < 8) && (j + k + l < e); l++) { fprintf(dbg_log, "%02x", cp[l]); } } - cp+=8; + cp += 8; } fprintf(dbg_log, "\n"); } @@ -567,7 +549,6 @@ dbg_dump_frmap(struct fs *sb, const char *comment, struct cg *cgr) return; } -/* **************************************************** dbg_dump_clmap ***** */ /* * Dump the cluster allocation map in one cylinder group. */ @@ -577,33 +558,32 @@ dbg_dump_clmap(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 CLUSTER ALLOCATION MAP =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); indent++; - cp=(unsigned char *)cg_clustersfree(cgr); + cp = (unsigned char *)cg_clustersfree(cgr); if (sb->fs_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; j<e; j+=32) { + for (j = 0; j < e; j += 32) { fprintf(dbg_log, "%08x: ", j); - for(k=0; k<32; k+=8) { - if(j+k+8<e) { + for (k = 0; k < 32; k += 8) { + if (j + k + 8 < e) { fprintf(dbg_log, "%02x%02x%02x%02x%02x%02x%02x%02x ", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } else { - for(l=0; (l<8)&&(j+k+l<e); l++) { + for (l = 0; (l < 8) && (j + k + l <e); l++) { fprintf(dbg_log, "%02x", cp[l]); } } - cp+=8; + cp += 8; } fprintf(dbg_log, "\n"); } @@ -614,7 +594,6 @@ dbg_dump_clmap(struct fs *sb, const char *comment, struct cg *cgr) return; } -/* **************************************************** dbg_dump_clsum ***** */ /* * Dump the cluster availability summary of one cylinder group. */ @@ -624,16 +603,15 @@ dbg_dump_clsum(struct fs *sb, const char *comment, struct cg *cgr) int j; int *ip; - if(!dbg_log) { + if (!dbg_log) return; - } fprintf(dbg_log, "===== START CLUSTER SUMMARY =====\n"); fprintf(dbg_log, "# %d@%lx: %s\n", indent, (unsigned long)cgr, comment); indent++; - ip=(int *)cg_clustersum(cgr); - for(j=0; j<=sb->fs_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; j<sb->fs_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; k<sb->fs_old_nrpos; k++) { + for (k = 0; k < sb->fs_old_nrpos; k++) { fprintf(dbg_log, "%4d", cg_blks(sb, cgr, j)[k]); - if(k<sb->fs_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)i<MIN(howmany(sb->fs_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)<length) { + for (j = 0; j < 8; j++) { + if ((size_t)(i + j) < length) fprintf(dbg_log, "%08X ", *mem++); - } } fprintf(dbg_log, "\n"); } diff --git a/sbin/growfs/growfs.c b/sbin/growfs/growfs.c index 3e9ba1a..224df4a 100644 --- a/sbin/growfs/growfs.c +++ b/sbin/growfs/growfs.c @@ -49,7 +49,6 @@ All rights reserved.\n"; #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); -/* ********************************************************** INCLUDES ***** */ #include <sys/param.h> #include <sys/disklabel.h> #include <sys/ioctl.h> @@ -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]; - - dbg_csp=fscs; - for(dbg_csc=0; dbg_csc<osblock.fs_ncg; dbg_csc++) { - snprintf(dbg_line, sizeof(dbg_line), - "%d. old csum in old location", dbg_csc); - DBG_DUMP_CSUM(&osblock, - dbg_line, - dbg_csp++); + { + struct csum *dbg_csp; + int dbg_csc; + char dbg_line[80]; + + dbg_csp = fscs; + + for (dbg_csc = 0; dbg_csc < osblock.fs_ncg; dbg_csc++) { + snprintf(dbg_line, sizeof(dbg_line), + "%d. old csum in old location", dbg_csc); + DBG_DUMP_CSUM(&osblock, dbg_line, dbg_csp++); + } } -} #endif /* FS_DEBUG */ DBG_PRINT0("fscs read\n"); /* * Do all needed changes in the former last cylinder group. */ - updjcg(osblock.fs_ncg-1, modtime, fsi, fso, Nflag); + updjcg(osblock.fs_ncg - 1, modtime, fsi, fso, Nflag); /* * Dump out summary information about file system. @@ -260,7 +254,7 @@ growfs(int fsi, int fso, unsigned int Nflag) initcg(cylno, modtime, fso, Nflag); j = sprintf(tmpbuf, " %jd%s", (intmax_t)fsbtodb(&sblock, cgsblock(&sblock, cylno)), - cylno < (sblock.fs_ncg-1) ? "," : "" ); + cylno < (sblock.fs_ncg - 1) ? "," : "" ); if (i + j >= 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]; - - dbg_csp=fscs; - for(dbg_csc=0; dbg_csc<sblock.fs_ncg; dbg_csc++) { - snprintf(dbg_line, sizeof(dbg_line), - "%d. new csum in new location", dbg_csc); - DBG_DUMP_CSUM(&sblock, - dbg_line, - dbg_csp++); + { + struct csum *dbg_csp; + int dbg_csc; + char dbg_line[80]; + + dbg_csp = fscs; + for (dbg_csc = 0; dbg_csc < sblock.fs_ncg; dbg_csc++) { + snprintf(dbg_line, sizeof(dbg_line), + "%d. new csum in new location", dbg_csc); + DBG_DUMP_CSUM(&sblock, dbg_line, dbg_csp++); + } } -} #endif /* FS_DEBUG */ /* @@ -310,8 +302,7 @@ growfs(int fsi, int fso, unsigned int Nflag) sblock.fs_time = modtime; wtfs(sblockloc, (size_t)SBLOCKSIZE, (void *)&sblock, fso, Nflag); DBG_PRINT0("sblock written\n"); - DBG_DUMP_FS(&sblock, - "new initial sblock"); + DBG_DUMP_FS(&sblock, "new initial sblock"); /* * Clean up the dynamic fields in our superblock copies. @@ -353,14 +344,12 @@ growfs(int fsi, int fso, unsigned int Nflag) (size_t)SBLOCKSIZE, (void *)&sblock, fso, Nflag); } DBG_PRINT0("sblock copies written\n"); - DBG_DUMP_FS(&sblock, - "new other sblocks"); + DBG_DUMP_FS(&sblock, "new other sblocks"); DBG_LEAVE; return; } -/* ************************************************************ initcg ***** */ /* * This creates a new cylinder group structure, for more details please see * the source of newfs(8), as this function is taken over almost unchanged. @@ -453,7 +442,7 @@ initcg(int cylno, time_t modtime, int fso, unsigned int Nflag) if (sblock.fs_magic == FS_UFS1_MAGIC) { bzero(iobuf, sblock.fs_bsize); for (i = 0; i < sblock.fs_ipg / INOPF(&sblock); - i += sblock.fs_frag) { + i += sblock.fs_frag) { #ifdef FSIRAND dp1 = (struct ufs1_dinode *)(void *)iobuf; for (j = 0; j < INOPB(&sblock); j++) { @@ -488,7 +477,7 @@ initcg(int cylno, time_t modtime, int fso, unsigned int Nflag) } } for (d = dupper; d + sblock.fs_frag <= acg.cg_ndblk; - d += sblock.fs_frag) { + d += sblock.fs_frag) { blkno = d / sblock.fs_frag; setblock(&sblock, cg_blksfree(&acg), blkno); if (sblock.fs_contigsumsize > 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); - f<roundup(frag+1, sblock.fs_frag); - f++) { + for (f = rounddown(frag, sblock.fs_frag); + f < roundup(frag + 1, sblock.fs_frag); f++) { /* * Count contiguous free fragments. */ - if(isset(cg_blksfree(&acg), f)) { + if (isset(cg_blksfree(&acg), f)) { fragsize++; } else { - if(fragsize && fragsize<sblock.fs_frag) { + if (fragsize && fragsize < sblock.fs_frag) { /* * We found something in between. */ acg.cg_frsum[fragsize]+=sign; DBG_PRINT2("frag_adjust [%d]+=%d\n", - fragsize, - sign); + fragsize, sign); } - fragsize=0; + fragsize = 0; } } - if(fragsize && fragsize<sblock.fs_frag) { + if (fragsize && fragsize < sblock.fs_frag) { /* * We found something. */ - acg.cg_frsum[fragsize]+=sign; - DBG_PRINT2("frag_adjust [%d]+=%d\n", - fragsize, - sign); + acg.cg_frsum[fragsize] += sign; + DBG_PRINT2("frag_adjust [%d]+=%d\n", fragsize, sign); } - DBG_PRINT2("frag_adjust [[%d]]+=%d\n", - fragsize, - sign); + DBG_PRINT2("frag_adjust [[%d]]+=%d\n", fragsize, sign); DBG_LEAVE; return; } -/* ******************************************************* cond_bl_upd ***** */ /* * Here we conditionally update a pointer to a fragment. We check for all * relocated blocks if any of its fragments is referenced by the current @@ -641,9 +622,7 @@ cond_bl_upd(ufs2_daddr_t *block, struct gfs_bpp *field, int fsi, int fso, *block = dst + fragnum; f->found++; 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<sblock.fs_contigsumsize; + if (sblock.fs_contigsumsize > 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<sblock.fs_csaddr+(sblock.fs_cssize/sblock.fs_fsize)) { - for(; d-sblock.fs_csaddr< - sblock.fs_cssize/sblock.fs_fsize; - d++) { - clrbit(cg_blksfree(&acg), d%sblock.fs_fpg); + if (d < + sblock.fs_csaddr + (sblock.fs_cssize / sblock.fs_fsize)) { + for (; d - sblock.fs_csaddr < + sblock.fs_cssize/sblock.fs_fsize; d++) { + clrbit(cg_blksfree(&acg), d % sblock.fs_fpg); acg.cg_cs.cs_nffree--; sblock.fs_cstotal.cs_nffree--; } acg.cg_cs.cs_nbfree--; - acg.cg_cs.cs_nffree+=sblock.fs_frag; + acg.cg_cs.cs_nffree += sblock.fs_frag; sblock.fs_cstotal.cs_nbfree--; - sblock.fs_cstotal.cs_nffree+=sblock.fs_frag; - if(sblock.fs_contigsumsize > 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)&&(d%sblock.fs_frag)); d++) { - DBG_PRINT1("scg first frag check loop d=%jd\n", - (intmax_t)d); - if(isclr(cg_blksfree(&acg), d)) { + for (d = odupper; ((d < dupper) && (d % sblock.fs_frag)); d++) { + DBG_PRINT1("scg first frag check loop d=%jd\n", (intmax_t)d); + if (isclr(cg_blksfree(&acg), d)) { if (!ind) { - 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; - } + 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<d+sblock.fs_frag; f++) { - if(isset(cg_blksfree(&aocg), f)) { + 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 < d + sblock.fs_frag; f++) { + if (isset(cg_blksfree(&aocg), f)) { acg.cg_cs.cs_nffree--; sblock.fs_cstotal.cs_nffree--; } } - clrblock(&sblock, cg_blksfree(&acg), d/sblock.fs_frag); - bp[ind].old=d/sblock.fs_frag; + clrblock(&sblock, cg_blksfree(&acg), d / sblock.fs_frag); + bp[ind].old = d / sblock.fs_frag; ind++; } else { - clrblock(&sblock, cg_blksfree(&acg), d/sblock.fs_frag); + clrblock(&sblock, cg_blksfree(&acg), d / sblock.fs_frag); acg.cg_cs.cs_nbfree--; sblock.fs_cstotal.cs_nbfree--; - if(sblock.fs_contigsumsize > 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)){ + if (sblock.fs_contigsumsize > 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<dupper) { - frag_adjust(dupper-1, -1); + if (d < dupper) { + frag_adjust(dupper - 1, -1); - if(isblock(&sblock, cg_blksfree(&acg), d/sblock.fs_frag)) { + if (isblock(&sblock, cg_blksfree(&acg), d / sblock.fs_frag)) { acg.cg_cs.cs_nbfree--; sblock.fs_cstotal.cs_nbfree--; - acg.cg_cs.cs_nffree+=sblock.fs_frag; - sblock.fs_cstotal.cs_nffree+=sblock.fs_frag; - if(sblock.fs_contigsumsize > 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)){ + acg.cg_cs.cs_nffree += sblock.fs_frag; + sblock.fs_cstotal.cs_nffree += sblock.fs_frag; + if (sblock.fs_contigsumsize > 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<dupper; d++) { + for (; d < dupper; d++) { DBG_PRINT1("scg second frag check loop d=%jd\n", (intmax_t)d); - if(isclr(cg_blksfree(&acg), d)) { - bp[ind].old=d/sblock.fs_frag; - bp[ind].flags|=GFS_FL_LAST; + if (isclr(cg_blksfree(&acg), d)) { + bp[ind].old = d / sblock.fs_frag; + bp[ind].flags |= GFS_FL_LAST; } else { clrbit(cg_blksfree(&acg), d); acg.cg_cs.cs_nffree--; sblock.fs_cstotal.cs_nffree--; } } - if(bp[ind].flags & GFS_FL_LAST) { /* we have to advance here */ + if (bp[ind].flags & GFS_FL_LAST) /* we have to advance here */ ind++; - } - frag_adjust(dupper-1, 1); + frag_adjust(dupper - 1, 1); } /* * If we found a block to relocate just do so. */ - if(ind) { - for(i=0; i<ind; i++) { - if(!bp[i].old) { /* no more blocks listed */ + if (ind) { + for (i = 0; i < ind; i++) { + if (!bp[i].old) { /* no more blocks listed */ /* * XXX A relative blocknumber should not be * zero, which is not explicitly @@ -1403,17 +1340,17 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * Allocate a complete block in the same (current) * cylinder group. */ - bp[i].new=alloc()/sblock.fs_frag; + bp[i].new = alloc() / sblock.fs_frag; /* * There is no frag_adjust() needed for the new block * as it will have no fragments yet :-). */ - for(f=bp[i].old*sblock.fs_frag, - g=bp[i].new*sblock.fs_frag; - f<(bp[i].old+1)*sblock.fs_frag; + for (f = bp[i].old * sblock.fs_frag, + g = bp[i].new * sblock.fs_frag; + f < (bp[i].old + 1) * sblock.fs_frag; f++, g++) { - if(isset(cg_blksfree(&aocg), f)) { + if (isset(cg_blksfree(&aocg), f)) { setbit(cg_blksfree(&acg), g); acg.cg_cs.cs_nffree++; sblock.fs_cstotal.cs_nffree++; @@ -1428,44 +1365,41 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * have to be careful if this first block happens to * be also the last block to be relocated. */ - if(bp[i].flags & GFS_FL_FIRST) { - for(f=bp[i].old*sblock.fs_frag, - g=bp[i].new*sblock.fs_frag; - f<odupper; - f++, g++) { + if (bp[i].flags & GFS_FL_FIRST) { + for (f = bp[i].old * sblock.fs_frag, + g =bp[i].new * sblock.fs_frag; + f < odupper; f++, g++) { setbit(cg_blksfree(&acg), g); acg.cg_cs.cs_nffree++; sblock.fs_cstotal.cs_nffree++; } - if(!(bp[i].flags & GFS_FL_LAST)) { - frag_adjust(bp[i].new*sblock.fs_frag,1); - } + if (!(bp[i].flags & GFS_FL_LAST)) + frag_adjust(bp[i].new * sblock.fs_frag, 1); } /* * Special handling is required if this is the last * block to be relocated. */ - if(bp[i].flags & GFS_FL_LAST) { - frag_adjust(bp[i].new*sblock.fs_frag, 1); - frag_adjust(bp[i].old*sblock.fs_frag, -1); - for(f=dupper; - f<roundup(dupper, sblock.fs_frag); - f++) { - if(isclr(cg_blksfree(&acg), f)) { + if (bp[i].flags & GFS_FL_LAST) { + frag_adjust(bp[i].new * sblock.fs_frag, 1); + frag_adjust(bp[i].old * sblock.fs_frag, -1); + for (f = dupper; + f < roundup(dupper, sblock.fs_frag); f++) { + if (isclr(cg_blksfree(&acg), f)) { setbit(cg_blksfree(&acg), f); acg.cg_cs.cs_nffree++; sblock.fs_cstotal.cs_nffree++; } } - frag_adjust(bp[i].old*sblock.fs_frag, 1); + frag_adjust(bp[i].old * sblock.fs_frag, 1); } /* * !!! Attach the cylindergroup offset here. */ - bp[i].old+=cbase/sblock.fs_frag; - bp[i].new+=cbase/sblock.fs_frag; + bp[i].old += cbase / sblock.fs_frag; + bp[i].new += cbase / sblock.fs_frag; /* * Copy the content of the block. @@ -1474,17 +1408,14 @@ updcsloc(time_t modtime, int fsi, int fso, unsigned int Nflag) * XXX Here we will have to implement a copy on write * in the case we have any active snapshots. */ - rdfs(fsbtodb(&sblock, bp[i].old*sblock.fs_frag), + rdfs(fsbtodb(&sblock, bp[i].old * sblock.fs_frag), (size_t)sblock.fs_bsize, (void *)&ablk, fsi); - wtfs(fsbtodb(&sblock, bp[i].new*sblock.fs_frag), + wtfs(fsbtodb(&sblock, bp[i].new * sblock.fs_frag), (size_t)sblock.fs_bsize, (void *)&ablk, fso, Nflag); - DBG_DUMP_HEX(&sblock, - "copied full block", + DBG_DUMP_HEX(&sblock, "copied full block", (unsigned char *)&ablk); - DBG_PRINT2("scg (%jd->%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; cylno<osblock.fs_ncg; cylno++) { - DBG_PRINT1("scg doing cg (%d)\n", - cylno); - for(inc=osblock.fs_ipg-1 ; inc>0 ; 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; i<ind; i++) { - if(!bp[i].found || (bp[i].found>sblock.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); - - for(d=0; (d<dlower && blkno==-1); d+=sblock.fs_frag) { - if(d>=csmin && d<=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 < 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<dmax && blkno==-1); d+=sblock.fs_frag) { - if(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; lcs1<sblock.fs_contigsumsize; - l--, lcs1++ ) { - if(isclr(cg_clustersfree(&acg),l)){ + for (lcs1 = 0, l = blkno - 1; lcs1 < sblock.fs_contigsumsize; + l--, lcs1++ ) { + if (isclr(cg_clustersfree(&acg), l)) break; - } } /* * ... and continue with the blocks right after our allocated * block. */ - for(lcs2=0, l=blkno+1; lcs2<sblock.fs_contigsumsize; + for (lcs2 = 0, l = blkno + 1; lcs2 < sblock.fs_contigsumsize; l++, lcs2++ ) { - if(isclr(cg_clustersfree(&acg),l)){ + if (isclr(cg_clustersfree(&acg), l)) break; - } } /* * Now update all counters. */ - cg_clustersum(&acg)[MIN(lcs1+lcs2+1,sblock.fs_contigsumsize)]--; - if(lcs1) { + cg_clustersum(&acg)[MIN(lcs1 + lcs2 + 1, sblock.fs_contigsumsize)]--; + if (lcs1) cg_clustersum(&acg)[lcs1]++; - } - if(lcs2) { + if (lcs2) cg_clustersum(&acg)[lcs2]++; - } } /* * Update all statistics based on blocks. @@ -1729,7 +1634,6 @@ alloc(void) return (d); } -/* *********************************************************** isblock ***** */ /* * Here we check if all frags of a block are free. For more details again * please see the source of newfs(8), as this function is taken over almost @@ -1739,7 +1643,7 @@ static int isblock(struct fs *fs, unsigned char *cp, int h) { DBG_FUNC("isblock") - unsigned char mask; + unsigned char mask; DBG_ENTER; @@ -1766,7 +1670,6 @@ isblock(struct fs *fs, unsigned char *cp, int h) } } -/* ********************************************************** clrblock ***** */ /* * Here we allocate a complete block in the block map. For more details again * please see the source of newfs(8), as this function is taken over almost @@ -1801,7 +1704,6 @@ clrblock(struct fs *fs, unsigned char *cp, int h) return; } -/* ********************************************************** setblock ***** */ /* * Here we free a complete block in the free block map. For more details again * please see the source of newfs(8), as this function is taken over almost @@ -1836,7 +1738,6 @@ setblock(struct fs *fs, unsigned char *cp, int h) return; } -/* ************************************************************ ginode ***** */ /* * This function provides access to an individual inode. We find out in which * block the requested inode is located, read it from disk if needed, and @@ -1848,7 +1749,7 @@ static union dinode * ginode(ino_t inumber, int fsi, int cg) { DBG_FUNC("ginode") - static ino_t startinum = 0; /* first inode in cached block */ + static ino_t startinum = 0; /* first inode in cached block */ DBG_ENTER; @@ -1885,7 +1786,6 @@ ginode(ino_t inumber, int fsi, int cg) (inumber % INOPB(&sblock)) * sizeof(struct ufs2_dinode)); } -/* ****************************************************** charsperline ***** */ /* * Figure out how many lines our current terminal has. For more details again * please see the source of newfs(8), as this function is taken over almost @@ -1895,28 +1795,24 @@ static int charsperline(void) { DBG_FUNC("charsperline") - int columns; - char *cp; - struct winsize ws; + int columns; + char *cp; + struct winsize ws; DBG_ENTER; columns = 0; - if (ioctl(0, TIOCGWINSZ, &ws) != -1) { + if (ioctl(0, TIOCGWINSZ, &ws) != -1) columns = ws.ws_col; - } - if (columns == 0 && (cp = getenv("COLUMNS"))) { + if (columns == 0 && (cp = getenv("COLUMNS"))) columns = atoi(cp); - } - if (columns == 0) { + if (columns == 0) columns = 80; /* last resort */ - } DBG_LEAVE; return columns; } -/* ****************************************************** get_dev_size ***** */ /* * Get the size of the partition if we can't figure it out from the disklabel, * e.g. from vinum volumes. @@ -1924,23 +1820,22 @@ charsperline(void) static void get_dev_size(int fd, int *size) { - int sectorsize; - off_t mediasize; + int sectorsize; + off_t mediasize; - if (ioctl(fd, DIOCGSECTORSIZE, §orsize) == -1) - err(1,"DIOCGSECTORSIZE"); - if (ioctl(fd, DIOCGMEDIASIZE, &mediasize) == -1) - err(1,"DIOCGMEDIASIZE"); + if (ioctl(fd, DIOCGSECTORSIZE, §orsize) == -1) + err(1,"DIOCGSECTORSIZE"); + if (ioctl(fd, DIOCGMEDIASIZE, &mediasize) == -1) + err(1,"DIOCGMEDIASIZE"); - if (sectorsize <= 0) - errx(1, "bogus sectorsize: %d", sectorsize); + if (sectorsize <= 0) + errx(1, "bogus sectorsize: %d", sectorsize); - *size = mediasize / sectorsize; + *size = mediasize / sectorsize; } -/* ************************************************************** main ***** */ /* - * growfs(8) is a utility which allows to increase the size of an existing + * growfs(8) is a utility which allows to increase the size of an existing * ufs file system. Currently this can only be done on unmounted file system. * It recognizes some command line options to specify the new desired size, * and it does some basic checkings. The old file system size is determined @@ -1965,39 +1860,38 @@ int main(int argc, char **argv) { DBG_FUNC("main") - char *device, *special, *cp; - int ch; - unsigned int size=0; - size_t len; - unsigned int Nflag=0; - int ExpertFlag=0; - struct stat st; - struct disklabel *lp; - struct partition *pp; - int i,fsi,fso; - u_int32_t p_size; - char reply[5]; + char *device, *special, *cp; + int ch; + unsigned int size = 0; + size_t len; + unsigned int Nflag = 0; + int ExpertFlag = 0; + struct stat st; + struct disklabel *lp; + struct partition *pp; + int i, fsi, fso; + u_int32_t p_size; + char reply[5]; #ifdef FSMAXSNAP - int j; + int j; #endif /* FSMAXSNAP */ DBG_ENTER; - while((ch=getopt(argc, argv, "Ns:vy")) != -1) { + while ((ch = getopt(argc, argv, "Ns:vy")) != -1) { switch(ch) { case 'N': - Nflag=1; + Nflag = 1; break; case 's': - size=(size_t)atol(optarg); - if(size<1) { + size = (size_t)atol(optarg); + if (size < 1) usage(); - } break; case 'v': /* for compatibility to newfs */ break; case 'y': - ExpertFlag=1; + ExpertFlag = 1; break; case '?': /* FALLTHROUGH */ @@ -2008,10 +1902,10 @@ main(int argc, char **argv) argc -= optind; argv += optind; - if(argc != 1) { + if (argc != 1) usage(); - } - device=*argv; + + device = *argv; /* * Now try to guess the (raw)device name. @@ -2027,11 +1921,10 @@ main(int argc, char **argv) * FreeBSD now doesn't distinguish between raw and block * devices any longer, but it should still work this way. */ - len=strlen(device)+strlen(_PATH_DEV)+2+strlen("vinum/"); - special=(char *)malloc(len); - if(special == NULL) { + len = strlen(device) + strlen(_PATH_DEV) + 2 + strlen("vinum/"); + special = (char *)malloc(len); + if (special == NULL) errx(1, "malloc failed"); - } snprintf(special, len, "%sr%s", _PATH_DEV, device); if (stat(special, &st) == -1) { snprintf(special, len, "%s%s", _PATH_DEV, device); @@ -2055,46 +1948,42 @@ main(int argc, char **argv) fso = -1; } else { fso = open(device, O_WRONLY); - if (fso < 0) { + if (fso < 0) err(1, "%s", device); - } } /* * ... and reading. */ fsi = open(device, O_RDONLY); - if (fsi < 0) { + if (fsi < 0) err(1, "%s", device); - } /* * Try to read a label and guess the slice if not specified. This * code should guess the right thing and avoid to bother the user * with the task of specifying the option -v on vinum volumes. */ - cp=device+strlen(device)-1; + cp = device + strlen(device) - 1; lp = get_disklabel(fsi); pp = NULL; - 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); - } + 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<FSMAXSNAP; j++) { - if(sblock.fs_snapinum[j]) { + if (ExpertFlag == 0) { + for (j = 0; j < FSMAXSNAP; j++) { + if (sblock.fs_snapinum[j]) { errx(1, "active snapshot found in file system; " "please remove all snapshots before " "using growfs"); } - if(!sblock.fs_snapinum[j]) { /* list is dense */ + if (!sblock.fs_snapinum[j]) /* list is dense */ break; - } } } #endif @@ -2177,7 +2062,7 @@ main(int argc, char **argv) * later on realize we have to abort our operation, on that block * there should be no data, so we can't destroy something yet. */ - wtfs((ufs2_daddr_t)p_size-1, (size_t)DEV_BSIZE, (void *)&sblock, + wtfs((ufs2_daddr_t)p_size - 1, (size_t)DEV_BSIZE, (void *)&sblock, fso, Nflag); /* @@ -2225,9 +2110,8 @@ main(int argc, char **argv) sblock.fs_cssize = fragroundup(&sblock, sblock.fs_ncg * sizeof(struct csum)); - if(osblock.fs_size >= 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<sblock.fs_contigsumsize; block--, lcs++ ) { - if(isclr(cg_clustersfree(&acg), block)){ + for (block--; lcs < sblock.fs_contigsumsize; block--, lcs++ ) { + if (isclr(cg_clustersfree(&acg), block)) break; - } } } - if(lcs < sblock.fs_contigsumsize) { - if(lcs) { + if (lcs < sblock.fs_contigsumsize) { + if (lcs) cg_clustersum(&acg)[lcs]--; - } lcs++; cg_clustersum(&acg)[lcs]++; } @@ -2386,7 +2262,6 @@ updclst(int block) return; } -/* *********************************************************** updrefs ***** */ /* * This updates all references to relocated blocks for the given inode. The * inode is given as number within the cylinder group, and the number of the @@ -2397,10 +2272,10 @@ updrefs(int cg, ino_t in, struct gfs_bpp *bp, int fsi, int fso, unsigned int Nflag) { DBG_FUNC("updrefs") - ufs_lbn_t len, lbn, numblks; - ufs2_daddr_t iptr, blksperindir; - union dinode *ino; - int i, mode, inodeupdated; + ufs_lbn_t len, lbn, numblks; + ufs2_daddr_t iptr, blksperindir; + union dinode *ino; + int i, mode, inodeupdated; DBG_ENTER; @@ -2428,9 +2303,7 @@ updrefs(int cg, ino_t in, struct gfs_bpp *bp, int fsi, int fso, unsigned int DBG_LEAVE; return; /* skip empty swiss cheesy file or old fastlink */ } - DBG_PRINT2("scg checking inode (%d in %d)\n", - in, - cg); + DBG_PRINT2("scg checking inode (%d in %d)\n", in, cg); /* * Check all the blocks. |