aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/alloc.c')
-rw-r--r--fs/ocfs2/alloc.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 0eab0d328289..412a2888a3ed 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -3487,6 +3487,7 @@ static int ocfs2_grab_eof_pages(struct inode *inode, loff_t isize, struct page *
3487{ 3487{
3488 int i, numpages = 0, ret = 0; 3488 int i, numpages = 0, ret = 0;
3489 unsigned int csize = OCFS2_SB(inode->i_sb)->s_clustersize; 3489 unsigned int csize = OCFS2_SB(inode->i_sb)->s_clustersize;
3490 unsigned int ext_flags;
3490 struct super_block *sb = inode->i_sb; 3491 struct super_block *sb = inode->i_sb;
3491 struct address_space *mapping = inode->i_mapping; 3492 struct address_space *mapping = inode->i_mapping;
3492 unsigned long index; 3493 unsigned long index;
@@ -3499,7 +3500,7 @@ static int ocfs2_grab_eof_pages(struct inode *inode, loff_t isize, struct page *
3499 goto out; 3500 goto out;
3500 3501
3501 ret = ocfs2_extent_map_get_blocks(inode, isize >> sb->s_blocksize_bits, 3502 ret = ocfs2_extent_map_get_blocks(inode, isize >> sb->s_blocksize_bits,
3502 phys, NULL); 3503 phys, NULL, &ext_flags);
3503 if (ret) { 3504 if (ret) {
3504 mlog_errno(ret); 3505 mlog_errno(ret);
3505 goto out; 3506 goto out;
@@ -3509,6 +3510,11 @@ static int ocfs2_grab_eof_pages(struct inode *inode, loff_t isize, struct page *
3509 if (*phys == 0) 3510 if (*phys == 0)
3510 goto out; 3511 goto out;
3511 3512
3513 /* Tail is marked as unwritten, we can count on write to zero
3514 * in that case. */
3515 if (ext_flags & OCFS2_EXT_UNWRITTEN)
3516 goto out;
3517
3512 next_cluster_bytes = ocfs2_align_bytes_to_clusters(inode->i_sb, isize); 3518 next_cluster_bytes = ocfs2_align_bytes_to_clusters(inode->i_sb, isize);
3513 index = isize >> PAGE_CACHE_SHIFT; 3519 index = isize >> PAGE_CACHE_SHIFT;
3514 do { 3520 do {
@@ -3579,9 +3585,6 @@ int ocfs2_zero_tail_for_truncate(struct inode *inode, handle_t *handle,
3579 goto out; 3585 goto out;
3580 } 3586 }
3581 3587
3582 /*
3583 * Truncate on an i_size boundary - nothing more to do.
3584 */
3585 if (numpages == 0) 3588 if (numpages == 0)
3586 goto out; 3589 goto out;
3587 3590