2012-01-07 04:48:25

by djwong

[permalink] [raw]
Subject: [PATCH] libext2fs: When truncating file, punch out blocks at end

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 <[email protected]>
---
lib/ext2fs/fileio.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)


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,



2012-02-15 20:12:48

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH] libext2fs: When truncating file, punch out blocks at end

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 <[email protected]>

Thanks, applied.

- Ted