X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=include%2Flinux%2Ffile.h;h=335a0a5c316e4b8fa66864af63059fa59c3ad506;hb=4f005dbe5584fe54c9f6d6d4f0acd3fb29be84da;hp=6e77b9177f9e86ffd552fd9dcae491bc6715a6b1;hpb=8b7d91eb7f6a3e8f0caaa613937bda5ab7dc7dc2;p=safe%2Fjmp%2Flinux-2.6 diff --git a/include/linux/file.h b/include/linux/file.h index 6e77b91..335a0a5 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -5,69 +5,24 @@ #ifndef __LINUX_FILE_H #define __LINUX_FILE_H -#include -#include #include -#include -#include #include +#include -/* - * 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 - -/* - * 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]; -}; - -/* - * More than this number of fds: we use a separately allocated fd_set - */ -#define EMBEDDED_FD_SET_SIZE (BITS_PER_BYTE * sizeof(struct embedded_fd_set)) - -struct fdtable { - unsigned int max_fds; - int max_fdset; - struct file ** fd; /* current fd array */ - fd_set *close_on_exec; - fd_set *open_fds; - struct rcu_head rcu; - struct files_struct *free_files; - struct fdtable *next; -}; - -/* - * Open file table structure - */ -struct files_struct { - /* - * read mostly part - */ - atomic_t count; - struct fdtable *fdt; - struct fdtable fdtab; - /* - * 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; - struct file * fd_array[NR_OPEN_DEFAULT]; -}; - -#define files_fdtable(files) (rcu_dereference((files)->fdt)) +struct file; -extern struct kmem_cache *filp_cachep; +extern void __fput(struct file *); +extern void fput(struct file *); +extern void drop_file_write_access(struct file *file); -extern void FASTCALL(__fput(struct file *)); -extern void FASTCALL(fput(struct file *)); +struct file_operations; +struct vfsmount; +struct dentry; +extern int init_file(struct file *, struct vfsmount *mnt, + struct dentry *dentry, fmode_t mode, + const struct file_operations *fop); +extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry, + fmode_t mode, const struct file_operations *fop); static inline void fput_light(struct file *file, int fput_needed) { @@ -75,47 +30,15 @@ static inline void fput_light(struct file *file, int 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 struct file *fget(unsigned int fd); +extern struct file *fget_light(unsigned int fd, int *fput_needed); +extern void set_close_on_exec(unsigned int fd, int flag); extern void put_filp(struct file *); +extern int alloc_fd(unsigned start, unsigned flags); extern int get_unused_fd(void); -extern void FASTCALL(put_unused_fd(unsigned int fd)); -struct kmem_cache; - -extern struct file ** alloc_fd_array(int); -extern void free_fd_array(struct file **, int); - -extern fd_set *alloc_fdset(int); -extern void free_fdset(fd_set *, int); - -extern int expand_files(struct files_struct *, int nr); -extern void free_fdtable(struct fdtable *fdt); -extern void __init files_defer_init(void); - -static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) -{ - struct file * file = NULL; - struct fdtable *fdt = files_fdtable(files); - - if (fd < fdt->max_fds) - file = rcu_dereference(fdt->fd[fd]); - 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)); -void reset_files_struct(struct task_struct *, struct files_struct *); +#define get_unused_fd_flags(flags) alloc_fd(0, (flags)) +extern void put_unused_fd(unsigned int fd); -extern struct kmem_cache *files_cachep; +extern void fd_install(unsigned int fd, struct file *file); #endif /* __LINUX_FILE_H */