From: Nick Piggin Lock ordering fix for the same problem for reiserfs. Signed-off-by: Hugh Dickins Signed-off-by: Nick Piggin Signed-off-by: Andrew Morton --- fs/reiserfs/inode.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff -puN fs/reiserfs/inode.c~reiserfs-convert-to-new-aops-fix fs/reiserfs/inode.c --- a/fs/reiserfs/inode.c~reiserfs-convert-to-new-aops-fix +++ a/fs/reiserfs/inode.c @@ -2695,9 +2695,6 @@ static int reiserfs_write_end(struct fil flush_dcache_page(page); reiserfs_commit_page(inode, page, start, start + copied); - unlock_page(page); - mark_page_accessed(page); - page_cache_release(page); /* generic_commit_write does this for us, but does not update the ** transaction tracking stuff when the size changes. So, we have @@ -2747,6 +2744,9 @@ static int reiserfs_write_end(struct fil } out: + unlock_page(page); + mark_page_accessed(page); + page_cache_release(page); return ret == 0 ? copied : ret; journal_error: @@ -2758,7 +2758,7 @@ static int reiserfs_write_end(struct fil reiserfs_write_unlock(inode->i_sb); } - return ret; + goto out; } int reiserfs_commit_write(struct file *f, struct page *page, _