]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/read_write.c
Merge branch 'omap-clock-fixes' of git://git.pwsan.com/linux-2.6
[linux-2.6-omap-h63xx.git] / fs / read_write.c
index 6d5d8ff238aa50cdce17c4126f775d9af9b00b8f..9d1e76bb9ee147b8236630ba953a53873b1847d4 100644 (file)
@@ -731,10 +731,16 @@ SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec,
        return ret;
 }
 
+static inline loff_t pos_from_hilo(unsigned long high, unsigned long low)
+{
+#define HALF_LONG_BITS (BITS_PER_LONG / 2)
+       return (((loff_t)high << HALF_LONG_BITS) << HALF_LONG_BITS) | low;
+}
+
 SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec,
-               unsigned long, vlen, u32, pos_high, u32, pos_low)
+               unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h)
 {
-       loff_t pos = ((loff_t)pos_high << 32) | pos_low;
+       loff_t pos = pos_from_hilo(pos_h, pos_l);
        struct file *file;
        ssize_t ret = -EBADF;
        int fput_needed;
@@ -757,9 +763,9 @@ SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec,
 }
 
 SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
-               unsigned long, vlen, u32, pos_high, u32, pos_low)
+               unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h)
 {
-       loff_t pos = ((loff_t)pos_high << 32) | pos_low;
+       loff_t pos = pos_from_hilo(pos_h, pos_l);
        struct file *file;
        ssize_t ret = -EBADF;
        int fput_needed;