ext2_filsys journal_dev);
extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size,
int flags);
+extern int ext2fs_default_journal_size(__u64 blocks);
/* openfs.c */
extern errcode_t ext2fs_open(const char *name, int flags, int superblock,
return retval;
}
+/*
+ * 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 ext2fs_default_journal_size(__u64 blocks)
+{
+ if (blocks < 2048)
+ return -1;
+ if (blocks < 32768)
+ return (1024);
+ if (blocks < 256*1024)
+ return (4096);
+ if (blocks < 512*1024)
+ return (8192);
+ if (blocks < 1024*1024)
+ return (16384);
+ return 32768;
+}
+
/*
* This function adds a journal device to a filesystem
*/
*/
int figure_journal_size(int size, ext2_filsys fs)
{
- blk_t j_blocks;
+ int j_blocks;
- if (fs->super->s_blocks_count < 2048) {
+ j_blocks = ext2fs_default_journal_size(fs->super->s_blocks_count);
+ if (j_blocks < 0) {
fputs(_("\nFilesystem too small for a journal\n"), stderr);
return 0;
}
stderr);
exit(1);
}
- return j_blocks;
}
-
- if (fs->super->s_blocks_count < 32768)
- j_blocks = 1400;
- else if (fs->super->s_blocks_count < 256*1024)
- j_blocks = 4096;
- else if (fs->super->s_blocks_count < 512*1024)
- j_blocks = 8192;
- else if (fs->super->s_blocks_count < 1024*1024)
- j_blocks = 16384;
- else
- j_blocks = 32768;
-
-
return j_blocks;
}