Whamcloud - gitweb
LU-3784 tune2fs: update i_size in ext2fs_file_write() 56/7556/5
authorNiu Yawei <yawei.niu@intel.com>
Thu, 5 Sep 2013 06:46:10 +0000 (02:46 -0400)
committerNiu Yawei <yawei.niu@intel.com>
Sat, 21 Sep 2013 02:15:40 +0000 (22:15 -0400)
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.

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: I7ec7d1fcd5e9a355ca0a4399e5e937f853f0a612

lib/ext2fs/fileio.c

index 1f7002c..331f349 100644 (file)
@@ -270,7 +270,7 @@ errcode_t ext2fs_file_write(ext2_file_t file, const void *buf,
                            unsigned int nbytes, unsigned int *written)
 {
        ext2_filsys     fs;
-       errcode_t       retval = 0;
+       errcode_t       retval = 0, rc;
        unsigned int    start, c, count = 0;
        const char      *ptr = (const char *) buf;
 
@@ -307,6 +307,13 @@ 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) {
+               rc = ext2fs_file_set_size2(file, file->pos);
+               if (retval == 0)
+                       retval = rc;
+       }
+
        if (written)
                *written = count;
        return retval;