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()
123 fdt->fd = data; in alloc_fdtable()
139 kvfree(fdt->fd); in alloc_fdtable()
233 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt) in __set_close_on_exec() argument
235 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
238 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
240 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
241 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
244 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
246 __set_bit(fd, fdt->open_fds); in __set_open_fd()
247 fd /= BITS_PER_LONG; in __set_open_fd()
248 if (!~fdt->open_fds[fd]) in __set_open_fd()
249 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
252 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
254 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
255 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
310 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
350 old_fds = old_fdt->fd; in dup_fd()
351 new_fds = new_fdt->fd; in dup_fd()
401 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
444 .fd = &init_files.fd_array[0],
473 unsigned int fd; in alloc_fd() local
480 fd = start; in alloc_fd()
481 if (fd < files->next_fd) in alloc_fd()
482 fd = files->next_fd; in alloc_fd()
484 if (fd < fdt->max_fds) in alloc_fd()
485 fd = find_next_fd(fdt, fd); in alloc_fd()
492 if (fd >= end) in alloc_fd()
495 error = expand_files(files, fd); in alloc_fd()
507 files->next_fd = fd + 1; in alloc_fd()
509 __set_open_fd(fd, fdt); in alloc_fd()
511 __set_close_on_exec(fd, fdt); in alloc_fd()
513 __clear_close_on_exec(fd, fdt); in alloc_fd()
514 error = fd; in alloc_fd()
517 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in alloc_fd()
518 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in alloc_fd()
519 rcu_assign_pointer(fdt->fd[fd], NULL); in alloc_fd()
539 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
542 __clear_open_fd(fd, fdt); in __put_unused_fd()
543 if (fd < files->next_fd) in __put_unused_fd()
544 files->next_fd = fd; in __put_unused_fd()
547 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
551 __put_unused_fd(files, fd); in put_unused_fd()
573 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
584 BUG_ON(fdt->fd[fd] != NULL); in fd_install()
585 rcu_assign_pointer(fdt->fd[fd], file); in fd_install()
592 BUG_ON(fdt->fd[fd] != NULL); in fd_install()
593 rcu_assign_pointer(fdt->fd[fd], file); in fd_install()
609 static struct file *pick_file(struct files_struct *files, unsigned fd) in pick_file() argument
616 if (fd >= fdt->max_fds) { in pick_file()
620 file = fdt->fd[fd]; in pick_file()
625 rcu_assign_pointer(fdt->fd[fd], NULL); in pick_file()
626 __put_unused_fd(files, fd); in pick_file()
633 int close_fd(unsigned fd) in close_fd() argument
638 file = pick_file(files, fd); in close_fd()
660 unsigned int fd, unsigned int max_fd) in __range_cloexec() argument
668 if (fd <= max_fd) in __range_cloexec()
669 bitmap_set(fdt->close_on_exec, fd, max_fd - fd + 1); in __range_cloexec()
673 static inline void __range_close(struct files_struct *cur_fds, unsigned int fd, in __range_close() argument
676 while (fd <= max_fd) { in __range_close()
679 file = pick_file(cur_fds, fd++); in __range_close()
702 int __close_range(unsigned fd, unsigned max_fd, unsigned int flags) in __close_range() argument
710 if (fd > max_fd) in __close_range()
730 max_unshare_fds = fd; 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 int __close_fd_get_file(unsigned int fd, struct file **res) in __close_fd_get_file() argument
776 if (fd >= fdt->max_fds) in __close_fd_get_file()
778 file = fdt->fd[fd]; in __close_fd_get_file()
781 rcu_assign_pointer(fdt->fd[fd], NULL); in __close_fd_get_file()
782 __put_unused_fd(files, fd); in __close_fd_get_file()
796 int close_fd_get_file(unsigned int fd, struct file **res) in close_fd_get_file() argument
802 ret = __close_fd_get_file(fd, res); in close_fd_get_file()
817 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
819 if (fd >= fdt->max_fds) in do_close_on_exec()
825 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
829 file = fdt->fd[fd]; in do_close_on_exec()
832 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
833 __put_unused_fd(files, fd); in do_close_on_exec()
844 static struct file *__fget_files(struct files_struct *files, unsigned int fd, in __fget_files() argument
851 file = files_lookup_fd_rcu(files, fd); in __fget_files()
867 static inline struct file *__fget(unsigned int fd, fmode_t mask, in __fget() argument
870 return __fget_files(current->files, fd, mask, refs); in __fget()
873 struct file *fget_many(unsigned int fd, unsigned int refs) in fget_many() argument
875 return __fget(fd, FMODE_PATH, refs); in fget_many()
878 struct file *fget(unsigned int fd) in fget() argument
880 return __fget(fd, FMODE_PATH, 1); in fget()
884 struct file *fget_raw(unsigned int fd) in fget_raw() argument
886 return __fget(fd, 0, 1); in fget_raw()
890 struct file *fget_task(struct task_struct *task, unsigned int fd) in fget_task() argument
896 file = __fget_files(task->files, fd, 0, 1); in fget_task()
902 struct file *task_lookup_fd_rcu(struct task_struct *task, unsigned int fd) in task_lookup_fd_rcu() argument
911 file = files_lookup_fd_rcu(files, fd); in task_lookup_fd_rcu()
921 unsigned int fd = *ret_fd; in task_lookup_next_fd_rcu() local
927 for (; fd < files_fdtable(files)->max_fds; fd++) { in task_lookup_next_fd_rcu()
928 file = files_lookup_fd_rcu(files, fd); in task_lookup_next_fd_rcu()
934 *ret_fd = fd; in task_lookup_next_fd_rcu()
954 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
960 file = files_lookup_fd_raw(files, fd); in __fget_light()
965 file = __fget(fd, mask, 1); in __fget_light()
971 unsigned long __fdget(unsigned int fd) in __fdget() argument
973 return __fget_light(fd, FMODE_PATH); in __fdget()
977 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
979 return __fget_light(fd, 0); in __fdget_raw()
982 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
984 unsigned long v = __fdget(fd); in __fdget_pos()
1007 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
1014 __set_close_on_exec(fd, fdt); in set_close_on_exec()
1016 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
1020 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
1027 res = close_on_exec(fd, fdt); in get_close_on_exec()
1033 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
1054 tofree = fdt->fd[fd]; in do_dup2()
1055 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
1058 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
1059 __set_open_fd(fd, fdt); in do_dup2()
1061 __set_close_on_exec(fd, fdt); in do_dup2()
1063 __clear_close_on_exec(fd, fdt); in do_dup2()
1069 return fd; in do_dup2()
1076 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
1082 return close_fd(fd); in replace_fd()
1084 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
1088 err = expand_files(files, fd); in replace_fd()
1091 return do_dup2(files, file, fd, flags); in replace_fd()
1253 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()