OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [file.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * Wrapper functions for accessing the file_struct fd array.
3
 */
4
 
5
#ifndef __LINUX_FILE_H
6
#define __LINUX_FILE_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
extern void FASTCALL(__fput(struct file *));
63
extern void FASTCALL(fput(struct file *));
64
 
65
struct file_operations;
66
struct vfsmount;
67
struct dentry;
68
extern int init_file(struct file *, struct vfsmount *mnt,
69
                struct dentry *dentry, mode_t mode,
70
                const struct file_operations *fop);
71
extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry,
72
                mode_t mode, const struct file_operations *fop);
73
 
74
static inline void fput_light(struct file *file, int fput_needed)
75
{
76
        if (unlikely(fput_needed))
77
                fput(file);
78
}
79
 
80
extern struct file * FASTCALL(fget(unsigned int fd));
81
extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed));
82
extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag));
83
extern void put_filp(struct file *);
84
extern int get_unused_fd(void);
85
extern int get_unused_fd_flags(int flags);
86
extern void FASTCALL(put_unused_fd(unsigned int fd));
87
struct kmem_cache;
88
 
89
extern int expand_files(struct files_struct *, int nr);
90
extern void free_fdtable_rcu(struct rcu_head *rcu);
91
extern void __init files_defer_init(void);
92
 
93
static inline void free_fdtable(struct fdtable *fdt)
94
{
95
        call_rcu(&fdt->rcu, free_fdtable_rcu);
96
}
97
 
98
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
99
{
100
        struct file * file = NULL;
101
        struct fdtable *fdt = files_fdtable(files);
102
 
103
        if (fd < fdt->max_fds)
104
                file = rcu_dereference(fdt->fd[fd]);
105
        return file;
106
}
107
 
108
/*
109
 * Check whether the specified fd has an open file.
110
 */
111
#define fcheck(fd)      fcheck_files(current->files, fd)
112
 
113
extern void FASTCALL(fd_install(unsigned int fd, struct file * file));
114
 
115
struct task_struct;
116
 
117
struct files_struct *get_files_struct(struct task_struct *);
118
void FASTCALL(put_files_struct(struct files_struct *fs));
119
void reset_files_struct(struct task_struct *, struct files_struct *);
120
 
121
extern struct kmem_cache *files_cachep;
122
 
123
#endif /* __LINUX_FILE_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.