Add default journal size function

Factor out the code which sets the default journal size and move it
into libext2fs.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
Theodore Ts'o 2007-06-21 11:59:06 -04:00
parent cb0c5d701a
commit 56d1236726
3 changed files with 24 additions and 16 deletions

View File

@ -881,6 +881,7 @@ extern errcode_t ext2fs_add_journal_device(ext2_filsys fs,
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,

View File

@ -247,6 +247,26 @@ errout:
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
*/

View File

@ -251,9 +251,10 @@ void parse_journal_opts(const char *opts)
*/
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;
}
@ -273,21 +274,7 @@ int figure_journal_size(int size, ext2_filsys fs)
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;
}