2001-01-17 Theodore Ts'o <tytso@valinux.com>
+ * util.h, util.c (journal_default_size): New function from Andreas
+ Dilger to calculate an appropriate default journal size
+ given a filesystem size.
+
+ * util.c (parse_journal_opts): Allow the creation of a journal as
+ small as 1MB.
+
* dumpe2fs.c (print_journal_information): Use s_first_data_block
to find the correct block to read the journal superblock.
}
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);
"\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;
+}
extern void check_plausibility(const char *device);
extern void parse_journal_opts(const char *opts);
extern void check_mount(const char *device, int force, const char *type);
+extern int journal_default_size(const blk_t blocks_count);