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