Lines Matching refs:fd
35 kvfree(fdt->fd); in __free_fdtable()
83 memcpy(nfdt->fd, ofdt->fd, cpy); in copy_fdtable()
84 memset((char *)nfdt->fd + cpy, 0, set); in copy_fdtable()
122 fdt->fd = data; in alloc_fdtable()
138 kvfree(fdt->fd); in alloc_fdtable()
232 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt) in __set_close_on_exec() argument
234 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
237 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
239 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
240 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
243 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
245 __set_bit(fd, fdt->open_fds); in __set_open_fd()
246 fd /= BITS_PER_LONG; in __set_open_fd()
247 if (!~fdt->open_fds[fd]) in __set_open_fd()
248 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
251 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
253 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
254 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
309 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
349 old_fds = old_fdt->fd; in dup_fd()
350 new_fds = new_fdt->fd; in dup_fd()
400 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
469 .fd = &init_files.fd_array[0],
498 unsigned int fd; in __alloc_fd() local
505 fd = start; in __alloc_fd()
506 if (fd < files->next_fd) in __alloc_fd()
507 fd = files->next_fd; in __alloc_fd()
509 if (fd < fdt->max_fds) in __alloc_fd()
510 fd = find_next_fd(fdt, fd); in __alloc_fd()
517 if (fd >= end) in __alloc_fd()
520 error = expand_files(files, fd); in __alloc_fd()
532 files->next_fd = fd + 1; in __alloc_fd()
534 __set_open_fd(fd, fdt); in __alloc_fd()
536 __set_close_on_exec(fd, fdt); in __alloc_fd()
538 __clear_close_on_exec(fd, fdt); in __alloc_fd()
539 error = fd; in __alloc_fd()
542 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in __alloc_fd()
543 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in __alloc_fd()
544 rcu_assign_pointer(fdt->fd[fd], NULL); in __alloc_fd()
569 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
572 __clear_open_fd(fd, fdt); in __put_unused_fd()
573 if (fd < files->next_fd) in __put_unused_fd()
574 files->next_fd = fd; in __put_unused_fd()
577 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
581 __put_unused_fd(files, fd); in put_unused_fd()
607 void __fd_install(struct files_struct *files, unsigned int fd, in __fd_install() argument
618 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
619 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
626 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
627 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
635 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
637 __fd_install(current->files, fd, file); in fd_install()
642 static struct file *pick_file(struct files_struct *files, unsigned fd) in pick_file() argument
649 if (fd >= fdt->max_fds) in pick_file()
651 file = fdt->fd[fd]; in pick_file()
654 rcu_assign_pointer(fdt->fd[fd], NULL); in pick_file()
655 __put_unused_fd(files, fd); in pick_file()
665 int __close_fd(struct files_struct *files, unsigned fd) in __close_fd() argument
669 file = pick_file(files, fd); in __close_fd()
686 int __close_range(unsigned fd, unsigned max_fd, unsigned int flags) in __close_range() argument
695 if (fd > max_fd) in __close_range()
715 max_unshare_fds = fd; in __close_range()
730 while (fd <= max_fd) { in __close_range()
733 file = pick_file(cur_fds, fd++); in __close_range()
760 int __close_fd_get_file(unsigned int fd, struct file **res) in __close_fd_get_file() argument
768 if (fd >= fdt->max_fds) in __close_fd_get_file()
770 file = fdt->fd[fd]; in __close_fd_get_file()
773 rcu_assign_pointer(fdt->fd[fd], NULL); in __close_fd_get_file()
774 __put_unused_fd(files, fd); in __close_fd_get_file()
795 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
797 if (fd >= fdt->max_fds) in do_close_on_exec()
803 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
807 file = fdt->fd[fd]; in do_close_on_exec()
810 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
811 __put_unused_fd(files, fd); in do_close_on_exec()
822 static struct file *__fget_files(struct files_struct *files, unsigned int fd, in __fget_files() argument
829 file = fcheck_files(files, fd); in __fget_files()
845 static inline struct file *__fget(unsigned int fd, fmode_t mask, in __fget() argument
848 return __fget_files(current->files, fd, mask, refs); in __fget()
851 struct file *fget_many(unsigned int fd, unsigned int refs) in fget_many() argument
853 return __fget(fd, FMODE_PATH, refs); in fget_many()
856 struct file *fget(unsigned int fd) in fget() argument
858 return __fget(fd, FMODE_PATH, 1); in fget()
862 struct file *fget_raw(unsigned int fd) in fget_raw() argument
864 return __fget(fd, 0, 1); in fget_raw()
868 struct file *fget_task(struct task_struct *task, unsigned int fd) in fget_task() argument
874 file = __fget_files(task->files, fd, 0, 1); in fget_task()
896 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
902 file = __fcheck_files(files, fd); in __fget_light()
907 file = __fget(fd, mask, 1); in __fget_light()
913 unsigned long __fdget(unsigned int fd) in __fdget() argument
915 return __fget_light(fd, FMODE_PATH); in __fdget()
919 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
921 return __fget_light(fd, 0); in __fdget_raw()
924 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
926 unsigned long v = __fdget(fd); in __fdget_pos()
949 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
956 __set_close_on_exec(fd, fdt); in set_close_on_exec()
958 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
962 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
969 res = close_on_exec(fd, fdt); in get_close_on_exec()
975 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
996 tofree = fdt->fd[fd]; in do_dup2()
997 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
1000 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
1001 __set_open_fd(fd, fdt); in do_dup2()
1003 __set_close_on_exec(fd, fdt); in do_dup2()
1005 __clear_close_on_exec(fd, fdt); in do_dup2()
1011 return fd; in do_dup2()
1018 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
1024 return __close_fd(files, fd); in replace_fd()
1026 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
1030 err = expand_files(files, fd); in replace_fd()
1033 return do_dup2(files, file, fd, flags); in replace_fd()
1057 int __receive_fd(int fd, struct file *file, int __user *ufd, unsigned int o_flags) in __receive_fd() argument
1066 if (fd < 0) { in __receive_fd()
1071 new_fd = fd; in __receive_fd()
1077 if (fd < 0) in __receive_fd()
1083 if (fd < 0) { in __receive_fd()
1189 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()