]> Pileus Git - ~andy/linux/blobdiff - fs/9p/vfs_file.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[~andy/linux] / fs / 9p / vfs_file.c
index 3337d58d0fc5883a0a6c19c2352cf3e639cbb86a..ffed55817f0cd8f5cd1f6560e66805935419835a 100644 (file)
@@ -91,7 +91,8 @@ int v9fs_file_open(struct inode *inode, struct file *file)
 
        file->private_data = fid;
        mutex_lock(&v9inode->v_mutex);
-       if (v9ses->cache && !v9inode->writeback_fid) {
+       if (v9ses->cache && !v9inode->writeback_fid &&
+           ((file->f_flags & O_ACCMODE) != O_RDONLY)) {
                /*
                 * clone a fid and add it to writeback_fid
                 * we do it during open time instead of
@@ -507,9 +508,12 @@ v9fs_file_write(struct file *filp, const char __user * data,
        if (!count)
                goto out;
 
-       return v9fs_file_write_internal(filp->f_path.dentry->d_inode,
+       retval = v9fs_file_write_internal(filp->f_path.dentry->d_inode,
                                        filp->private_data,
-                                       data, count, offset, 1);
+                                       data, count, &origin, 1);
+       /* update offset on successful write */
+       if (retval > 0)
+               *offset = origin;
 out:
        return retval;
 }