Lines Matching refs:file
24 typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
36 static inline int unsigned_offsets(struct file *file) in unsigned_offsets() argument
38 return file->f_mode & FMODE_UNSIGNED_OFFSET; in unsigned_offsets()
53 loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize) in vfs_setpos() argument
55 if (offset < 0 && !unsigned_offsets(file)) in vfs_setpos()
60 if (offset != file->f_pos) { in vfs_setpos()
61 file->f_pos = offset; in vfs_setpos()
62 file->f_version = 0; in vfs_setpos()
85 generic_file_llseek_size(struct file *file, loff_t offset, int whence, in generic_file_llseek_size() argument
100 return file->f_pos; in generic_file_llseek_size()
106 spin_lock(&file->f_lock); in generic_file_llseek_size()
107 offset = vfs_setpos(file, file->f_pos + offset, maxsize); in generic_file_llseek_size()
108 spin_unlock(&file->f_lock); in generic_file_llseek_size()
129 return vfs_setpos(file, offset, maxsize); in generic_file_llseek_size()
143 loff_t generic_file_llseek(struct file *file, loff_t offset, int whence) in generic_file_llseek() argument
145 struct inode *inode = file->f_mapping->host; in generic_file_llseek()
147 return generic_file_llseek_size(file, offset, whence, in generic_file_llseek()
161 loff_t fixed_size_llseek(struct file *file, loff_t offset, int whence, loff_t size) in fixed_size_llseek() argument
165 return generic_file_llseek_size(file, offset, whence, in fixed_size_llseek()
184 loff_t noop_llseek(struct file *file, loff_t offset, int whence) in noop_llseek() argument
186 return file->f_pos; in noop_llseek()
190 loff_t no_llseek(struct file *file, loff_t offset, int whence) in no_llseek() argument
196 loff_t default_llseek(struct file *file, loff_t offset, int whence) in default_llseek() argument
198 struct inode *inode = file_inode(file); in default_llseek()
208 retval = file->f_pos; in default_llseek()
211 offset += file->f_pos; in default_llseek()
238 if (offset >= 0 || unsigned_offsets(file)) { in default_llseek()
239 if (offset != file->f_pos) { in default_llseek()
240 file->f_pos = offset; in default_llseek()
241 file->f_version = 0; in default_llseek()
251 loff_t vfs_llseek(struct file *file, loff_t offset, int whence) in vfs_llseek() argument
253 loff_t (*fn)(struct file *, loff_t, int); in vfs_llseek()
256 if (file->f_mode & FMODE_LSEEK) { in vfs_llseek()
257 if (file->f_op->llseek) in vfs_llseek()
258 fn = file->f_op->llseek; in vfs_llseek()
260 return fn(file, offset, whence); in vfs_llseek()
272 mutex_unlock(&f.file->f_pos_lock); in fdput_pos()
280 if (!f.file) in SYSCALL_DEFINE3()
285 loff_t res = vfs_llseek(f.file, offset, whence); in SYSCALL_DEFINE3()
310 if (!f.file) in SYSCALL_DEFINE5()
317 offset = vfs_llseek(f.file, ((loff_t) offset_high << 32) | offset_low, in SYSCALL_DEFINE5()
332 ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos) in vfs_iter_read() argument
337 if (!file->f_op->read_iter) in vfs_iter_read()
340 init_sync_kiocb(&kiocb, file); in vfs_iter_read()
344 ret = file->f_op->read_iter(&kiocb, iter); in vfs_iter_read()
352 ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos) in vfs_iter_write() argument
357 if (!file->f_op->write_iter) in vfs_iter_write()
360 init_sync_kiocb(&kiocb, file); in vfs_iter_write()
364 ret = file->f_op->write_iter(&kiocb, iter); in vfs_iter_write()
377 int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count) in rw_verify_area() argument
383 inode = file_inode(file); in rw_verify_area()
388 if (!unsigned_offsets(file)) in rw_verify_area()
393 if (!unsigned_offsets(file)) in rw_verify_area()
400 inode, file, pos, count); in rw_verify_area()
404 retval = security_file_permission(file, in rw_verify_area()
411 static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) in new_sync_read()
428 ssize_t __vfs_read(struct file *file, char __user *buf, size_t count, in __vfs_read() argument
431 if (file->f_op->read) in __vfs_read()
432 return file->f_op->read(file, buf, count, pos); in __vfs_read()
433 else if (file->f_op->read_iter) in __vfs_read()
434 return new_sync_read(file, buf, count, pos); in __vfs_read()
440 ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) in vfs_read() argument
444 if (!(file->f_mode & FMODE_READ)) in vfs_read()
446 if (!(file->f_mode & FMODE_CAN_READ)) in vfs_read()
451 ret = rw_verify_area(READ, file, pos, count); in vfs_read()
454 ret = __vfs_read(file, buf, count, pos); in vfs_read()
456 fsnotify_access(file); in vfs_read()
467 static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) in new_sync_write()
485 ssize_t __vfs_write(struct file *file, const char __user *p, size_t count, in __vfs_write() argument
488 if (file->f_op->write) in __vfs_write()
489 return file->f_op->write(file, p, count, pos); in __vfs_write()
490 else if (file->f_op->write_iter) in __vfs_write()
491 return new_sync_write(file, p, count, pos); in __vfs_write()
497 ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos) in __kernel_write() argument
503 if (!(file->f_mode & FMODE_CAN_WRITE)) in __kernel_write()
511 ret = __vfs_write(file, p, count, pos); in __kernel_write()
514 fsnotify_modify(file); in __kernel_write()
523 ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) in vfs_write() argument
527 if (!(file->f_mode & FMODE_WRITE)) in vfs_write()
529 if (!(file->f_mode & FMODE_CAN_WRITE)) in vfs_write()
534 ret = rw_verify_area(WRITE, file, pos, count); in vfs_write()
537 file_start_write(file); in vfs_write()
538 ret = __vfs_write(file, buf, count, pos); in vfs_write()
540 fsnotify_modify(file); in vfs_write()
544 file_end_write(file); in vfs_write()
552 static inline loff_t file_pos_read(struct file *file) in file_pos_read() argument
554 return file->f_pos; in file_pos_read()
557 static inline void file_pos_write(struct file *file, loff_t pos) in file_pos_write() argument
559 file->f_pos = pos; in file_pos_write()
567 if (f.file) { in SYSCALL_DEFINE3()
568 loff_t pos = file_pos_read(f.file); in SYSCALL_DEFINE3()
569 ret = vfs_read(f.file, buf, count, &pos); in SYSCALL_DEFINE3()
571 file_pos_write(f.file, pos); in SYSCALL_DEFINE3()
583 if (f.file) { in SYSCALL_DEFINE3()
584 loff_t pos = file_pos_read(f.file); in SYSCALL_DEFINE3()
585 ret = vfs_write(f.file, buf, count, &pos); in SYSCALL_DEFINE3()
587 file_pos_write(f.file, pos); in SYSCALL_DEFINE3()
604 if (f.file) { in SYSCALL_DEFINE4()
606 if (f.file->f_mode & FMODE_PREAD) in SYSCALL_DEFINE4()
607 ret = vfs_read(f.file, buf, count, &pos); in SYSCALL_DEFINE4()
624 if (f.file) { in SYSCALL_DEFINE4()
626 if (f.file->f_mode & FMODE_PWRITE) in SYSCALL_DEFINE4()
627 ret = vfs_write(f.file, buf, count, &pos); in SYSCALL_DEFINE4()
655 static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, in do_iter_readv_writev()
671 static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, in do_loop_readv_writev()
774 static ssize_t do_readv_writev(int type, struct file *file, in do_readv_writev() argument
794 ret = rw_verify_area(type, file, pos, tot_len); in do_readv_writev()
799 fn = file->f_op->read; in do_readv_writev()
800 iter_fn = file->f_op->read_iter; in do_readv_writev()
802 fn = (io_fn_t)file->f_op->write; in do_readv_writev()
803 iter_fn = file->f_op->write_iter; in do_readv_writev()
804 file_start_write(file); in do_readv_writev()
808 ret = do_iter_readv_writev(file, &iter, pos, iter_fn); in do_readv_writev()
810 ret = do_loop_readv_writev(file, &iter, pos, fn); in do_readv_writev()
813 file_end_write(file); in do_readv_writev()
819 fsnotify_access(file); in do_readv_writev()
821 fsnotify_modify(file); in do_readv_writev()
826 ssize_t vfs_readv(struct file *file, const struct iovec __user *vec, in vfs_readv() argument
829 if (!(file->f_mode & FMODE_READ)) in vfs_readv()
831 if (!(file->f_mode & FMODE_CAN_READ)) in vfs_readv()
834 return do_readv_writev(READ, file, vec, vlen, pos); in vfs_readv()
839 ssize_t vfs_writev(struct file *file, const struct iovec __user *vec, in vfs_writev() argument
842 if (!(file->f_mode & FMODE_WRITE)) in vfs_writev()
844 if (!(file->f_mode & FMODE_CAN_WRITE)) in vfs_writev()
847 return do_readv_writev(WRITE, file, vec, vlen, pos); in vfs_writev()
858 if (f.file) { in SYSCALL_DEFINE3()
859 loff_t pos = file_pos_read(f.file); in SYSCALL_DEFINE3()
860 ret = vfs_readv(f.file, vec, vlen, &pos); in SYSCALL_DEFINE3()
862 file_pos_write(f.file, pos); in SYSCALL_DEFINE3()
878 if (f.file) { in SYSCALL_DEFINE3()
879 loff_t pos = file_pos_read(f.file); in SYSCALL_DEFINE3()
880 ret = vfs_writev(f.file, vec, vlen, &pos); in SYSCALL_DEFINE3()
882 file_pos_write(f.file, pos); in SYSCALL_DEFINE3()
909 if (f.file) { in SYSCALL_DEFINE5()
911 if (f.file->f_mode & FMODE_PREAD) in SYSCALL_DEFINE5()
912 ret = vfs_readv(f.file, vec, vlen, &pos); in SYSCALL_DEFINE5()
933 if (f.file) { in SYSCALL_DEFINE5()
935 if (f.file->f_mode & FMODE_PWRITE) in SYSCALL_DEFINE5()
936 ret = vfs_writev(f.file, vec, vlen, &pos); in SYSCALL_DEFINE5()
948 static ssize_t compat_do_readv_writev(int type, struct file *file, in compat_do_readv_writev() argument
968 ret = rw_verify_area(type, file, pos, tot_len); in compat_do_readv_writev()
973 fn = file->f_op->read; in compat_do_readv_writev()
974 iter_fn = file->f_op->read_iter; in compat_do_readv_writev()
976 fn = (io_fn_t)file->f_op->write; in compat_do_readv_writev()
977 iter_fn = file->f_op->write_iter; in compat_do_readv_writev()
978 file_start_write(file); in compat_do_readv_writev()
982 ret = do_iter_readv_writev(file, &iter, pos, iter_fn); in compat_do_readv_writev()
984 ret = do_loop_readv_writev(file, &iter, pos, fn); in compat_do_readv_writev()
987 file_end_write(file); in compat_do_readv_writev()
993 fsnotify_access(file); in compat_do_readv_writev()
995 fsnotify_modify(file); in compat_do_readv_writev()
1000 static size_t compat_readv(struct file *file, in compat_readv() argument
1006 if (!(file->f_mode & FMODE_READ)) in compat_readv()
1010 if (!(file->f_mode & FMODE_CAN_READ)) in compat_readv()
1013 ret = compat_do_readv_writev(READ, file, vec, vlen, pos); in compat_readv()
1030 if (!f.file) in COMPAT_SYSCALL_DEFINE3()
1032 pos = f.file->f_pos; in COMPAT_SYSCALL_DEFINE3()
1033 ret = compat_readv(f.file, vec, vlen, &pos); in COMPAT_SYSCALL_DEFINE3()
1035 f.file->f_pos = pos; in COMPAT_SYSCALL_DEFINE3()
1050 if (!f.file) in __compat_sys_preadv64()
1053 if (f.file->f_mode & FMODE_PREAD) in __compat_sys_preadv64()
1054 ret = compat_readv(f.file, vec, vlen, &pos); in __compat_sys_preadv64()
1077 static size_t compat_writev(struct file *file, in compat_writev() argument
1083 if (!(file->f_mode & FMODE_WRITE)) in compat_writev()
1087 if (!(file->f_mode & FMODE_CAN_WRITE)) in compat_writev()
1090 ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos); in compat_writev()
1107 if (!f.file) in COMPAT_SYSCALL_DEFINE3()
1109 pos = f.file->f_pos; in COMPAT_SYSCALL_DEFINE3()
1110 ret = compat_writev(f.file, vec, vlen, &pos); in COMPAT_SYSCALL_DEFINE3()
1112 f.file->f_pos = pos; in COMPAT_SYSCALL_DEFINE3()
1127 if (!f.file) in __compat_sys_pwritev64()
1130 if (f.file->f_mode & FMODE_PWRITE) in __compat_sys_pwritev64()
1131 ret = compat_writev(f.file, vec, vlen, &pos); in __compat_sys_pwritev64()
1170 if (!in.file) in do_sendfile()
1172 if (!(in.file->f_mode & FMODE_READ)) in do_sendfile()
1176 pos = in.file->f_pos; in do_sendfile()
1179 if (!(in.file->f_mode & FMODE_PREAD)) in do_sendfile()
1182 retval = rw_verify_area(READ, in.file, &pos, count); in do_sendfile()
1192 if (!out.file) in do_sendfile()
1194 if (!(out.file->f_mode & FMODE_WRITE)) in do_sendfile()
1197 in_inode = file_inode(in.file); in do_sendfile()
1198 out_inode = file_inode(out.file); in do_sendfile()
1199 out_pos = out.file->f_pos; in do_sendfile()
1200 retval = rw_verify_area(WRITE, out.file, &out_pos, count); in do_sendfile()
1223 if (in.file->f_flags & O_NONBLOCK) in do_sendfile()
1226 file_start_write(out.file); in do_sendfile()
1227 retval = do_splice_direct(in.file, &pos, out.file, &out_pos, count, fl); in do_sendfile()
1228 file_end_write(out.file); in do_sendfile()
1233 fsnotify_access(in.file); in do_sendfile()
1234 fsnotify_modify(out.file); in do_sendfile()
1235 out.file->f_pos = out_pos; in do_sendfile()
1239 in.file->f_pos = pos; in do_sendfile()