Lines Matching refs:fd
36 kvfree(fdt->fd); in __free_fdtable()
84 memcpy(nfdt->fd, ofdt->fd, cpy); in copy_fdtable()
85 memset((char *)nfdt->fd + cpy, 0, set); in copy_fdtable()
139 fdt->fd = data; in alloc_fdtable()
155 kvfree(fdt->fd); in alloc_fdtable()
249 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt) in __set_close_on_exec() argument
251 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
254 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
256 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
257 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
260 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
262 __set_bit(fd, fdt->open_fds); in __set_open_fd()
263 fd /= BITS_PER_LONG; in __set_open_fd()
264 if (!~fdt->open_fds[fd]) in __set_open_fd()
265 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
268 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
270 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
271 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
339 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
379 old_fds = old_fdt->fd; in dup_fd()
380 new_fds = new_fdt->fd; in dup_fd()
430 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
498 .fd = &init_files.fd_array[0],
527 unsigned int fd; in __alloc_fd() local
534 fd = start; in __alloc_fd()
535 if (fd < files->next_fd) in __alloc_fd()
536 fd = files->next_fd; in __alloc_fd()
538 if (fd < fdt->max_fds) in __alloc_fd()
539 fd = find_next_fd(fdt, fd); in __alloc_fd()
546 if (fd >= end) in __alloc_fd()
549 error = expand_files(files, fd); in __alloc_fd()
561 files->next_fd = fd + 1; in __alloc_fd()
563 __set_open_fd(fd, fdt); in __alloc_fd()
565 __set_close_on_exec(fd, fdt); in __alloc_fd()
567 __clear_close_on_exec(fd, fdt); in __alloc_fd()
568 error = fd; in __alloc_fd()
571 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in __alloc_fd()
572 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in __alloc_fd()
573 rcu_assign_pointer(fdt->fd[fd], NULL); in __alloc_fd()
598 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
601 __clear_open_fd(fd, fdt); in __put_unused_fd()
602 if (fd < files->next_fd) in __put_unused_fd()
603 files->next_fd = fd; in __put_unused_fd()
606 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
610 __put_unused_fd(files, fd); in put_unused_fd()
636 void __fd_install(struct files_struct *files, unsigned int fd, in __fd_install() argument
647 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
648 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
655 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
656 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
664 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
666 __fd_install(current->files, fd, file); in fd_install()
671 static struct file *pick_file(struct files_struct *files, unsigned fd) in pick_file() argument
678 if (fd >= fdt->max_fds) in pick_file()
680 fd = array_index_nospec(fd, fdt->max_fds); in pick_file()
681 file = fdt->fd[fd]; in pick_file()
684 rcu_assign_pointer(fdt->fd[fd], NULL); in pick_file()
685 __put_unused_fd(files, fd); in pick_file()
695 int __close_fd(struct files_struct *files, unsigned fd) in __close_fd() argument
699 file = pick_file(files, fd); in __close_fd()
716 int __close_range(unsigned fd, unsigned max_fd, unsigned int flags) in __close_range() argument
725 if (fd > max_fd) in __close_range()
745 max_unshare_fds = fd; in __close_range()
760 while (fd <= max_fd) { in __close_range()
763 file = pick_file(cur_fds, fd++); in __close_range()
789 int __close_fd_get_file(unsigned int fd, struct file **res) in __close_fd_get_file() argument
796 if (fd >= fdt->max_fds) in __close_fd_get_file()
798 file = fdt->fd[fd]; in __close_fd_get_file()
801 rcu_assign_pointer(fdt->fd[fd], NULL); in __close_fd_get_file()
802 __put_unused_fd(files, fd); in __close_fd_get_file()
816 int close_fd_get_file(unsigned int fd, struct file **res) in close_fd_get_file() argument
822 ret = __close_fd_get_file(fd, res); in close_fd_get_file()
837 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
839 if (fd >= fdt->max_fds) in do_close_on_exec()
845 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
849 file = fdt->fd[fd]; in do_close_on_exec()
852 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
853 __put_unused_fd(files, fd); in do_close_on_exec()
865 unsigned int fd, fmode_t mask, unsigned int refs) in __fget_files_rcu() argument
872 if (unlikely(fd >= fdt->max_fds)) in __fget_files_rcu()
875 fdentry = fdt->fd + array_index_nospec(fd, fdt->max_fds); in __fget_files_rcu()
919 static struct file *__fget_files(struct files_struct *files, unsigned int fd, in __fget_files() argument
925 file = __fget_files_rcu(files, fd, mask, refs); in __fget_files()
931 static inline struct file *__fget(unsigned int fd, fmode_t mask, in __fget() argument
934 return __fget_files(current->files, fd, mask, refs); in __fget()
937 struct file *fget_many(unsigned int fd, unsigned int refs) in fget_many() argument
939 return __fget(fd, FMODE_PATH, refs); in fget_many()
942 struct file *fget(unsigned int fd) in fget() argument
944 return __fget(fd, FMODE_PATH, 1); in fget()
948 struct file *fget_raw(unsigned int fd) in fget_raw() argument
950 return __fget(fd, 0, 1); in fget_raw()
954 struct file *fget_task(struct task_struct *task, unsigned int fd) in fget_task() argument
960 file = __fget_files(task->files, fd, 0, 1); in fget_task()
982 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
988 file = __fcheck_files(files, fd); in __fget_light()
993 file = __fget(fd, mask, 1); in __fget_light()
999 unsigned long __fdget(unsigned int fd) in __fdget() argument
1001 return __fget_light(fd, FMODE_PATH); in __fdget()
1005 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
1007 return __fget_light(fd, 0); in __fdget_raw()
1026 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
1028 unsigned long v = __fdget(fd); in __fdget_pos()
1049 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
1056 __set_close_on_exec(fd, fdt); in set_close_on_exec()
1058 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
1062 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
1069 res = close_on_exec(fd, fdt); in get_close_on_exec()
1075 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
1096 tofree = fdt->fd[fd]; in do_dup2()
1097 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
1100 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
1101 __set_open_fd(fd, fdt); in do_dup2()
1103 __set_close_on_exec(fd, fdt); in do_dup2()
1105 __clear_close_on_exec(fd, fdt); in do_dup2()
1111 return fd; in do_dup2()
1118 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
1124 return __close_fd(files, fd); in replace_fd()
1126 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
1130 err = expand_files(files, fd); in replace_fd()
1133 return do_dup2(files, file, fd, flags); in replace_fd()
1157 int __receive_fd(int fd, struct file *file, int __user *ufd, unsigned int o_flags) in __receive_fd() argument
1166 if (fd < 0) { in __receive_fd()
1171 new_fd = fd; in __receive_fd()
1177 if (fd < 0) in __receive_fd()
1183 if (fd < 0) { in __receive_fd()
1289 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()