Blame view
include/linux/file.h
2.78 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 |
/* * Wrapper functions for accessing the file_struct fd array. */ #ifndef __LINUX_FILE_H #define __LINUX_FILE_H #include <asm/atomic.h> #include <linux/posix_types.h> #include <linux/compiler.h> #include <linux/spinlock.h> |
ab2af1f50 [PATCH] files: fi... |
12 |
#include <linux/rcupdate.h> |
0c9e63fd3 [PATCH] Shrinks s... |
13 |
#include <linux/types.h> |
1da177e4c Linux-2.6.12-rc2 |
14 15 16 17 18 19 |
/* * The default fd array needs to be at least BITS_PER_LONG, * as this is the granularity returned by copy_fdset(). */ #define NR_OPEN_DEFAULT BITS_PER_LONG |
0c9e63fd3 [PATCH] Shrinks s... |
20 21 22 23 24 25 26 |
/* * The embedded_fd_set is a small fd_set, * suitable for most tasks (which open <= BITS_PER_LONG files) */ struct embedded_fd_set { unsigned long fds_bits[1]; }; |
badf16621 [PATCH] files: br... |
27 28 |
struct fdtable { unsigned int max_fds; |
badf16621 [PATCH] files: br... |
29 30 31 |
struct file ** fd; /* current fd array */ fd_set *close_on_exec; fd_set *open_fds; |
ab2af1f50 [PATCH] files: fi... |
32 |
struct rcu_head rcu; |
ab2af1f50 [PATCH] files: fi... |
33 |
struct fdtable *next; |
badf16621 [PATCH] files: br... |
34 |
}; |
1da177e4c Linux-2.6.12-rc2 |
35 36 37 38 |
/* * Open file table structure */ struct files_struct { |
0c9e63fd3 [PATCH] Shrinks s... |
39 40 41 |
/* * read mostly part */ |
95e861db3 [PATCH] reorder s... |
42 |
atomic_t count; |
ab2af1f50 [PATCH] files: fi... |
43 |
struct fdtable *fdt; |
badf16621 [PATCH] files: br... |
44 |
struct fdtable fdtab; |
0c9e63fd3 [PATCH] Shrinks s... |
45 46 47 48 49 50 51 |
/* * written part on a separate cache line in SMP */ spinlock_t file_lock ____cacheline_aligned_in_smp; int next_fd; struct embedded_fd_set close_on_exec_init; struct embedded_fd_set open_fds_init; |
95e861db3 [PATCH] reorder s... |
52 |
struct file * fd_array[NR_OPEN_DEFAULT]; |
1da177e4c Linux-2.6.12-rc2 |
53 |
}; |
ab2af1f50 [PATCH] files: fi... |
54 |
#define files_fdtable(files) (rcu_dereference((files)->fdt)) |
badf16621 [PATCH] files: br... |
55 |
|
8b7d91eb7 [PATCH] Move file... |
56 |
extern struct kmem_cache *filp_cachep; |
1da177e4c Linux-2.6.12-rc2 |
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
extern void FASTCALL(__fput(struct file *)); extern void FASTCALL(fput(struct file *)); static inline void fput_light(struct file *file, int fput_needed) { if (unlikely(fput_needed)) fput(file); } extern struct file * FASTCALL(fget(unsigned int fd)); extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed)); extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag)); extern void put_filp(struct file *); extern int get_unused_fd(void); |
4a19542e5 O_CLOEXEC for SCM... |
71 |
extern int get_unused_fd_flags(int flags); |
1da177e4c Linux-2.6.12-rc2 |
72 |
extern void FASTCALL(put_unused_fd(unsigned int fd)); |
2109a2d1b [PATCH] mm: renam... |
73 |
struct kmem_cache; |
1da177e4c Linux-2.6.12-rc2 |
74 |
|
1da177e4c Linux-2.6.12-rc2 |
75 |
extern int expand_files(struct files_struct *, int nr); |
4fd45812c [PATCH] fdtable: ... |
76 |
extern void free_fdtable_rcu(struct rcu_head *rcu); |
ab2af1f50 [PATCH] files: fi... |
77 |
extern void __init files_defer_init(void); |
1da177e4c Linux-2.6.12-rc2 |
78 |
|
01b2d93ca [PATCH] fdtable: ... |
79 80 81 82 |
static inline void free_fdtable(struct fdtable *fdt) { call_rcu(&fdt->rcu, free_fdtable_rcu); } |
1da177e4c Linux-2.6.12-rc2 |
83 84 85 |
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) { struct file * file = NULL; |
badf16621 [PATCH] files: br... |
86 |
struct fdtable *fdt = files_fdtable(files); |
1da177e4c Linux-2.6.12-rc2 |
87 |
|
badf16621 [PATCH] files: br... |
88 |
if (fd < fdt->max_fds) |
ab2af1f50 [PATCH] files: fi... |
89 |
file = rcu_dereference(fdt->fd[fd]); |
1da177e4c Linux-2.6.12-rc2 |
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
return file; } /* * Check whether the specified fd has an open file. */ #define fcheck(fd) fcheck_files(current->files, fd) extern void FASTCALL(fd_install(unsigned int fd, struct file * file)); struct task_struct; struct files_struct *get_files_struct(struct task_struct *); void FASTCALL(put_files_struct(struct files_struct *fs)); |
3b9b8ab65 [PATCH] Fix unser... |
104 |
void reset_files_struct(struct task_struct *, struct files_struct *); |
1da177e4c Linux-2.6.12-rc2 |
105 |
|
5d6538fcf [PATCH] Move file... |
106 |
extern struct kmem_cache *files_cachep; |
1da177e4c Linux-2.6.12-rc2 |
107 |
#endif /* __LINUX_FILE_H */ |