From: Chris Mason Make sure to hold the BKL while ending a transaction in the error path or reiserfs_prepare_write. --- 25-akpm/fs/reiserfs/inode.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) diff -puN fs/reiserfs/inode.c~reiserfs-end-trans-bkl fs/reiserfs/inode.c --- 25/fs/reiserfs/inode.c~reiserfs-end-trans-bkl 2004-04-06 20:48:56.513893128 -0700 +++ 25-akpm/fs/reiserfs/inode.c 2004-04-06 20:49:22.496943104 -0700 @@ -2258,8 +2258,11 @@ int reiserfs_prepare_write(struct file * if (th->t_refcount > old_ref) { if (old_ref) th->t_refcount--; - else + else { + reiserfs_write_lock(inode->i_sb); reiserfs_end_persistent_transaction(th); + reiserfs_write_unlock(inode->i_sb); + } } } return ret; _