From e7ecdad37eb105e12e3b5e5d5699a4166a29f533 Mon Sep 17 00:00:00 2001 From: Lukas Czerner Date: Mon, 1 Jul 2013 08:12:39 -0400 Subject: [PATCH] --- yaml --- r: 377635 b: refs/heads/master c: e1be3a928ee0b0b2a893695e6dd5c5dbe293af16 h: refs/heads/master i: 377633: f481d79f81a26f678e59b18564813fb1ffa8ff81 377631: f8981d7ac684863ced82230661efa863d00cc651 v: v3 --- [refs] | 2 +- trunk/fs/ext4/inode.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 627643fd2750..3676cd2a525b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42c832debbbf819f6c4ad8601baa559c44105ba4 +refs/heads/master: e1be3a928ee0b0b2a893695e6dd5c5dbe293af16 diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index 09942341dfae..502a9e1f5aa3 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -3424,33 +3424,36 @@ int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode, { struct super_block *sb = inode->i_sb; struct address_space *mapping = inode->i_mapping; - unsigned partial = lstart & (sb->s_blocksize - 1); + unsigned partial_start, partial_end; ext4_fsblk_t start, end; loff_t byte_end = (lstart + length - 1); int err = 0; + partial_start = lstart & (sb->s_blocksize - 1); + partial_end = byte_end & (sb->s_blocksize - 1); + start = lstart >> sb->s_blocksize_bits; end = byte_end >> sb->s_blocksize_bits; /* Handle partial zero within the single block */ - if (start == end) { + if (start == end && + (partial_start || (partial_end != sb->s_blocksize - 1))) { err = ext4_block_zero_page_range(handle, mapping, lstart, length); return err; } /* Handle partial zero out on the start of the range */ - if (partial) { + if (partial_start) { err = ext4_block_zero_page_range(handle, mapping, lstart, sb->s_blocksize); if (err) return err; } /* Handle partial zero out on the end of the range */ - partial = byte_end & (sb->s_blocksize - 1); - if (partial != sb->s_blocksize - 1) + if (partial_end != sb->s_blocksize - 1) err = ext4_block_zero_page_range(handle, mapping, - byte_end - partial, - partial + 1); + byte_end - partial_end, + partial_end + 1); return err; }