/*
** must be called once on fs mount. calls journal_read for you
*/
-int journal_init(struct super_block *p_s_sb, const char * j_dev_name, int old_format) {
+int journal_init(struct super_block *p_s_sb, const char * j_dev_name, int old_format, unsigned int commit_max_age) {
int num_cnodes = SB_ONDISK_JOURNAL_SIZE(p_s_sb) * 2 ;
struct buffer_head *bhjh;
struct reiserfs_super_block * rs;
SB_JOURNAL_TRANS_MAX(p_s_sb) = le32_to_cpu (jh->jh_journal.jp_journal_trans_max);
SB_JOURNAL_MAX_BATCH(p_s_sb) = le32_to_cpu (jh->jh_journal.jp_journal_max_batch);
+ if (commit_max_age != 0) {
+ SB_JOURNAL_MAX_COMMIT_AGE(p_s_sb) = commit_max_age;
+ } else {
SB_JOURNAL_MAX_COMMIT_AGE(p_s_sb) = le32_to_cpu (jh->jh_journal.jp_journal_max_commit_age);
+ }
SB_JOURNAL_MAX_TRANS_AGE(p_s_sb) = JOURNAL_MAX_TRANS_AGE;
if (SB_JOURNAL_TRANS_MAX(p_s_sb)) {
collection of bitflags defining what
mount options were selected. */
unsigned long * blocks, /* strtol-ed from NNN of resize=NNN */
- char ** jdev_name)
+ char ** jdev_name,
+ unsigned int * commit_max_age)
{
int c;
char * arg = NULL;
{"resize", 'r', 0, 0, 0},
{"jdev", 'j', 0, 0, 0},
{"nolargeio", 'w', 0, 0, 0},
+ {"commit", 'c', 0, 0, 0},
{NULL, 0, 0, 0, 0}
};
}
}
+ if ( c == 'c' ) {
+ char *p = 0;
+ int val = simple_strtoul (arg, &p, 0);
+ /* commit=NNN (time in seconds) */
+ if ( *p != '\0' || val == 0) {
+ printk ("reiserfs_parse_options: bad value %s\n", arg);
+ return 0;
+ }
+ if ( val > 0 ) {
+ *commit_max_age = val;
+ }
+ }
+
if ( c == 'w' ) {
char *p=0;
int val = simple_strtoul (arg, &p, 0);
unsigned long blocks;
unsigned long mount_options = REISERFS_SB(s)->s_mount_opt;
unsigned long safe_mask = 0;
+ unsigned int commit_max_age = 0;
rs = SB_DISK_SUPER_BLOCK (s);
- if (!reiserfs_parse_options(s, arg, &mount_options, &blocks, NULL))
+ if (!reiserfs_parse_options(s, arg, &mount_options, &blocks, NULL, &commit_max_age))
return -EINVAL;
handle_attrs(s);
* the bits we're not allowed to change here */
REISERFS_SB(s)->s_mount_opt = (REISERFS_SB(s)->s_mount_opt & ~safe_mask) | (mount_options & safe_mask);
+ if(commit_max_age != 0) {
+ SB_JOURNAL_MAX_COMMIT_AGE(s) = commit_max_age;
+ }
+
if(blocks) {
int rc = reiserfs_resize(s, blocks);
if (rc != 0)
struct reiserfs_transaction_handle th ;
int old_format = 0;
unsigned long blocks;
+ unsigned int commit_max_age = 0;
int jinit_done = 0 ;
struct reiserfs_iget_args args ;
struct reiserfs_super_block * rs;
REISERFS_SB(s)->s_alloc_options.preallocsize = 9;
jdev_name = NULL;
- if (reiserfs_parse_options (s, (char *) data, &(sbi->s_mount_opt), &blocks, &jdev_name) == 0) {
+ if (reiserfs_parse_options (s, (char *) data, &(sbi->s_mount_opt), &blocks, &jdev_name, &commit_max_age) == 0) {
goto error;
}
#endif
// set_device_ro(s->s_dev, 1) ;
- if(journal_init(s, jdev_name, old_format)) {
+ if( journal_init(s, jdev_name, old_format, commit_max_age) ) {
SPRINTK(silent, "sh-2022: reiserfs_fill_super: unable to initialize journal space\n") ;
goto error ;
} else {
void reiserfs_check_lock_depth(char *caller) ;
void reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, int wait) ;
void reiserfs_restore_prepared_buffer(struct super_block *, struct buffer_head *bh) ;
-int journal_init(struct super_block *, const char * j_dev_name, int old_format) ;
+int journal_init(struct super_block *, const char * j_dev_name, int old_format, unsigned int) ;
int journal_release(struct reiserfs_transaction_handle*, struct super_block *) ;
int journal_release_error(struct reiserfs_transaction_handle*, struct super_block *) ;
int journal_end(struct reiserfs_transaction_handle *, struct super_block *, unsigned long) ;