2009-07-27 20:22:41

by Andreas Dilger

[permalink] [raw]
Subject: [PATCH] JBD2: round commit timer up to avoid uncommitted transaction

jbd and jbd2 fixes: fix jiffie rounding in jbd commit timer setup code.
Rounding down could cause the timer to be fired before the corresponding
transaction has expired. That transaction can stay not committed forever if
no new transaction is created or expicit sync/umount happens.

Signed-off-by: Alex Zhuravlev (Tomas) <[email protected]>
Signed-off-by: Andreas Dilger <[email protected]>

Index: linux-2.6.27.21-0.1/fs/jbd2/transaction.c
===================================================================
--- linux-2.6.27.21-0.1.orig/fs/jbd2/transaction.c 2009-06-10 11:11:41.000000000 -0600
+++ linux-2.6.27.21-0.1/fs/jbd2/transaction.c 2009-06-10 11:12:32.000000000 -0600
@@ -54,7 +54,7 @@
INIT_LIST_HEAD(&transaction->t_inode_list);

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

J_ASSERT(journal->j_running_transaction == NULL);

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.



2009-07-30 17:47:10

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH] JBD2: round commit timer up to avoid uncommitted transaction

> jbd and jbd2 fixes: fix jiffie rounding in jbd commit timer setup code.
> Rounding down could cause the timer to be fired before the corresponding
> transaction has expired. That transaction can stay not committed forever if
> no new transaction is created or expicit sync/umount happens.
>
> Signed-off-by: Alex Zhuravlev (Tomas) <[email protected]>
> Signed-off-by: Andreas Dilger <[email protected]>
Looks fine. You can add:
Acked-by: Jan Kara <[email protected]>
How about a similar JBD fix?

Honza
> Index: linux-2.6.27.21-0.1/fs/jbd2/transaction.c
> ===================================================================
> --- linux-2.6.27.21-0.1.orig/fs/jbd2/transaction.c 2009-06-10 11:11:41.000000000 -0600
> +++ linux-2.6.27.21-0.1/fs/jbd2/transaction.c 2009-06-10 11:12:32.000000000 -0600
> @@ -54,7 +54,7 @@
> INIT_LIST_HEAD(&transaction->t_inode_list);
>
> /* Set up the commit timer for the new transaction. */
> - journal->j_commit_timer.expires = round_jiffies(transaction->t_expires);
> + journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires);
> add_timer(&journal->j_commit_timer);
>
> J_ASSERT(journal->j_running_transaction == NULL);
>
> Cheers, Andreas
> --
> Andreas Dilger
> Sr. Staff Engineer, Lustre Group
> Sun Microsystems of Canada, Inc.
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Jan Kara <[email protected]>
SuSE CR Labs

2009-07-30 18:01:14

by Andreas Dilger

[permalink] [raw]
Subject: Re: [PATCH] JBD2: round commit timer up to avoid uncommitted transaction

On Jul 30, 2009 19:47 +0200, Jan Kara wrote:
> > jbd and jbd2 fixes: fix jiffie rounding in jbd commit timer setup code.
> > Rounding down could cause the timer to be fired before the corresponding
> > transaction has expired. That transaction can stay not committed forever if
> > no new transaction is created or expicit sync/umount happens.
> >
> > Signed-off-by: Alex Zhuravlev (Tomas) <[email protected]>
> > Signed-off-by: Andreas Dilger <[email protected]>
>
> Looks fine. You can add:
> Acked-by: Jan Kara <[email protected]>
> How about a similar JBD fix?

Index: linux-2.6.27.21-0.1/fs/jbd/transaction.c
===================================================================
--- linux-2.6.27.21-0.1.orig/fs/jbd/transaction.c 2009-06-10 11:11:41.000000000 -0600
+++ linux-2.6.27.21-0.1/fs/jbd/transaction.c 2009-06-10 11:12:32.000000000 -0600
@@ -54,7 +54,7 @@
spin_lock_init(&transaction->t_inode_list);

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

J_ASSERT(journal->j_running_transaction == NULL);

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.


2009-07-30 18:11:21

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH] JBD2: round commit timer up to avoid uncommitted transaction

> On Jul 30, 2009 19:47 +0200, Jan Kara wrote:
> > > jbd and jbd2 fixes: fix jiffie rounding in jbd commit timer setup code.
> > > Rounding down could cause the timer to be fired before the corresponding
> > > transaction has expired. That transaction can stay not committed forever if
> > > no new transaction is created or expicit sync/umount happens.
> > >
> > > Signed-off-by: Alex Zhuravlev (Tomas) <[email protected]>
> > > Signed-off-by: Andreas Dilger <[email protected]>
> >
> > Looks fine. You can add:
> > Acked-by: Jan Kara <[email protected]>
> > How about a similar JBD fix?
>
> Index: linux-2.6.27.21-0.1/fs/jbd/transaction.c
> ===================================================================
> --- linux-2.6.27.21-0.1.orig/fs/jbd/transaction.c 2009-06-10 11:11:41.000000000 -0600
> +++ linux-2.6.27.21-0.1/fs/jbd/transaction.c 2009-06-10 11:12:32.000000000 -0600
> @@ -54,7 +54,7 @@
> spin_lock_init(&transaction->t_inode_list);
>
> /* Set up the commit timer for the new transaction. */
> - journal->j_commit_timer.expires = round_jiffies(transaction->t_expires);
> + journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires);
> add_timer(&journal->j_commit_timer);
>
> J_ASSERT(journal->j_running_transaction == NULL);
Thanks. Copied over the changelog, added your Signed-off-by and merged
into my tree...

Honza
--
Jan Kara <[email protected]>
SuSE CR Labs

2009-08-11 13:02:41

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH] JBD2: round commit timer up to avoid uncommitted transaction

On Mon, Jul 27, 2009 at 02:22:09PM -0600, Andreas Dilger wrote:
> jbd and jbd2 fixes: fix jiffie rounding in jbd commit timer setup code.
> Rounding down could cause the timer to be fired before the corresponding
> transaction has expired. That transaction can stay not committed forever if
> no new transaction is created or expicit sync/umount happens.
>
> Signed-off-by: Alex Zhuravlev (Tomas) <[email protected]>
> Signed-off-by: Andreas Dilger <[email protected]>

Added to the ext4 patch queue; apologies for the delay.

- Ted