Blame view

include/linux/file.h 2.78 KB
1da177e4c   Linus Torvalds   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   Dipankar Sarma   [PATCH] files: fi...
12
  #include <linux/rcupdate.h>
0c9e63fd3   Eric Dumazet   [PATCH] Shrinks s...
13
  #include <linux/types.h>
1da177e4c   Linus Torvalds   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   Eric Dumazet   [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   Dipankar Sarma   [PATCH] files: br...
27
28
  struct fdtable {
  	unsigned int max_fds;
badf16621   Dipankar Sarma   [PATCH] files: br...
29
30
31
  	struct file ** fd;      /* current fd array */
  	fd_set *close_on_exec;
  	fd_set *open_fds;
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
32
  	struct rcu_head rcu;
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
33
  	struct fdtable *next;
badf16621   Dipankar Sarma   [PATCH] files: br...
34
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
37
38
  /*
   * Open file table structure
   */
  struct files_struct {
0c9e63fd3   Eric Dumazet   [PATCH] Shrinks s...
39
40
41
    /*
     * read mostly part
     */
95e861db3   Eric Dumazet   [PATCH] reorder s...
42
  	atomic_t count;
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
43
  	struct fdtable *fdt;
badf16621   Dipankar Sarma   [PATCH] files: br...
44
  	struct fdtable fdtab;
0c9e63fd3   Eric Dumazet   [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   Eric Dumazet   [PATCH] reorder s...
52
  	struct file * fd_array[NR_OPEN_DEFAULT];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53
  };
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
54
  #define files_fdtable(files) (rcu_dereference((files)->fdt))
badf16621   Dipankar Sarma   [PATCH] files: br...
55

8b7d91eb7   Christoph Lameter   [PATCH] Move file...
56
  extern struct kmem_cache *filp_cachep;
1da177e4c   Linus Torvalds   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   Ulrich Drepper   O_CLOEXEC for SCM...
71
  extern int get_unused_fd_flags(int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
  extern void FASTCALL(put_unused_fd(unsigned int fd));
2109a2d1b   Pekka J Enberg   [PATCH] mm: renam...
73
  struct kmem_cache;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75
  extern int expand_files(struct files_struct *, int nr);
4fd45812c   Vadim Lobanov   [PATCH] fdtable: ...
76
  extern void free_fdtable_rcu(struct rcu_head *rcu);
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
77
  extern void __init files_defer_init(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
78

01b2d93ca   Vadim Lobanov   [PATCH] fdtable: ...
79
80
81
82
  static inline void free_fdtable(struct fdtable *fdt)
  {
  	call_rcu(&fdt->rcu, free_fdtable_rcu);
  }
1da177e4c   Linus Torvalds   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   Dipankar Sarma   [PATCH] files: br...
86
  	struct fdtable *fdt = files_fdtable(files);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87

badf16621   Dipankar Sarma   [PATCH] files: br...
88
  	if (fd < fdt->max_fds)
ab2af1f50   Dipankar Sarma   [PATCH] files: fi...
89
  		file = rcu_dereference(fdt->fd[fd]);
1da177e4c   Linus Torvalds   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   Kirill Korotaev   [PATCH] Fix unser...
104
  void reset_files_struct(struct task_struct *, struct files_struct *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105

5d6538fcf   Christoph Lameter   [PATCH] Move file...
106
  extern struct kmem_cache *files_cachep;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
  #endif /* __LINUX_FILE_H */