diff options
Diffstat (limited to 'misc/util.c')
-rw-r--r-- | misc/util.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/misc/util.c b/misc/util.c index bf3aabdb..eaf6fea4 100644 --- a/misc/util.c +++ b/misc/util.c @@ -164,7 +164,7 @@ void parse_journal_opts(const char *opts) } journal_size = strtoul(arg, &p, 0); journal_size_check: - if (*p || (journal_size < 4 || journal_size > 100)) { + if (*p || (journal_size < 1 || journal_size > 100)) { fprintf(stderr, _("Invalid journal size parameter - %s.\n"), arg); @@ -191,8 +191,29 @@ void parse_journal_opts(const char *opts) "\tsize=<journal size in megabytes>\n" "\tdevice=<journal device>\n\n" "Journal size must be between " - "4 and 100 megabytes.\n\n" )); + "1 and 100 megabytes.\n\n" )); exit(1); } } +/* + * Find a reasonable journal file size (in blocks) given the number of blocks + * in the filesystem. For very small filesystems, it is not reasonable to + * have a journal that fills more than half of the filesystem. + */ +int journal_default_size(blk_t blocks_count) +{ + blk_t j_blocks; + + if (blocks_count < 2048) { + fprintf(stderr, "Filesystem too small for a journal\n"); + j_blocks = 0; + } else if (blocks_count < 32768) + j_blocks = 1024; + else if (blocks_count < 262144) + j_blocks = 4096; + else + j_blocks = 8192; + + return j_blocks; +} |