aboutsummaryrefslogtreecommitdiff
path: root/sbin/growfs/growfs.c
diff options
context:
space:
mode:
authorEdward Tomasz Napierala <trasz@FreeBSD.org>2012-12-16 14:37:25 +0000
committerEdward Tomasz Napierala <trasz@FreeBSD.org>2012-12-16 14:37:25 +0000
commitbe1bfa99a4fb4cfda1de22e9c778f61bac027962 (patch)
treeee498b5fe23ad5b131f1d9248580c4b678f76204 /sbin/growfs/growfs.c
parent2ce1b32df2c335c53da2713515b84720eaba1413 (diff)
downloadsrc-be1bfa99a4fb4cfda1de22e9c778f61bac027962.tar.gz
src-be1bfa99a4fb4cfda1de22e9c778f61bac027962.zip
When growing a filesystem, don't leave unused space at the end
if there is not enough room for a full cylinder group. Reviewed by: mckusick@
Notes
Notes: svn path=/head/; revision=244295
Diffstat (limited to 'sbin/growfs/growfs.c')
-rw-r--r--sbin/growfs/growfs.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/sbin/growfs/growfs.c b/sbin/growfs/growfs.c
index c93d111a9776..745e9e975572 100644
--- a/sbin/growfs/growfs.c
+++ b/sbin/growfs/growfs.c
@@ -1611,17 +1611,20 @@ main(int argc, char **argv)
}
sblock.fs_ncg = howmany(sblock.fs_size, sblock.fs_fpg);
+ /*
+ * Allocate last cylinder group only if there is enough room
+ * for at least one data block.
+ */
if (sblock.fs_size % sblock.fs_fpg != 0 &&
- sblock.fs_size % sblock.fs_fpg < cgdmin(&sblock, sblock.fs_ncg)) {
- /*
- * The space in the new last cylinder group is too small,
- * so revert back.
- */
+ sblock.fs_size <= cgdmin(&sblock, sblock.fs_ncg - 1)) {
+ humanize_number(oldsizebuf, sizeof(oldsizebuf),
+ (sblock.fs_size % sblock.fs_fpg) * sblock.fs_fsize,
+ "B", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
+ warnx("no room to allocate last cylinder group; "
+ "leaving %s unused", oldsizebuf);
sblock.fs_ncg--;
if (sblock.fs_magic == FS_UFS1_MAGIC)
sblock.fs_old_ncyl = sblock.fs_ncg * sblock.fs_old_cpg;
- printf("Warning: %jd sector(s) cannot be allocated.\n",
- (intmax_t)fsbtodb(&sblock, sblock.fs_size % sblock.fs_fpg));
sblock.fs_size = sblock.fs_ncg * sblock.fs_fpg;
}