Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76948
b: refs/heads/master
c: d147b3d
h: refs/heads/master
v: v3
  • Loading branch information
Mark Fasheh committed Jan 25, 2008
1 parent e6d7820 commit c9eee82
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0957f00796157564281ea6ff2cea7ef4f897775a
refs/heads/master: d147b3d630edef1d34de6ea819787a1ac1b8603b
11 changes: 11 additions & 0 deletions trunk/Documentation/filesystems/ocfs2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,14 @@ data=writeback Data ordering is not preserved, data may be written
preferred_slot=0(*) During mount, try to use this filesystem slot first. If
it is in use by another node, the first empty one found
will be chosen. Invalid values will be ignored.
commit=nrsec (*) Ocfs2 can be told to sync all its data and metadata
every 'nrsec' seconds. The default value is 5 seconds.
This means that if you lose your power, you will lose
as much as the latest 5 seconds of work (your
filesystem will not be damaged though, thanks to the
journaling). This default value (or any low value)
will hurt performance, but it's good for data-safety.
Setting it to 0 will have the same effect as leaving
it at the default (5 seconds).
Setting it to very large values will improve
performance.
8 changes: 6 additions & 2 deletions trunk/fs/ocfs2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,14 +313,18 @@ int ocfs2_journal_dirty_data(handle_t *handle,
return err;
}

#define OCFS2_DEFAULT_COMMIT_INTERVAL (HZ * 5)
#define OCFS2_DEFAULT_COMMIT_INTERVAL (HZ * JBD_DEFAULT_MAX_COMMIT_AGE)

void ocfs2_set_journal_params(struct ocfs2_super *osb)
{
journal_t *journal = osb->journal->j_journal;
unsigned long commit_interval = OCFS2_DEFAULT_COMMIT_INTERVAL;

if (osb->osb_commit_interval)
commit_interval = osb->osb_commit_interval;

spin_lock(&journal->j_state_lock);
journal->j_commit_interval = OCFS2_DEFAULT_COMMIT_INTERVAL;
journal->j_commit_interval = commit_interval;
if (osb->s_mount_opt & OCFS2_MOUNT_BARRIER)
journal->j_flags |= JFS_BARRIER;
else
Expand Down
1 change: 1 addition & 0 deletions trunk/fs/ocfs2/ocfs2.h
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ struct ocfs2_super
wait_queue_head_t checkpoint_event;
atomic_t needs_checkpoint;
struct ocfs2_journal *journal;
unsigned long osb_commit_interval;

enum ocfs2_local_alloc_state local_alloc_state;
struct buffer_head *local_alloc_bh;
Expand Down
23 changes: 23 additions & 0 deletions trunk/fs/ocfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ MODULE_LICENSE("GPL");

struct mount_options
{
unsigned long commit_interval;
unsigned long mount_opt;
unsigned int atime_quantum;
signed short slot;
Expand Down Expand Up @@ -149,6 +150,7 @@ enum {
Opt_data_writeback,
Opt_atime_quantum,
Opt_slot,
Opt_commit,
Opt_err,
};

Expand All @@ -164,6 +166,7 @@ static match_table_t tokens = {
{Opt_data_writeback, "data=writeback"},
{Opt_atime_quantum, "atime_quantum=%u"},
{Opt_slot, "preferred_slot=%u"},
{Opt_commit, "commit=%u"},
{Opt_err, NULL}
};

Expand Down Expand Up @@ -442,6 +445,8 @@ static int ocfs2_remount(struct super_block *sb, int *flags, char *data)
osb->s_mount_opt = parsed_options.mount_opt;
osb->s_atime_quantum = parsed_options.atime_quantum;
osb->preferred_slot = parsed_options.slot;
if (parsed_options.commit_interval)
osb->osb_commit_interval = parsed_options.commit_interval;

if (!ocfs2_is_hard_readonly(osb))
ocfs2_set_journal_params(osb);
Expand Down Expand Up @@ -596,6 +601,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
osb->s_mount_opt = parsed_options.mount_opt;
osb->s_atime_quantum = parsed_options.atime_quantum;
osb->preferred_slot = parsed_options.slot;
osb->osb_commit_interval = parsed_options.commit_interval;

sb->s_magic = OCFS2_SUPER_MAGIC;

Expand Down Expand Up @@ -746,6 +752,7 @@ static int ocfs2_parse_options(struct super_block *sb,
mlog_entry("remount: %d, options: \"%s\"\n", is_remount,
options ? options : "(none)");

mopt->commit_interval = 0;
mopt->mount_opt = 0;
mopt->atime_quantum = OCFS2_DEFAULT_ATIME_QUANTUM;
mopt->slot = OCFS2_INVALID_SLOT;
Expand Down Expand Up @@ -815,6 +822,18 @@ static int ocfs2_parse_options(struct super_block *sb,
if (option)
mopt->slot = (s16)option;
break;
case Opt_commit:
option = 0;
if (match_int(&args[0], &option)) {
status = 0;
goto bail;
}
if (option < 0)
return 0;
if (option == 0)
option = JBD_DEFAULT_MAX_COMMIT_AGE;
mopt->commit_interval = HZ * option;
break;
default:
mlog(ML_ERROR,
"Unrecognized mount option \"%s\" "
Expand Down Expand Up @@ -863,6 +882,10 @@ static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);

if (osb->osb_commit_interval)
seq_printf(s, ",commit=%u",
(unsigned) (osb->osb_commit_interval / HZ));

return 0;
}

Expand Down

0 comments on commit c9eee82

Please sign in to comment.