diff options
Diffstat (limited to 'fs/reiserfs/inode.c')
-rw-r--r-- | fs/reiserfs/inode.c | 18 |
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 | ||