Skip to content

Commit

Permalink
[PATCH] jbd: embed j_commit_timer in journal struct
Browse files Browse the repository at this point in the history
The kjournald timer is currently on the kernel thread's stack and the journal
structure points at it.  Save a pointer hop by moving the timer into the
journal structure.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andrew Morton authored and Linus Torvalds committed Mar 25, 2006
1 parent 1d9b7d9 commit e3df189
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 13 deletions.
19 changes: 9 additions & 10 deletions fs/jbd/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,18 +111,17 @@ static void commit_timeout(unsigned long __data)

static int kjournald(void *arg)
{
journal_t *journal = (journal_t *) arg;
journal_t *journal = arg;
transaction_t *transaction;
struct timer_list timer;

daemonize("kjournald");

/* Set up an interval timer which can be used to trigger a
commit wakeup after the commit interval expires */
init_timer(&timer);
timer.data = (unsigned long) current;
timer.function = commit_timeout;
journal->j_commit_timer = &timer;
/*
* Set up an interval timer which can be used to trigger a commit wakeup
* after the commit interval expires
*/
setup_timer(&journal->j_commit_timer, commit_timeout,
(unsigned long)current);

/* Record that the journal thread is running */
journal->j_task = current;
Expand All @@ -146,7 +145,7 @@ static int kjournald(void *arg)
if (journal->j_commit_sequence != journal->j_commit_request) {
jbd_debug(1, "OK, requests differ\n");
spin_unlock(&journal->j_state_lock);
del_timer_sync(journal->j_commit_timer);
del_timer_sync(&journal->j_commit_timer);
journal_commit_transaction(journal);
spin_lock(&journal->j_state_lock);
goto loop;
Expand Down Expand Up @@ -203,7 +202,7 @@ static int kjournald(void *arg)

end_loop:
spin_unlock(&journal->j_state_lock);
del_timer_sync(journal->j_commit_timer);
del_timer_sync(&journal->j_commit_timer);
journal->j_task = NULL;
wake_up(&journal->j_wait_done_commit);
jbd_debug(1, "Journal thread exiting.\n");
Expand Down
4 changes: 2 additions & 2 deletions fs/jbd/transaction.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ get_transaction(journal_t *journal, transaction_t *transaction)
spin_lock_init(&transaction->t_handle_lock);

/* Set up the commit timer for the new transaction. */
journal->j_commit_timer->expires = transaction->t_expires;
add_timer(journal->j_commit_timer);
journal->j_commit_timer.expires = transaction->t_expires;
add_timer(&journal->j_commit_timer);

J_ASSERT(journal->j_running_transaction == NULL);
journal->j_running_transaction = transaction;
Expand Down
4 changes: 3 additions & 1 deletion include/linux/jbd.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
#include <linux/stddef.h>
#include <linux/bit_spinlock.h>
#include <linux/mutex.h>
#include <linux/timer.h>

#include <asm/semaphore.h>
#endif

Expand Down Expand Up @@ -787,7 +789,7 @@ struct journal_s
unsigned long j_commit_interval;

/* The timer used to wakeup the commit thread: */
struct timer_list *j_commit_timer;
struct timer_list j_commit_timer;

/*
* The revoke table: maintains the list of revoked blocks in the
Expand Down

0 comments on commit e3df189

Please sign in to comment.