Commit 9f3acc3140444a900ab280de942291959f0f615d

Authored by Al Viro
1 parent a2dcb44c3c

[PATCH] split linux/file.h

Initial splitoff of the low-level stuff; taken to fdtable.h

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 22 changed files with 121 additions and 86 deletions Side-by-side Diff

arch/mips/kernel/kspd.c
... ... @@ -20,6 +20,7 @@
20 20 #include <linux/sched.h>
21 21 #include <linux/unistd.h>
22 22 #include <linux/file.h>
  23 +#include <linux/fdtable.h>
23 24 #include <linux/fs.h>
24 25 #include <linux/syscalls.h>
25 26 #include <linux/workqueue.h>
arch/powerpc/platforms/cell/spufs/coredump.c
... ... @@ -22,6 +22,7 @@
22 22  
23 23 #include <linux/elf.h>
24 24 #include <linux/file.h>
  25 +#include <linux/fdtable.h>
25 26 #include <linux/fs.h>
26 27 #include <linux/list.h>
27 28 #include <linux/module.h>
drivers/char/tty_audit.c
... ... @@ -11,6 +11,7 @@
11 11  
12 12 #include <linux/audit.h>
13 13 #include <linux/file.h>
  14 +#include <linux/fdtable.h>
14 15 #include <linux/tty.h>
15 16  
16 17 struct tty_audit_buf {
drivers/char/tty_io.c
... ... @@ -78,6 +78,7 @@
78 78 #include <linux/tty_flip.h>
79 79 #include <linux/devpts_fs.h>
80 80 #include <linux/file.h>
  81 +#include <linux/fdtable.h>
81 82 #include <linux/console.h>
82 83 #include <linux/timer.h>
83 84 #include <linux/ctype.h>
... ... @@ -24,6 +24,7 @@
24 24 #include <linux/fcntl.h>
25 25 #include <linux/namei.h>
26 26 #include <linux/file.h>
  27 +#include <linux/fdtable.h>
27 28 #include <linux/vfs.h>
28 29 #include <linux/ioctl.h>
29 30 #include <linux/init.h>
... ... @@ -20,7 +20,7 @@
20 20 #include <linux/init.h>
21 21 #include <linux/spinlock.h>
22 22 #include <linux/slab.h>
23   -#include <linux/file.h>
  23 +#include <linux/fdtable.h>
24 24  
25 25 int dir_notify_enable __read_mostly = 1;
26 26  
... ... @@ -24,6 +24,7 @@
24 24  
25 25 #include <linux/slab.h>
26 26 #include <linux/file.h>
  27 +#include <linux/fdtable.h>
27 28 #include <linux/mman.h>
28 29 #include <linux/a.out.h>
29 30 #include <linux/stat.h>
... ... @@ -9,6 +9,7 @@
9 9 #include <linux/mm.h>
10 10 #include <linux/fs.h>
11 11 #include <linux/file.h>
  12 +#include <linux/fdtable.h>
12 13 #include <linux/capability.h>
13 14 #include <linux/dnotify.h>
14 15 #include <linux/smp_lock.h>
... ... @@ -12,6 +12,7 @@
12 12 #include <linux/slab.h>
13 13 #include <linux/vmalloc.h>
14 14 #include <linux/file.h>
  15 +#include <linux/fdtable.h>
15 16 #include <linux/bitops.h>
16 17 #include <linux/interrupt.h>
17 18 #include <linux/spinlock.h>
... ... @@ -8,6 +8,7 @@
8 8 #include <linux/string.h>
9 9 #include <linux/slab.h>
10 10 #include <linux/file.h>
  11 +#include <linux/fdtable.h>
11 12 #include <linux/init.h>
12 13 #include <linux/module.h>
13 14 #include <linux/fs.h>
... ... @@ -116,6 +116,7 @@
116 116  
117 117 #include <linux/capability.h>
118 118 #include <linux/file.h>
  119 +#include <linux/fdtable.h>
119 120 #include <linux/fs.h>
120 121 #include <linux/init.h>
121 122 #include <linux/module.h>
... ... @@ -7,6 +7,7 @@
7 7 #include <linux/string.h>
8 8 #include <linux/mm.h>
9 9 #include <linux/file.h>
  10 +#include <linux/fdtable.h>
10 11 #include <linux/quotaops.h>
11 12 #include <linux/fsnotify.h>
12 13 #include <linux/module.h>
... ... @@ -73,6 +73,7 @@
73 73 #include <linux/signal.h>
74 74 #include <linux/highmem.h>
75 75 #include <linux/file.h>
  76 +#include <linux/fdtable.h>
76 77 #include <linux/times.h>
77 78 #include <linux/cpuset.h>
78 79 #include <linux/rcupdate.h>
... ... @@ -56,6 +56,7 @@
56 56 #include <linux/init.h>
57 57 #include <linux/capability.h>
58 58 #include <linux/file.h>
  59 +#include <linux/fdtable.h>
59 60 #include <linux/string.h>
60 61 #include <linux/seq_file.h>
61 62 #include <linux/namei.h>
... ... @@ -21,6 +21,7 @@
21 21 #include <linux/poll.h>
22 22 #include <linux/personality.h> /* for STICKY_TIMEOUTS */
23 23 #include <linux/file.h>
  24 +#include <linux/fdtable.h>
24 25 #include <linux/fs.h>
25 26 #include <linux/rcupdate.h>
26 27  
include/linux/fdtable.h
  1 +/*
  2 + * descriptor table internals; you almost certainly want file.h instead.
  3 + */
  4 +
  5 +#ifndef __LINUX_FDTABLE_H
  6 +#define __LINUX_FDTABLE_H
  7 +
  8 +#include <asm/atomic.h>
  9 +#include <linux/posix_types.h>
  10 +#include <linux/compiler.h>
  11 +#include <linux/spinlock.h>
  12 +#include <linux/rcupdate.h>
  13 +#include <linux/types.h>
  14 +
  15 +/*
  16 + * The default fd array needs to be at least BITS_PER_LONG,
  17 + * as this is the granularity returned by copy_fdset().
  18 + */
  19 +#define NR_OPEN_DEFAULT BITS_PER_LONG
  20 +
  21 +/*
  22 + * The embedded_fd_set is a small fd_set,
  23 + * suitable for most tasks (which open <= BITS_PER_LONG files)
  24 + */
  25 +struct embedded_fd_set {
  26 + unsigned long fds_bits[1];
  27 +};
  28 +
  29 +struct fdtable {
  30 + unsigned int max_fds;
  31 + struct file ** fd; /* current fd array */
  32 + fd_set *close_on_exec;
  33 + fd_set *open_fds;
  34 + struct rcu_head rcu;
  35 + struct fdtable *next;
  36 +};
  37 +
  38 +/*
  39 + * Open file table structure
  40 + */
  41 +struct files_struct {
  42 + /*
  43 + * read mostly part
  44 + */
  45 + atomic_t count;
  46 + struct fdtable *fdt;
  47 + struct fdtable fdtab;
  48 + /*
  49 + * written part on a separate cache line in SMP
  50 + */
  51 + spinlock_t file_lock ____cacheline_aligned_in_smp;
  52 + int next_fd;
  53 + struct embedded_fd_set close_on_exec_init;
  54 + struct embedded_fd_set open_fds_init;
  55 + struct file * fd_array[NR_OPEN_DEFAULT];
  56 +};
  57 +
  58 +#define files_fdtable(files) (rcu_dereference((files)->fdt))
  59 +
  60 +extern struct kmem_cache *filp_cachep;
  61 +
  62 +struct file_operations;
  63 +struct vfsmount;
  64 +struct dentry;
  65 +
  66 +extern int expand_files(struct files_struct *, int nr);
  67 +extern void free_fdtable_rcu(struct rcu_head *rcu);
  68 +extern void __init files_defer_init(void);
  69 +
  70 +static inline void free_fdtable(struct fdtable *fdt)
  71 +{
  72 + call_rcu(&fdt->rcu, free_fdtable_rcu);
  73 +}
  74 +
  75 +static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
  76 +{
  77 + struct file * file = NULL;
  78 + struct fdtable *fdt = files_fdtable(files);
  79 +
  80 + if (fd < fdt->max_fds)
  81 + file = rcu_dereference(fdt->fd[fd]);
  82 + return file;
  83 +}
  84 +
  85 +/*
  86 + * Check whether the specified fd has an open file.
  87 + */
  88 +#define fcheck(fd) fcheck_files(current->files, fd)
  89 +
  90 +struct task_struct;
  91 +
  92 +struct files_struct *get_files_struct(struct task_struct *);
  93 +void put_files_struct(struct files_struct *fs);
  94 +void reset_files_struct(struct files_struct *);
  95 +int unshare_files(struct files_struct **);
  96 +
  97 +extern struct kmem_cache *files_cachep;
  98 +
  99 +#endif /* __LINUX_FDTABLE_H */
include/linux/file.h
... ... @@ -5,60 +5,12 @@
5 5 #ifndef __LINUX_FILE_H
6 6 #define __LINUX_FILE_H
7 7  
8   -#include <asm/atomic.h>
9   -#include <linux/posix_types.h>
10 8 #include <linux/compiler.h>
11   -#include <linux/spinlock.h>
12   -#include <linux/rcupdate.h>
13 9 #include <linux/types.h>
  10 +#include <linux/posix_types.h>
14 11  
15   -/*
16   - * The default fd array needs to be at least BITS_PER_LONG,
17   - * as this is the granularity returned by copy_fdset().
18   - */
19   -#define NR_OPEN_DEFAULT BITS_PER_LONG
  12 +struct file;
20 13  
21   -/*
22   - * The embedded_fd_set is a small fd_set,
23   - * suitable for most tasks (which open <= BITS_PER_LONG files)
24   - */
25   -struct embedded_fd_set {
26   - unsigned long fds_bits[1];
27   -};
28   -
29   -struct fdtable {
30   - unsigned int max_fds;
31   - struct file ** fd; /* current fd array */
32   - fd_set *close_on_exec;
33   - fd_set *open_fds;
34   - struct rcu_head rcu;
35   - struct fdtable *next;
36   -};
37   -
38   -/*
39   - * Open file table structure
40   - */
41   -struct files_struct {
42   - /*
43   - * read mostly part
44   - */
45   - atomic_t count;
46   - struct fdtable *fdt;
47   - struct fdtable fdtab;
48   - /*
49   - * written part on a separate cache line in SMP
50   - */
51   - spinlock_t file_lock ____cacheline_aligned_in_smp;
52   - int next_fd;
53   - struct embedded_fd_set close_on_exec_init;
54   - struct embedded_fd_set open_fds_init;
55   - struct file * fd_array[NR_OPEN_DEFAULT];
56   -};
57   -
58   -#define files_fdtable(files) (rcu_dereference((files)->fdt))
59   -
60   -extern struct kmem_cache *filp_cachep;
61   -
62 14 extern void __fput(struct file *);
63 15 extern void fput(struct file *);
64 16 extern void drop_file_write_access(struct file *file);
65 17  
66 18  
... ... @@ -85,42 +37,8 @@
85 37 extern int get_unused_fd(void);
86 38 extern int get_unused_fd_flags(int flags);
87 39 extern void put_unused_fd(unsigned int fd);
88   -struct kmem_cache;
89 40  
90   -extern int expand_files(struct files_struct *, int nr);
91   -extern void free_fdtable_rcu(struct rcu_head *rcu);
92   -extern void __init files_defer_init(void);
93   -
94   -static inline void free_fdtable(struct fdtable *fdt)
95   -{
96   - call_rcu(&fdt->rcu, free_fdtable_rcu);
97   -}
98   -
99   -static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
100   -{
101   - struct file * file = NULL;
102   - struct fdtable *fdt = files_fdtable(files);
103   -
104   - if (fd < fdt->max_fds)
105   - file = rcu_dereference(fdt->fd[fd]);
106   - return file;
107   -}
108   -
109   -/*
110   - * Check whether the specified fd has an open file.
111   - */
112   -#define fcheck(fd) fcheck_files(current->files, fd)
113   -
114 41 extern void fd_install(unsigned int fd, struct file *file);
115   -
116   -struct task_struct;
117   -
118   -struct files_struct *get_files_struct(struct task_struct *);
119   -void put_files_struct(struct files_struct *fs);
120   -void reset_files_struct(struct files_struct *);
121   -int unshare_files(struct files_struct **);
122   -
123   -extern struct kmem_cache *files_cachep;
124 42  
125 43 #endif /* __LINUX_FILE_H */
include/linux/init_task.h
1 1 #ifndef _LINUX__INIT_TASK_H
2 2 #define _LINUX__INIT_TASK_H
3 3  
4   -#include <linux/file.h>
  4 +#include <linux/fdtable.h>
5 5 #include <linux/rcupdate.h>
6 6 #include <linux/irqflags.h>
7 7 #include <linux/utsname.h>
... ... @@ -19,6 +19,7 @@
19 19 #include <linux/acct.h>
20 20 #include <linux/tsacct_kern.h>
21 21 #include <linux/file.h>
  22 +#include <linux/fdtable.h>
22 23 #include <linux/binfmts.h>
23 24 #include <linux/nsproxy.h>
24 25 #include <linux/pid_namespace.h>
... ... @@ -22,6 +22,7 @@
22 22 #include <linux/mempolicy.h>
23 23 #include <linux/sem.h>
24 24 #include <linux/file.h>
  25 +#include <linux/fdtable.h>
25 26 #include <linux/key.h>
26 27 #include <linux/binfmts.h>
27 28 #include <linux/mman.h>
... ... @@ -27,6 +27,7 @@
27 27 #include <linux/mnt_namespace.h>
28 28 #include <linux/completion.h>
29 29 #include <linux/file.h>
  30 +#include <linux/fdtable.h>
30 31 #include <linux/workqueue.h>
31 32 #include <linux/security.h>
32 33 #include <linux/mount.h>
security/selinux/hooks.c
... ... @@ -39,6 +39,7 @@
39 39 #include <linux/spinlock.h>
40 40 #include <linux/syscalls.h>
41 41 #include <linux/file.h>
  42 +#include <linux/fdtable.h>
42 43 #include <linux/namei.h>
43 44 #include <linux/mount.h>
44 45 #include <linux/ext2_fs.h>