Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / fs / read_write.c
index 30df848b7451468649d86ed9080b99df9fbf99cb..177ccc3d405a33b425998e400b105418d8f537a4 100644 (file)
@@ -478,8 +478,8 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t
        return ret;
 }
 
-ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
-                   loff_t *pos)
+static ssize_t __vfs_write(struct file *file, const char __user *p,
+                          size_t count, loff_t *pos)
 {
        if (file->f_op->write)
                return file->f_op->write(file, p, count, pos);
@@ -1238,6 +1238,9 @@ COMPAT_SYSCALL_DEFINE5(preadv64v2, unsigned long, fd,
                const struct compat_iovec __user *,vec,
                unsigned long, vlen, loff_t, pos, rwf_t, flags)
 {
+       if (pos == -1)
+               return do_compat_readv(fd, vec, vlen, flags);
+
        return do_compat_preadv64(fd, vec, vlen, pos, flags);
 }
 #endif
@@ -1344,6 +1347,9 @@ COMPAT_SYSCALL_DEFINE5(pwritev64v2, unsigned long, fd,
                const struct compat_iovec __user *,vec,
                unsigned long, vlen, loff_t, pos, rwf_t, flags)
 {
+       if (pos == -1)
+               return do_compat_writev(fd, vec, vlen, flags);
+
        return do_compat_pwritev64(fd, vec, vlen, pos, flags);
 }
 #endif