|
@@ -501,11 +501,16 @@ int hostfs_commit_write(struct file *file, struct page *page, unsigned from,
|
|
|
long long start;
|
|
|
int err = 0;
|
|
|
|
|
|
- start = (long long) (page->index << PAGE_CACHE_SHIFT) + from;
|
|
|
+ start = (((long long) page->index) << PAGE_CACHE_SHIFT) + from;
|
|
|
buffer = kmap(page);
|
|
|
err = write_file(FILE_HOSTFS_I(file)->fd, &start, buffer + from,
|
|
|
to - from);
|
|
|
if(err > 0) err = 0;
|
|
|
+
|
|
|
+ /* Actually, if !err, write_file has added to-from to start, so, despite
|
|
|
+ * the appearance, we are comparing i_size against the _last_ written
|
|
|
+ * location, as we should. */
|
|
|
+
|
|
|
if(!err && (start > inode->i_size))
|
|
|
inode->i_size = start;
|
|
|
|