111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __LINUX_FILE_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __LINUX_FILE_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/atomic.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/posix_types.h>
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/compiler.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/spinlock.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/rcupdate.h>
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/types.h>
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NR_OPEN_DEFAULT BITS_PER_LONG
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct embedded_fd_set {
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long fds_bits[1];
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EMBEDDED_FD_SET_SIZE (BITS_PER_BYTE * sizeof(struct embedded_fd_set))
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct fdtable {
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int max_fds;
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int max_fdset;
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct file ** fd;
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fd_set *close_on_exec;
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fd_set *open_fds;
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct rcu_head rcu;
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct files_struct *free_files;
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct fdtable *next;
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct files_struct {
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert atomic_t count;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct fdtable *fdt;
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct fdtable fdtab;
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert spinlock_t file_lock ____cacheline_aligned_in_smp;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int next_fd;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct embedded_fd_set close_on_exec_init;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct embedded_fd_set open_fds_init;
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct file * fd_array[NR_OPEN_DEFAULT];
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define files_fdtable(files) (rcu_dereference((files)->fdt))
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct kmem_cache;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define fcheck(fd) fcheck_files(current->files, fd)
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct task_struct;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct files_struct *get_files_struct(struct task_struct *);
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
65