Lines Matching refs:fd
49 kvfree(fdt->fd); in __free_fdtable()
97 memcpy(nfdt->fd, ofdt->fd, cpy); in copy_fdtable()
98 memset((char *)nfdt->fd + cpy, 0, set); in copy_fdtable()
136 fdt->fd = data; in alloc_fdtable()
151 kvfree(fdt->fd); in alloc_fdtable()
245 static inline void __set_close_on_exec(int fd, struct fdtable *fdt) in __set_close_on_exec() argument
247 __set_bit(fd, fdt->close_on_exec); in __set_close_on_exec()
250 static inline void __clear_close_on_exec(int fd, struct fdtable *fdt) in __clear_close_on_exec() argument
252 if (test_bit(fd, fdt->close_on_exec)) in __clear_close_on_exec()
253 __clear_bit(fd, fdt->close_on_exec); in __clear_close_on_exec()
256 static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt) in __set_open_fd() argument
258 __set_bit(fd, fdt->open_fds); in __set_open_fd()
259 fd /= BITS_PER_LONG; in __set_open_fd()
260 if (!~fdt->open_fds[fd]) in __set_open_fd()
261 __set_bit(fd, fdt->full_fds_bits); in __set_open_fd()
264 static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt) in __clear_open_fd() argument
266 __clear_bit(fd, fdt->open_fds); in __clear_open_fd()
267 __clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits); in __clear_open_fd()
312 new_fdt->fd = &newf->fd_array[0]; in dup_fd()
352 old_fds = old_fdt->fd; in dup_fd()
353 new_fds = new_fdt->fd; in dup_fd()
403 struct file * file = xchg(&fdt->fd[i], NULL); in close_files()
471 .fd = &init_files.fd_array[0],
499 unsigned int fd; in __alloc_fd() local
506 fd = start; in __alloc_fd()
507 if (fd < files->next_fd) in __alloc_fd()
508 fd = files->next_fd; in __alloc_fd()
510 if (fd < fdt->max_fds) in __alloc_fd()
511 fd = find_next_fd(fdt, fd); in __alloc_fd()
518 if (fd >= end) in __alloc_fd()
521 error = expand_files(files, fd); in __alloc_fd()
533 files->next_fd = fd + 1; in __alloc_fd()
535 __set_open_fd(fd, fdt); in __alloc_fd()
537 __set_close_on_exec(fd, fdt); in __alloc_fd()
539 __clear_close_on_exec(fd, fdt); in __alloc_fd()
540 error = fd; in __alloc_fd()
543 if (rcu_access_pointer(fdt->fd[fd]) != NULL) { in __alloc_fd()
544 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); in __alloc_fd()
545 rcu_assign_pointer(fdt->fd[fd], NULL); in __alloc_fd()
565 static void __put_unused_fd(struct files_struct *files, unsigned int fd) in __put_unused_fd() argument
568 __clear_open_fd(fd, fdt); in __put_unused_fd()
569 if (fd < files->next_fd) in __put_unused_fd()
570 files->next_fd = fd; in __put_unused_fd()
573 void put_unused_fd(unsigned int fd) in put_unused_fd() argument
577 __put_unused_fd(files, fd); in put_unused_fd()
603 void __fd_install(struct files_struct *files, unsigned int fd, in __fd_install() argument
619 BUG_ON(fdt->fd[fd] != NULL); in __fd_install()
620 rcu_assign_pointer(fdt->fd[fd], file); in __fd_install()
624 void fd_install(unsigned int fd, struct file *file) in fd_install() argument
626 __fd_install(current->files, fd, file); in fd_install()
634 int __close_fd(struct files_struct *files, unsigned fd) in __close_fd() argument
641 if (fd >= fdt->max_fds) in __close_fd()
643 file = fdt->fd[fd]; in __close_fd()
646 rcu_assign_pointer(fdt->fd[fd], NULL); in __close_fd()
647 __clear_close_on_exec(fd, fdt); in __close_fd()
648 __put_unused_fd(files, fd); in __close_fd()
666 unsigned fd = i * BITS_PER_LONG; in do_close_on_exec() local
668 if (fd >= fdt->max_fds) in do_close_on_exec()
674 for ( ; set ; fd++, set >>= 1) { in do_close_on_exec()
678 file = fdt->fd[fd]; in do_close_on_exec()
681 rcu_assign_pointer(fdt->fd[fd], NULL); in do_close_on_exec()
682 __put_unused_fd(files, fd); in do_close_on_exec()
693 static struct file *__fget(unsigned int fd, fmode_t mask) in __fget() argument
700 file = fcheck_files(files, fd); in __fget()
716 struct file *fget(unsigned int fd) in fget() argument
718 return __fget(fd, FMODE_PATH); in fget()
722 struct file *fget_raw(unsigned int fd) in fget_raw() argument
724 return __fget(fd, 0); in fget_raw()
744 static unsigned long __fget_light(unsigned int fd, fmode_t mask) in __fget_light() argument
750 file = __fcheck_files(files, fd); in __fget_light()
755 file = __fget(fd, mask); in __fget_light()
761 unsigned long __fdget(unsigned int fd) in __fdget() argument
763 return __fget_light(fd, FMODE_PATH); in __fdget()
767 unsigned long __fdget_raw(unsigned int fd) in __fdget_raw() argument
769 return __fget_light(fd, 0); in __fdget_raw()
772 unsigned long __fdget_pos(unsigned int fd) in __fdget_pos() argument
774 unsigned long v = __fdget(fd); in __fdget_pos()
792 void set_close_on_exec(unsigned int fd, int flag) in set_close_on_exec() argument
799 __set_close_on_exec(fd, fdt); in set_close_on_exec()
801 __clear_close_on_exec(fd, fdt); in set_close_on_exec()
805 bool get_close_on_exec(unsigned int fd) in get_close_on_exec() argument
812 res = close_on_exec(fd, fdt); in get_close_on_exec()
818 struct file *file, unsigned fd, unsigned flags) in do_dup2() argument
839 tofree = fdt->fd[fd]; in do_dup2()
840 if (!tofree && fd_is_open(fd, fdt)) in do_dup2()
843 rcu_assign_pointer(fdt->fd[fd], file); in do_dup2()
844 __set_open_fd(fd, fdt); in do_dup2()
846 __set_close_on_exec(fd, fdt); in do_dup2()
848 __clear_close_on_exec(fd, fdt); in do_dup2()
854 return fd; in do_dup2()
861 int replace_fd(unsigned fd, struct file *file, unsigned flags) in replace_fd() argument
867 return __close_fd(files, fd); in replace_fd()
869 if (fd >= rlimit(RLIMIT_NOFILE)) in replace_fd()
873 err = expand_files(files, fd); in replace_fd()
876 return do_dup2(files, file, fd, flags); in replace_fd()
971 file = rcu_dereference_check_fdtable(files, fdt->fd[n]); in iterate_fd()