libext2fs: update i_size in ext2fs_file_write()

ext2fs_file_write() needs to update i_size on successful write,
otherwise, ext2fs_file_read() in same open/close cycle will not
be able to read the just written data.

This fixes a bug which results in the the problem of quotacheck
triggered on 'tune2fs -O quota' failed to write back multiple
users/groups accounting information.

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
debian-1.42.9
Niu Yawei 2013-10-08 11:30:10 +08:00 committed by Theodore Ts'o
parent a25487cbaf
commit 470ca046b1
1 changed files with 9 additions and 0 deletions

View File

@ -307,6 +307,15 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf,
}
fail:
/* Update inode size */
if (count != 0 && EXT2_I_SIZE(&file->inode) < file->pos) {
errcode_t rc;
rc = ext2fs_file_set_size2(file, file->pos);
if (retval == 0)
retval = rc;
}
if (written)
*written = count;
return retval;