9p: soften invalidation in loose_mode
Eric Van Hensbergen [Wed, 17 Oct 2007 19:31:07 +0000 (14:31 -0500)]
Loose mode in 9p utilizes the page cache without respecting coherency with
the server.  Any writes previously invaldiated the entire mapping for a file.
This patch softens the behavior to only invalidate the region of the actual
write.

Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>

fs/9p/vfs_file.c

index 7166916..ba4b1ca 100644 (file)
@@ -162,15 +162,17 @@ v9fs_file_write(struct file *filp, const char __user * data,
 
        fid = filp->private_data;
        ret = p9_client_uwrite(fid, data, *offset, count);
-       if (ret > 0)
+       if (ret > 0) {
+               invalidate_inode_pages2_range(inode->i_mapping, *offset,
+                                                               *offset+ret);
                *offset += ret;
+       }
 
        if (*offset > inode->i_size) {
                inode->i_size = *offset;
                inode->i_blocks = (inode->i_size + 512 - 1) >> 9;
        }
 
-       invalidate_inode_pages2(inode->i_mapping);
        return ret;
 }