Patchwork JBD2: round commit timer up to avoid uncommitted transaction

login
register
mail settings
Submitter Andreas Dilger
Date July 27, 2009, 8:22 p.m.
Message ID <20090727202209.GU4231@webber.adilger.int>
Download mbox | patch
Permalink /patch/30279/
State New
Headers show

Comments

Andreas Dilger - July 27, 2009, 8:22 p.m.
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) <alex.zhuravlev@sun.com>
Signed-off-by: Andreas Dilger <adilger@sun.com>


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 majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jan Kara - July 30, 2009, 5:47 p.m.
> 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) <alex.zhuravlev@sun.com>
> Signed-off-by: Andreas Dilger <adilger@sun.com>
  Looks fine. You can add:
Acked-by: Jan Kara <jack@suse.cz>
  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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Theodore Ts'o - Aug. 11, 2009, 2:52 a.m.
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) <alex.zhuravlev@sun.com>
> Signed-off-by: Andreas Dilger <adilger@sun.com>

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

      	     	  	       		     - Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

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);