From c778b3405dd33f559d252f9e22cd41f2ee574235 Mon Sep 17 00:00:00 2001 From: Paolo 'Blaisorblade' Giarrusso Date: Thu, 29 Dec 2005 17:39:57 +0100 Subject: [PATCH] --- yaml --- r: 15351 b: refs/heads/master c: 30f04a4efa73dc80bf3f59f3f19ad5a24ac5ac0a h: refs/heads/master i: 15349: 33625e68b60acc5035d209ab677623ef895926c7 15347: 06099e4df847304ed04ddd9c0b15154579855c6f 15343: a9d413519a19be5befbbf031fc33367fb0e735b5 v: v3 --- [refs] | 2 +- trunk/fs/hostfs/hostfs_kern.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index bd045fd01974..854d4eb96863 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d0a07e3310c947c048bd01d8d0efa0e4fae5ba9 +refs/heads/master: 30f04a4efa73dc80bf3f59f3f19ad5a24ac5ac0a diff --git a/trunk/fs/hostfs/hostfs_kern.c b/trunk/fs/hostfs/hostfs_kern.c index 3aac164c7726..b3ad0bd0312f 100644 --- a/trunk/fs/hostfs/hostfs_kern.c +++ b/trunk/fs/hostfs/hostfs_kern.c @@ -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;