aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/reiserfs/inode.c')
-rw-r--r--fs/reiserfs/inode.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index ff291c973a56..d76ee6c4f9b8 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -33,6 +33,8 @@ void reiserfs_delete_inode(struct inode *inode)
33 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb); 33 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb);
34 struct reiserfs_transaction_handle th; 34 struct reiserfs_transaction_handle th;
35 35
36 truncate_inode_pages(&inode->i_data, 0);
37
36 reiserfs_write_lock(inode->i_sb); 38 reiserfs_write_lock(inode->i_sb);
37 39
38 /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ 40 /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */
@@ -2637,6 +2639,12 @@ static int reiserfs_commit_write(struct file *f, struct page *page,
2637 } 2639 }
2638 reiserfs_update_inode_transaction(inode); 2640 reiserfs_update_inode_transaction(inode);
2639 inode->i_size = pos; 2641 inode->i_size = pos;
2642 /*
2643 * this will just nest into our transaction. It's important
2644 * to use mark_inode_dirty so the inode gets pushed around on the
2645 * dirty lists, and so that O_SYNC works as expected
2646 */
2647 mark_inode_dirty(inode);
2640 reiserfs_update_sd(&myth, inode); 2648 reiserfs_update_sd(&myth, inode);
2641 update_sd = 1; 2649 update_sd = 1;
2642 ret = journal_end(&myth, inode->i_sb, 1); 2650 ret = journal_end(&myth, inode->i_sb, 1);
@@ -2647,21 +2655,13 @@ static int reiserfs_commit_write(struct file *f, struct page *page,
2647 if (th) { 2655 if (th) {
2648 reiserfs_write_lock(inode->i_sb); 2656 reiserfs_write_lock(inode->i_sb);
2649 if (!update_sd) 2657 if (!update_sd)
2650 reiserfs_update_sd(th, inode); 2658 mark_inode_dirty(inode);
2651 ret = reiserfs_end_persistent_transaction(th); 2659 ret = reiserfs_end_persistent_transaction(th);
2652 reiserfs_write_unlock(inode->i_sb); 2660 reiserfs_write_unlock(inode->i_sb);
2653 if (ret) 2661 if (ret)
2654 goto out; 2662 goto out;
2655 } 2663 }
2656 2664
2657 /* we test for O_SYNC here so we can commit the transaction
2658 ** for any packed tails the file might have had
2659 */
2660 if (f && (f->f_flags & O_SYNC)) {
2661 reiserfs_write_lock(inode->i_sb);
2662 ret = reiserfs_commit_for_inode(inode);
2663 reiserfs_write_unlock(inode->i_sb);
2664 }
2665 out: 2665 out:
2666 return ret; 2666 return ret;
2667 2667