On Sunday 26 February 2006 05:33, Francesco Biscani wrote:
> On Saturday 25 February 2006 22:09, Alexander Zarochentsev wrote:
> > would you please try the attached patch.
>
> I'm having a similar problem on 2.6.16-rc4 + reiser4 from -mm1. I
> will be testing the attached patch.

please use better version of the patch (attached).

> Regards,
>
>   Francesco

-- 
Alex.
 fs/reiser4/plugin/file/file.c            |    9 +++++----
 fs/reiser4/plugin/item/extent_file_ops.c |    2 +-
 fs/reiser4/vfs_ops.c                     |    5 ++++-
 3 files changed, 10 insertions(+), 6 deletions(-)

Index: linux-2.6.16-rc3-mm1/fs/reiser4/plugin/file/file.c
===================================================================
--- linux-2.6.16-rc3-mm1.orig/fs/reiser4/plugin/file/file.c
+++ linux-2.6.16-rc3-mm1/fs/reiser4/plugin/file/file.c
@@ -2454,6 +2454,7 @@ ssize_t write_unix_file(struct file *fil
 
 	if (inode_get_flag(inode, REISER4_PART_CONV)) {
 		/* we can not currently write to a file which is partially converted */
+		txn_restart(ctx);
 		get_exclusive_access(uf_info);
 		result = finish_conversion(inode);
 		drop_exclusive_access(uf_info);
@@ -2481,6 +2482,7 @@ ssize_t write_unix_file(struct file *fil
 
 		   3) convert file to extents to not enter here on each write
 		   to mmaped file */
+		txn_restart(ctx);
 		get_exclusive_access(uf_info);
 		result = check_pages_unix_file(file, inode);
 		drop_exclusive_access(uf_info);
@@ -2535,14 +2537,13 @@ ssize_t write_unix_file(struct file *fil
 	while (left > 0) {
 		int excl = 0;
 
-		/* getting exclusive or not exclusive access requires no
-		   transaction open */
-		txn_restart_current();
-
 		/* faultin user page */
 		fault_in_pages_readable(buf,
 					left > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : left);
 
+		/* getting exclusive or not exclusive access requires no
+		   transaction open */
+		txn_restart(ctx);
 		if (inode->i_size == 0) {
 			get_exclusive_access(uf_info);
 			excl = 1;
Index: linux-2.6.16-rc3-mm1/fs/reiser4/vfs_ops.c
===================================================================
--- linux-2.6.16-rc3-mm1.orig/fs/reiser4/vfs_ops.c
+++ linux-2.6.16-rc3-mm1/fs/reiser4/vfs_ops.c
@@ -209,8 +209,11 @@ void writeout(struct super_block *sb, st
 
 void reiser4_throttle_write(struct inode *inode)
 {
-	txn_restart_current();
+	reiser4_context *ctx = get_current_context();
+
+	txn_restart(ctx);
 	balance_dirty_pages_ratelimited(inode->i_mapping);
+	txn_restart(ctx);
 }
 
 const char *REISER4_SUPER_MAGIC_STRING = "ReIsEr4";
Index: linux-2.6.16-rc3-mm1/fs/reiser4/plugin/item/extent_file_ops.c
===================================================================
--- linux-2.6.16-rc3-mm1.orig/fs/reiser4/plugin/item/extent_file_ops.c
+++ linux-2.6.16-rc3-mm1/fs/reiser4/plugin/item/extent_file_ops.c
@@ -803,7 +803,7 @@ extent_balance_dirty_pages(struct inode 
 		fault_in_pages_readable(f->data,
 					f->length > PAGE_CACHE_SIZE ?
 					PAGE_CACHE_SIZE : f->length);
-
+		txn_restart_current();
 		if (excl)
 			get_exclusive_access(uf_info);
 		else

Reply via email to