Patchwork libext2fs: When truncating file, punch out blocks at end

login
register
mail settings
Submitter Darrick J. Wong
Date Jan. 7, 2012, 4:47 a.m.
Message ID <20120107044737.3366.45151.stgit@elm3c44.beaverton.ibm.com>
Download mbox | patch
Permalink /patch/134751/
State Accepted
Headers show

Comments

Darrick J. Wong - Jan. 7, 2012, 4:47 a.m.
Currently, ext2fs_file_set_size2 punches out data blocks between the end of the
file and infinity when truncate_block <= old_truncate (i.e. when you've made
the file longer).  This is not a useful behavior, particularly since it *fails*
to punch out the data blocks when the file is shortened (i.e. truncate_block <
old_truncate).  This seems to be the result of the test being backwards, so fix
the code to punch only when the file is getting shorter.

Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
---
 lib/ext2fs/fileio.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)



--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Theodore Ts'o - Feb. 15, 2012, 8:12 p.m.
On Fri, Jan 06, 2012 at 08:47:37PM -0800, Darrick J. Wong wrote:
> Currently, ext2fs_file_set_size2 punches out data blocks between the
> end of the file and infinity when truncate_block <= old_truncate
> (i.e. when you've made the file longer).  This is not a useful
> behavior, particularly since it *fails* to punch out the data blocks
> when the file is shortened (i.e. truncate_block < old_truncate).
> This seems to be the result of the test being backwards, so fix the
> code to punch only when the file is getting shorter.
> 
> Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>

Thanks, applied.

						- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c
index d56f5b5..8751635 100644
--- a/lib/ext2fs/fileio.c
+++ b/lib/ext2fs/fileio.c
@@ -389,7 +389,7 @@  errcode_t ext2fs_file_set_size2(ext2_file_t file, ext2_off64_t size)
 			return retval;
 	}
 
-	if (truncate_block <= old_truncate)
+	if (truncate_block >= old_truncate)
 		return 0;
 
 	return ext2fs_punch(file->fs, file->ino, &file->inode, 0,