Lines Matching full:file
10 #include <linux/file.h>
33 static inline int unsigned_offsets(struct file *file) in unsigned_offsets() argument
35 return file->f_mode & FMODE_UNSIGNED_OFFSET; in unsigned_offsets()
38 static loff_t lseek_execute(struct file *file, struct inode *inode, in lseek_execute() argument
41 if (offset < 0 && !unsigned_offsets(file)) in lseek_execute()
46 if (offset != file->f_pos) { in lseek_execute()
47 file->f_pos = offset; in lseek_execute()
48 file->f_version = 0; in lseek_execute()
55 * @file: file structure to seek on
56 * @offset: file offset to seek to
58 * @size: max size of file system
61 * file size.
69 generic_file_llseek_size(struct file *file, loff_t offset, int origin, in generic_file_llseek_size() argument
72 struct inode *inode = file->f_mapping->host; in generic_file_llseek_size()
82 * f_pos value back to the file because a concurrent read(), in generic_file_llseek_size()
86 return file->f_pos; in generic_file_llseek_size()
92 spin_lock(&file->f_lock); in generic_file_llseek_size()
93 offset = lseek_execute(file, inode, file->f_pos + offset, in generic_file_llseek_size()
95 spin_unlock(&file->f_lock); in generic_file_llseek_size()
99 * In the generic case the entire file is data, so as long as in generic_file_llseek_size()
100 * offset isn't at the end of the file then the offset is data. in generic_file_llseek_size()
107 * There is a virtual hole at the end of the file, so as long as in generic_file_llseek_size()
116 return lseek_execute(file, inode, offset, maxsize); in generic_file_llseek_size()
122 * @file: file structure to seek on
123 * @offset: file offset to seek to
127 * filesystems. It just updates the file offset to the value specified by
130 loff_t generic_file_llseek(struct file *file, loff_t offset, int origin) in generic_file_llseek() argument
132 struct inode *inode = file->f_mapping->host; in generic_file_llseek()
134 return generic_file_llseek_size(file, offset, origin, in generic_file_llseek()
141 * @file: file structure to seek on
142 * @offset: file offset to seek to
146 * userspace expects the seek to succeed but the (device) file is actually not
150 loff_t noop_llseek(struct file *file, loff_t offset, int origin) in noop_llseek() argument
152 return file->f_pos; in noop_llseek()
156 loff_t no_llseek(struct file *file, loff_t offset, int origin) in no_llseek() argument
162 loff_t default_llseek(struct file *file, loff_t offset, int origin) in default_llseek() argument
164 struct inode *inode = file->f_path.dentry->d_inode; in default_llseek()
174 retval = file->f_pos; in default_llseek()
177 offset += file->f_pos; in default_llseek()
181 * In the generic case the entire file is data, so as in default_llseek()
182 * long as offset isn't at the end of the file then the in default_llseek()
192 * There is a virtual hole at the end of the file, so in default_llseek()
204 if (offset >= 0 || unsigned_offsets(file)) { in default_llseek()
205 if (offset != file->f_pos) { in default_llseek()
206 file->f_pos = offset; in default_llseek()
207 file->f_version = 0; in default_llseek()
217 loff_t vfs_llseek(struct file *file, loff_t offset, int origin) in vfs_llseek() argument
219 loff_t (*fn)(struct file *, loff_t, int); in vfs_llseek()
222 if (file->f_mode & FMODE_LSEEK) { in vfs_llseek()
223 if (file->f_op && file->f_op->llseek) in vfs_llseek()
224 fn = file->f_op->llseek; in vfs_llseek()
226 return fn(file, offset, origin); in vfs_llseek()
233 struct file * file; in SYSCALL_DEFINE3() local
237 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE3()
238 if (!file) in SYSCALL_DEFINE3()
243 loff_t res = vfs_llseek(file, offset, origin); in SYSCALL_DEFINE3()
248 fput_light(file, fput_needed); in SYSCALL_DEFINE3()
259 struct file * file; in SYSCALL_DEFINE5() local
264 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE5()
265 if (!file) in SYSCALL_DEFINE5()
272 offset = vfs_llseek(file, ((loff_t) offset_high << 32) | offset_low, in SYSCALL_DEFINE5()
282 fput_light(file, fput_needed); in SYSCALL_DEFINE5()
294 int rw_verify_area(int read_write, struct file *file, loff_t *ppos, size_t count) in rw_verify_area() argument
300 inode = file->f_path.dentry->d_inode; in rw_verify_area()
305 if (!unsigned_offsets(file)) in rw_verify_area()
310 if (!unsigned_offsets(file)) in rw_verify_area()
317 inode, file, pos, count); in rw_verify_area()
321 retval = security_file_permission(file, in rw_verify_area()
338 ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) in do_sync_read()
364 ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) in vfs_read() argument
368 if (!(file->f_mode & FMODE_READ)) in vfs_read()
370 if (!file->f_op || (!file->f_op->read && !file->f_op->aio_read)) in vfs_read()
375 ret = rw_verify_area(READ, file, pos, count); in vfs_read()
378 if (file->f_op->read) in vfs_read()
379 ret = file->f_op->read(file, buf, count, pos); in vfs_read()
381 ret = do_sync_read(file, buf, count, pos); in vfs_read()
383 fsnotify_access(file); in vfs_read()
394 ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) in do_sync_write()
420 ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) in vfs_write() argument
424 if (!(file->f_mode & FMODE_WRITE)) in vfs_write()
426 if (!file->f_op || (!file->f_op->write && !file->f_op->aio_write)) in vfs_write()
431 ret = rw_verify_area(WRITE, file, pos, count); in vfs_write()
434 if (file->f_op->write) in vfs_write()
435 ret = file->f_op->write(file, buf, count, pos); in vfs_write()
437 ret = do_sync_write(file, buf, count, pos); in vfs_write()
439 fsnotify_modify(file); in vfs_write()
450 static inline loff_t file_pos_read(struct file *file) in file_pos_read() argument
452 return file->f_pos; in file_pos_read()
455 static inline void file_pos_write(struct file *file, loff_t pos) in file_pos_write() argument
457 file->f_pos = pos; in file_pos_write()
462 struct file *file; in SYSCALL_DEFINE3() local
466 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE3()
467 if (file) { in SYSCALL_DEFINE3()
468 loff_t pos = file_pos_read(file); in SYSCALL_DEFINE3()
469 ret = vfs_read(file, buf, count, &pos); in SYSCALL_DEFINE3()
470 file_pos_write(file, pos); in SYSCALL_DEFINE3()
471 fput_light(file, fput_needed); in SYSCALL_DEFINE3()
480 struct file *file; in SYSCALL_DEFINE3() local
484 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE3()
485 if (file) { in SYSCALL_DEFINE3()
486 loff_t pos = file_pos_read(file); in SYSCALL_DEFINE3()
487 ret = vfs_write(file, buf, count, &pos); in SYSCALL_DEFINE3()
488 file_pos_write(file, pos); in SYSCALL_DEFINE3()
489 fput_light(file, fput_needed); in SYSCALL_DEFINE3()
498 struct file *file; in SYSCALL_DEFINE() local
505 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE()
506 if (file) { in SYSCALL_DEFINE()
508 if (file->f_mode & FMODE_PREAD) in SYSCALL_DEFINE()
509 ret = vfs_read(file, buf, count, &pos); in SYSCALL_DEFINE()
510 fput_light(file, fput_needed); in SYSCALL_DEFINE()
527 struct file *file; in SYSCALL_DEFINE() local
534 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE()
535 if (file) { in SYSCALL_DEFINE()
537 if (file->f_mode & FMODE_PWRITE) in SYSCALL_DEFINE()
538 ret = vfs_write(file, buf, count, &pos); in SYSCALL_DEFINE()
539 fput_light(file, fput_needed); in SYSCALL_DEFINE()
574 ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov, in do_sync_readv_writev()
598 /* Do it by hand, with file-ops */
599 ssize_t do_loop_readv_writev(struct file *filp, struct iovec *iov, in do_loop_readv_writev()
709 static ssize_t do_readv_writev(int type, struct file *file, in do_readv_writev() argument
720 if (!file->f_op) { in do_readv_writev()
731 ret = rw_verify_area(type, file, pos, tot_len); in do_readv_writev()
737 fn = file->f_op->read; in do_readv_writev()
738 fnv = file->f_op->aio_read; in do_readv_writev()
740 fn = (io_fn_t)file->f_op->write; in do_readv_writev()
741 fnv = file->f_op->aio_write; in do_readv_writev()
745 ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, in do_readv_writev()
748 ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn); in do_readv_writev()
755 fsnotify_access(file); in do_readv_writev()
757 fsnotify_modify(file); in do_readv_writev()
762 ssize_t vfs_readv(struct file *file, const struct iovec __user *vec, in vfs_readv() argument
765 if (!(file->f_mode & FMODE_READ)) in vfs_readv()
767 if (!file->f_op || (!file->f_op->aio_read && !file->f_op->read)) in vfs_readv()
770 return do_readv_writev(READ, file, vec, vlen, pos); in vfs_readv()
775 ssize_t vfs_writev(struct file *file, const struct iovec __user *vec, in vfs_writev() argument
778 if (!(file->f_mode & FMODE_WRITE)) in vfs_writev()
780 if (!file->f_op || (!file->f_op->aio_write && !file->f_op->write)) in vfs_writev()
783 return do_readv_writev(WRITE, file, vec, vlen, pos); in vfs_writev()
791 struct file *file; in SYSCALL_DEFINE3() local
795 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE3()
796 if (file) { in SYSCALL_DEFINE3()
797 loff_t pos = file_pos_read(file); in SYSCALL_DEFINE3()
798 ret = vfs_readv(file, vec, vlen, &pos); in SYSCALL_DEFINE3()
799 file_pos_write(file, pos); in SYSCALL_DEFINE3()
800 fput_light(file, fput_needed); in SYSCALL_DEFINE3()
812 struct file *file; in SYSCALL_DEFINE3() local
816 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE3()
817 if (file) { in SYSCALL_DEFINE3()
818 loff_t pos = file_pos_read(file); in SYSCALL_DEFINE3()
819 ret = vfs_writev(file, vec, vlen, &pos); in SYSCALL_DEFINE3()
820 file_pos_write(file, pos); in SYSCALL_DEFINE3()
821 fput_light(file, fput_needed); in SYSCALL_DEFINE3()
840 struct file *file; in SYSCALL_DEFINE5() local
847 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE5()
848 if (file) { in SYSCALL_DEFINE5()
850 if (file->f_mode & FMODE_PREAD) in SYSCALL_DEFINE5()
851 ret = vfs_readv(file, vec, vlen, &pos); in SYSCALL_DEFINE5()
852 fput_light(file, fput_needed); in SYSCALL_DEFINE5()
865 struct file *file; in SYSCALL_DEFINE5() local
872 file = fget_light(fd, &fput_needed); in SYSCALL_DEFINE5()
873 if (file) { in SYSCALL_DEFINE5()
875 if (file->f_mode & FMODE_PWRITE) in SYSCALL_DEFINE5()
876 ret = vfs_writev(file, vec, vlen, &pos); in SYSCALL_DEFINE5()
877 fput_light(file, fput_needed); in SYSCALL_DEFINE5()
889 struct file * in_file, * out_file; in do_sendfile()
896 * Get input file, and verify that it is ok.. in do_sendfile()
916 * Get output file, and verify that it is ok.. in do_sendfile()
949 * EAGAIN on a non-blocking file descriptor. in do_sendfile()