diff options
author | Jan Kara <jack@suse.cz> | 2013-06-04 12:35:11 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-06-04 12:35:11 -0400 |
commit | 8f7d89f36829b9061a14f9040cda1372f264c4fe (patch) | |
tree | 2864747255fb15044c376519c0cb10bb223e9361 /fs/jbd2/commit.c | |
parent | f29fad72105287e6899d9128a9d494514f220e77 (diff) | |
download | linux-stable-8f7d89f36829b9061a14f9040cda1372f264c4fe.tar.gz linux-stable-8f7d89f36829b9061a14f9040cda1372f264c4fe.tar.bz2 linux-stable-8f7d89f36829b9061a14f9040cda1372f264c4fe.zip |
jbd2: transaction reservation support
In some cases we cannot start a transaction because of locking
constraints and passing started transaction into those places is not
handy either because we could block transaction commit for too long.
Transaction reservation is designed to solve these issues. It
reserves a handle with given number of credits in the journal and the
handle can be later attached to the running transaction without
blocking on commit or checkpointing. Reserved handles do not block
transaction commit in any way, they only reduce maximum size of the
running transaction (because we have to always be prepared to
accomodate request for attaching reserved handle).
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2/commit.c')
-rw-r--r-- | fs/jbd2/commit.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index d73a0d808ec1..cfbce48adc0b 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -523,6 +523,12 @@ void jbd2_journal_commit_transaction(journal_t *journal) */ jbd2_journal_switch_revoke_table(journal); + /* + * Reserved credits cannot be claimed anymore, free them + */ + atomic_sub(atomic_read(&journal->j_reserved_credits), + &commit_transaction->t_outstanding_credits); + trace_jbd2_commit_flushing(journal, commit_transaction); stats.run.rs_flushing = jiffies; stats.run.rs_locked = jbd2_time_diff(stats.run.rs_locked, |