Lines Matching refs:fd
37 kvfree(fdt->fd); in __free_fdtable()
81 memcpy(nfdt->fd, ofdt->fd, cpy); in copy_fdtable()
82 memset((char *)nfdt->fd + cpy, 0, set); in copy_fdtable()
136 fdt->fd = data; in alloc_fdtable()
152 kvfree(fdt->fd); in alloc_fdtable()
246 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt) in __set_close_on_exec() argument
248 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
251 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
253 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
254 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
257 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
259 __set_bit(fd, fdt->open_fds); in __set_open_fd()
260 fd /= BITS_PER_LONG; in __set_open_fd()
261 if (!~fdt->open_fds[fd]) in __set_open_fd()
262 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
265 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
267 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
268 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
322 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
362 old_fds = old_fdt->fd; in dup_fd()
363 new_fds = new_fdt->fd; in dup_fd()
412 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
455 .fd = &init_files.fd_array[0],
484 unsigned int fd; in alloc_fd() local
491 fd = start; in alloc_fd()
492 if (fd < files->next_fd) in alloc_fd()
493 fd = files->next_fd; in alloc_fd()
495 if (fd < fdt->max_fds) in alloc_fd()
496 fd = find_next_fd(fdt, fd); in alloc_fd()
503 if (fd >= end) in alloc_fd()
506 error = expand_files(files, fd); in alloc_fd()
518 files->next_fd = fd + 1; in alloc_fd()
520 __set_open_fd(fd, fdt); in alloc_fd()
522 __set_close_on_exec(fd, fdt); in alloc_fd()
524 __clear_close_on_exec(fd, fdt); in alloc_fd()
525 error = fd; in alloc_fd()
528 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in alloc_fd()
529 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in alloc_fd()
530 rcu_assign_pointer(fdt->fd[fd], NULL); in alloc_fd()
550 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
553 __clear_open_fd(fd, fdt); in __put_unused_fd()
554 if (fd < files->next_fd) in __put_unused_fd()
555 files->next_fd = fd; in __put_unused_fd()
558 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
562 __put_unused_fd(files, fd); in put_unused_fd()
584 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
595 BUG_ON(fdt->fd[fd] != NULL); in fd_install()
596 rcu_assign_pointer(fdt->fd[fd], file); in fd_install()
603 BUG_ON(fdt->fd[fd] != NULL); in fd_install()
604 rcu_assign_pointer(fdt->fd[fd], file); in fd_install()
619 static struct file *pick_file(struct files_struct *files, unsigned fd) in pick_file() argument
624 if (fd >= fdt->max_fds) in pick_file()
627 fd = array_index_nospec(fd, fdt->max_fds); in pick_file()
628 file = fdt->fd[fd]; in pick_file()
630 rcu_assign_pointer(fdt->fd[fd], NULL); in pick_file()
631 __put_unused_fd(files, fd); in pick_file()
636 int close_fd(unsigned fd) in close_fd() argument
642 file = pick_file(files, fd); in close_fd()
665 unsigned int fd, unsigned int max_fd) in __range_cloexec() argument
673 if (fd <= max_fd) in __range_cloexec()
674 bitmap_set(fdt->close_on_exec, fd, max_fd - fd + 1); in __range_cloexec()
678 static inline void __range_close(struct files_struct *files, unsigned int fd, in __range_close() argument
688 for (; fd <= max_fd; fd++) { in __range_close()
689 file = pick_file(files, fd); in __range_close()
714 int __close_range(unsigned fd, unsigned max_fd, unsigned int flags) in __close_range() argument
722 if (fd > max_fd) in __close_range()
726 struct fd_range range = {fd, max_fd}, *punch_hole = ⦥ in __close_range()
747 __range_cloexec(cur_fds, fd, max_fd); in __close_range()
749 __range_close(cur_fds, fd, max_fd); in __close_range()
769 struct file *__close_fd_get_file(unsigned int fd) in __close_fd_get_file() argument
771 return pick_file(current->files, fd); in __close_fd_get_file()
778 struct file *close_fd_get_file(unsigned int fd) in close_fd_get_file() argument
784 file = pick_file(files, fd); in close_fd_get_file()
799 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
801 if (fd >= fdt->max_fds) in do_close_on_exec()
807 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
811 file = fdt->fd[fd]; in do_close_on_exec()
814 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
815 __put_unused_fd(files, fd); in do_close_on_exec()
827 unsigned int fd, fmode_t mask) in __fget_files_rcu() argument
834 if (unlikely(fd >= fdt->max_fds)) in __fget_files_rcu()
837 fdentry = fdt->fd + array_index_nospec(fd, fdt->max_fds); in __fget_files_rcu()
880 static struct file *__fget_files(struct files_struct *files, unsigned int fd, in __fget_files() argument
886 file = __fget_files_rcu(files, fd, mask); in __fget_files()
892 static inline struct file *__fget(unsigned int fd, fmode_t mask) in __fget() argument
894 return __fget_files(current->files, fd, mask); in __fget()
897 struct file *fget(unsigned int fd) in fget() argument
899 return __fget(fd, FMODE_PATH); in fget()
903 struct file *fget_raw(unsigned int fd) in fget_raw() argument
905 return __fget(fd, 0); in fget_raw()
909 struct file *fget_task(struct task_struct *task, unsigned int fd) in fget_task() argument
915 file = __fget_files(task->files, fd, 0); in fget_task()
921 struct file *task_lookup_fd_rcu(struct task_struct *task, unsigned int fd) in task_lookup_fd_rcu() argument
930 file = files_lookup_fd_rcu(files, fd); in task_lookup_fd_rcu()
940 unsigned int fd = *ret_fd; in task_lookup_next_fd_rcu() local
946 for (; fd < files_fdtable(files)->max_fds; fd++) { in task_lookup_next_fd_rcu()
947 file = files_lookup_fd_rcu(files, fd); in task_lookup_next_fd_rcu()
953 *ret_fd = fd; in task_lookup_next_fd_rcu()
974 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
989 file = files_lookup_fd_raw(files, fd); in __fget_light()
994 file = __fget(fd, mask); in __fget_light()
1000 unsigned long __fdget(unsigned int fd) in __fdget() argument
1002 return __fget_light(fd, FMODE_PATH); in __fdget()
1006 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
1008 return __fget_light(fd, 0); in __fdget_raw()
1027 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
1029 unsigned long v = __fdget(fd); in __fdget_pos()
1050 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
1057 __set_close_on_exec(fd, fdt); in set_close_on_exec()
1059 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
1063 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
1070 res = close_on_exec(fd, fdt); in get_close_on_exec()
1076 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
1097 fd = array_index_nospec(fd, fdt->max_fds); in do_dup2()
1098 tofree = fdt->fd[fd]; in do_dup2()
1099 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
1102 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
1103 __set_open_fd(fd, fdt); in do_dup2()
1105 __set_close_on_exec(fd, fdt); in do_dup2()
1107 __clear_close_on_exec(fd, fdt); in do_dup2()
1113 return fd; in do_dup2()
1120 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
1126 return close_fd(fd); in replace_fd()
1128 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
1132 err = expand_files(files, fd); in replace_fd()
1135 return do_dup2(files, file, fd, flags); in replace_fd()
1297 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()