Module Name: src Committed By: jmcneill Date: Mon Apr 6 22:44:04 UTC 2015
Modified Files: src/sbin/resize_ffs: Makefile resize_ffs.8 resize_ffs.c Log Message: if the -p flag is specified, display a progress bar while growing the file-system To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sbin/resize_ffs/Makefile cvs rdiff -u -r1.15 -r1.16 src/sbin/resize_ffs/resize_ffs.8 cvs rdiff -u -r1.43 -r1.44 src/sbin/resize_ffs/resize_ffs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/resize_ffs/Makefile diff -u src/sbin/resize_ffs/Makefile:1.4 src/sbin/resize_ffs/Makefile:1.5 --- src/sbin/resize_ffs/Makefile:1.4 Mon Aug 15 02:19:50 2011 +++ src/sbin/resize_ffs/Makefile Mon Apr 6 22:44:04 2015 @@ -1,11 +1,14 @@ -# $NetBSD: Makefile,v 1.4 2011/08/15 02:19:50 dholland Exp $ +# $NetBSD: Makefile,v 1.5 2015/04/06 22:44:04 jmcneill Exp $ .include <bsd.own.mk> PROG=resize_ffs MAN=resize_ffs.8 -SRCS=resize_ffs.c ffs_bswap.c +SRCS=resize_ffs.c ffs_bswap.c progress.c + +CPPFLAGS+=-I${NETBSDSRCDIR}/sbin/fsck .PATH: ${NETBSDSRCDIR}/sys/ufs/ffs +.PATH: ${NETBSDSRCDIR}/sbin/fsck .include <bsd.prog.mk> Index: src/sbin/resize_ffs/resize_ffs.8 diff -u src/sbin/resize_ffs/resize_ffs.8:1.15 src/sbin/resize_ffs/resize_ffs.8:1.16 --- src/sbin/resize_ffs/resize_ffs.8:1.15 Sun Mar 29 19:42:15 2015 +++ src/sbin/resize_ffs/resize_ffs.8 Mon Apr 6 22:44:04 2015 @@ -1,4 +1,4 @@ -.\" $NetBSD: resize_ffs.8,v 1.15 2015/03/29 19:42:15 wiz Exp $ +.\" $NetBSD: resize_ffs.8,v 1.16 2015/04/06 22:44:04 jmcneill Exp $ .\" .\" As its sole author, I explicitly place this man page in the public .\" domain. Anyone may use it in any way for any purpose (though I would @@ -9,7 +9,7 @@ .\" X Against HTML mo...@rodents.montreal.qc.ca .\" / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B .\" -.Dd January 4, 2011 +.Dd April 6, 2015 .Dt RESIZE_FFS 8 .Os .Sh NAME @@ -17,7 +17,7 @@ .Nd resize a file system on disk or in a file .Sh SYNOPSIS .Nm -.Op Fl cvy +.Op Fl cpvy .Op Fl s Ar size .Ar special .Sh DESCRIPTION @@ -58,6 +58,8 @@ The options are as follows: .It Fl c Check to see if the new size would change the file system. No changes will be made to the file system. +.It Fl p +Display a progress meter during the resize process. .It Fl s Specify the file system size to which the file system should be resized. Index: src/sbin/resize_ffs/resize_ffs.c diff -u src/sbin/resize_ffs/resize_ffs.c:1.43 src/sbin/resize_ffs/resize_ffs.c:1.44 --- src/sbin/resize_ffs/resize_ffs.c:1.43 Mon Apr 6 13:33:42 2015 +++ src/sbin/resize_ffs/resize_ffs.c Mon Apr 6 22:44:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: resize_ffs.c,v 1.43 2015/04/06 13:33:42 mlelstv Exp $ */ +/* $NetBSD: resize_ffs.c,v 1.44 2015/04/06 22:44:04 jmcneill Exp $ */ /* From sources sent on February 17, 2003 */ /*- * As its sole author, I explicitly place this code in the public @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: resize_ffs.c,v 1.43 2015/04/06 13:33:42 mlelstv Exp $"); +__RCSID("$NetBSD: resize_ffs.c,v 1.44 2015/04/06 22:44:04 jmcneill Exp $"); #include <sys/disk.h> #include <sys/disklabel.h> @@ -59,12 +59,17 @@ __RCSID("$NetBSD: resize_ffs.c,v 1.43 20 #include <strings.h> #include <unistd.h> +#include "progress.h" + /* new size of file system, in sectors */ static int64_t newsize; /* fd open onto disk device or file */ static int fd; +/* disk device or file path */ +char *special; + /* must we break up big I/O operations - see checksmallio() */ static int smallio; @@ -153,6 +158,7 @@ static unsigned char *iflags; int is_ufs2 = 0; int needswap = 0; int verbose = 0; +int progress = 0; static void usage(void) __dead; @@ -1015,6 +1021,8 @@ grow(void) "cgs"); for (i = oldsb->fs_ncg; i < newsb->fs_ncg; i++) { cgs[i] = (struct cg *) cgp; + progress_bar(special, "grow cg", + i - oldsb->fs_ncg, newsb->fs_ncg - oldsb->fs_ncg); initcg(i); cgp += cgblksz; } @@ -1043,6 +1051,8 @@ grow(void) csum_fixup(); /* Make fs_dsize match the new reality. */ recompute_fs_dsize(); + + progress_done(); } /* * Call (*fn)() for each inode, passing the inode and its inumber. The @@ -1990,6 +2000,8 @@ flush_cgs(void) int i; for (i = 0; i < newsb->fs_ncg; i++) { + progress_bar(special, "flush cg", + i, newsb->fs_ncg - 1); if (cgflags[i] & CGF_BLKMAPS) { rescan_blkmaps(i); } @@ -2009,6 +2021,8 @@ flush_cgs(void) if (needswap) ffs_csum_swap(csums,csums,newsb->fs_cssize); writeat(FFS_FSBTODB(newsb, newsb->fs_csaddr), csums, newsb->fs_cssize); + + progress_done(); } /* * Write the superblock, both to the main superblock and to each cg's @@ -2038,8 +2052,12 @@ write_sbs(void) ffs_sb_swap(newsb,newsb); writeat(where / DEV_BSIZE, newsb, SBLOCKSIZE); for (i = 0; i < oldsb->fs_ncg; i++) { + progress_bar(special, "write sb", + i, oldsb->fs_ncg - 1); writeat(FFS_FSBTODB(oldsb, cgsblock(oldsb, i)), newsb, SBLOCKSIZE); } + + progress_done(); } /* @@ -2103,7 +2121,6 @@ main(int argc, char **argv) int SFlag; size_t i; - char *special; char reply[5]; newsize = 0; @@ -2111,11 +2128,14 @@ main(int argc, char **argv) SFlag = 0; CheckOnlyFlag = 0; - while ((ch = getopt(argc, argv, "cs:vy")) != -1) { + while ((ch = getopt(argc, argv, "cps:vy")) != -1) { switch (ch) { case 'c': CheckOnlyFlag = 1; break; + case 'p': + progress = 1; + break; case 's': SFlag = 1; newsize = strtoll(optarg, NULL, 10); @@ -2218,8 +2238,19 @@ main(int argc, char **argv) * thing. SBLOCKSIZE may be an over-estimate, but we do this * just once, so being generous is cheap. */ memcpy(newsb, oldsb, SBLOCKSIZE); + + if (progress) { + progress_ttywidth(0); + signal(SIGWINCH, progress_ttywidth); + } + loadcgs(); + if (progress && !CheckOnlyFlag) { + progress_switch(progress); + progress_init(); + } + if (newsize > FFS_FSBTODB(oldsb, oldsb->fs_size)) { if (CheckOnlyFlag) exit(checkonly());