X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fread_write.c;h=bf99867df2aa222a30555632e83ba8b351d5900a;hb=b4e5fe4ac713ec66470b6fc3eeb828603b8ed76a;hp=7bf9572027bb25d2fb141b2967307b26522ad646;hpb=a91482bdcc2e0f6035702e46f1b99043a0893346;p=linux-2.6.git diff --git a/fs/read_write.c b/fs/read_write.c index 7bf957202..bf99867df 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -113,12 +113,9 @@ loff_t vfs_llseek(struct file *file, loff_t offset, int origin) { loff_t (*fn)(struct file *, loff_t, int); - fn = no_llseek; - if (file->f_mode & FMODE_LSEEK) { - fn = default_llseek; - if (file->f_op && file->f_op->llseek) - fn = file->f_op->llseek; - } + fn = default_llseek; + if (file->f_op && file->f_op->llseek) + fn = file->f_op->llseek; return fn(file, offset, origin); } EXPORT_SYMBOL(vfs_llseek); @@ -269,16 +266,6 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ EXPORT_SYMBOL(vfs_write); -static inline loff_t file_pos_read(struct file *file) -{ - return file->f_pos; -} - -static inline void file_pos_write(struct file *file, loff_t pos) -{ - file->f_pos = pos; -} - asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) { struct file *file; @@ -287,9 +274,7 @@ asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) file = fget_light(fd, &fput_needed); if (file) { - loff_t pos = file_pos_read(file); - ret = vfs_read(file, buf, count, &pos); - file_pos_write(file, pos); + ret = vfs_read(file, buf, count, &file->f_pos); fput_light(file, fput_needed); } @@ -304,9 +289,7 @@ asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t co file = fget_light(fd, &fput_needed); if (file) { - loff_t pos = file_pos_read(file); - ret = vfs_write(file, buf, count, &pos); - file_pos_write(file, pos); + ret = vfs_write(file, buf, count, &file->f_pos); fput_light(file, fput_needed); } @@ -325,9 +308,7 @@ asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, file = fget_light(fd, &fput_needed); if (file) { - ret = -ESPIPE; - if (file->f_mode & FMODE_PREAD) - ret = vfs_read(file, buf, count, &pos); + ret = vfs_read(file, buf, count, &pos); fput_light(file, fput_needed); } @@ -346,9 +327,7 @@ asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, file = fget_light(fd, &fput_needed); if (file) { - ret = -ESPIPE; - if (file->f_mode & FMODE_PWRITE) - ret = vfs_write(file, buf, count, &pos); + ret = vfs_write(file, buf, count, &pos); fput_light(file, fput_needed); } @@ -532,9 +511,7 @@ sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) file = fget_light(fd, &fput_needed); if (file) { - loff_t pos = file_pos_read(file); - ret = vfs_readv(file, vec, vlen, &pos); - file_pos_write(file, pos); + ret = vfs_readv(file, vec, vlen, &file->f_pos); fput_light(file, fput_needed); } @@ -550,9 +527,7 @@ sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) file = fget_light(fd, &fput_needed); if (file) { - loff_t pos = file_pos_read(file); - ret = vfs_writev(file, vec, vlen, &pos); - file_pos_write(file, pos); + ret = vfs_writev(file, vec, vlen, &file->f_pos); fput_light(file, fput_needed); } @@ -583,12 +558,8 @@ static ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos, goto fput_in; if (!in_file->f_op || !in_file->f_op->sendfile) goto fput_in; - retval = -ESPIPE; if (!ppos) ppos = &in_file->f_pos; - else - if (!(in_file->f_mode & FMODE_PREAD)) - goto fput_in; retval = locks_verify_area(FLOCK_VERIFY_READ, in_inode, in_file, *ppos, count); if (retval) goto fput_in;