Lines Matching refs:fd
31 kvfree(fdt->fd); in __free_fdtable()
79 memcpy(nfdt->fd, ofdt->fd, cpy); in copy_fdtable()
80 memset((char *)nfdt->fd + cpy, 0, set); in copy_fdtable()
118 fdt->fd = data; in alloc_fdtable()
134 kvfree(fdt->fd); in alloc_fdtable()
228 static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt) in __set_close_on_exec() argument
230 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
233 static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
235 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
236 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
239 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
241 __set_bit(fd, fdt->open_fds); in __set_open_fd()
242 fd /= BITS_PER_LONG; in __set_open_fd()
243 if (!~fdt->open_fds[fd]) in __set_open_fd()
244 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
247 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
249 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
250 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
295 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
335 old_fds = old_fdt->fd; in dup_fd()
336 new_fds = new_fdt->fd; in dup_fd()
386 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
454 .fd = &init_files.fd_array[0],
482 unsigned int fd; in __alloc_fd() local
489 fd = start; in __alloc_fd()
490 if (fd < files->next_fd) in __alloc_fd()
491 fd = files->next_fd; in __alloc_fd()
493 if (fd < fdt->max_fds) in __alloc_fd()
494 fd = find_next_fd(fdt, fd); in __alloc_fd()
501 if (fd >= end) in __alloc_fd()
504 error = expand_files(files, fd); in __alloc_fd()
516 files->next_fd = fd + 1; in __alloc_fd()
518 __set_open_fd(fd, fdt); in __alloc_fd()
520 __set_close_on_exec(fd, fdt); in __alloc_fd()
522 __clear_close_on_exec(fd, fdt); in __alloc_fd()
523 error = fd; in __alloc_fd()
526 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in __alloc_fd()
527 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in __alloc_fd()
528 rcu_assign_pointer(fdt->fd[fd], NULL); in __alloc_fd()
548 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
551 __clear_open_fd(fd, fdt); in __put_unused_fd()
552 if (fd < files->next_fd) in __put_unused_fd()
553 files->next_fd = fd; in __put_unused_fd()
556 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
560 __put_unused_fd(files, fd); in put_unused_fd()
586 void __fd_install(struct files_struct *files, unsigned int fd, in __fd_install() argument
597 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
598 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
605 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
606 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
610 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
612 __fd_install(current->files, fd, file); in fd_install()
620 int __close_fd(struct files_struct *files, unsigned fd) in __close_fd() argument
627 if (fd >= fdt->max_fds) in __close_fd()
629 file = fdt->fd[fd]; in __close_fd()
632 rcu_assign_pointer(fdt->fd[fd], NULL); in __close_fd()
633 __put_unused_fd(files, fd); in __close_fd()
652 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
654 if (fd >= fdt->max_fds) in do_close_on_exec()
660 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
664 file = fdt->fd[fd]; in do_close_on_exec()
667 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
668 __put_unused_fd(files, fd); in do_close_on_exec()
679 static struct file *__fget(unsigned int fd, fmode_t mask) in __fget() argument
686 file = fcheck_files(files, fd); in __fget()
702 struct file *fget(unsigned int fd) in fget() argument
704 return __fget(fd, FMODE_PATH); in fget()
708 struct file *fget_raw(unsigned int fd) in fget_raw() argument
710 return __fget(fd, 0); in fget_raw()
730 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
736 file = __fcheck_files(files, fd); in __fget_light()
741 file = __fget(fd, mask); in __fget_light()
747 unsigned long __fdget(unsigned int fd) in __fdget() argument
749 return __fget_light(fd, FMODE_PATH); in __fdget()
753 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
755 return __fget_light(fd, 0); in __fdget_raw()
758 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
760 unsigned long v = __fdget(fd); in __fdget_pos()
783 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
790 __set_close_on_exec(fd, fdt); in set_close_on_exec()
792 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
796 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
803 res = close_on_exec(fd, fdt); in get_close_on_exec()
809 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
830 tofree = fdt->fd[fd]; in do_dup2()
831 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
834 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
835 __set_open_fd(fd, fdt); in do_dup2()
837 __set_close_on_exec(fd, fdt); in do_dup2()
839 __clear_close_on_exec(fd, fdt); in do_dup2()
845 return fd; in do_dup2()
852 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
858 return __close_fd(files, fd); in replace_fd()
860 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
864 err = expand_files(files, fd); in replace_fd()
867 return do_dup2(files, file, fd, flags); in replace_fd()
972 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()