fs.h
来自「此工具是arm-linux-GCC交叉编译工具(cross-3.4.4)」· C头文件 代码 · 共 1,770 行 · 第 1/5 页
H
1,770 行
extern int kernel_read(struct file *, unsigned long, char *, unsigned long);extern struct file * open_exec(const char *); /* fs/dcache.c -- generic fs support functions */extern int is_subdir(struct dentry *, struct dentry *);extern ino_t find_inode_number(struct dentry *, struct qstr *);#include <linux/err.h>/* needed for stackable file system support */extern loff_t default_llseek(struct file *file, loff_t offset, int origin);extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin);extern void inode_init_once(struct inode *);extern void iput(struct inode *);extern struct inode * igrab(struct inode *);extern ino_t iunique(struct super_block *, ino_t);extern int inode_needs_sync(struct inode *inode);extern void generic_delete_inode(struct inode *inode);extern void generic_drop_inode(struct inode *inode);extern struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data);extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data);extern struct inode *ilookup(struct super_block *sb, unsigned long ino);extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);extern struct inode * iget_locked(struct super_block *, unsigned long);extern void unlock_new_inode(struct inode *);static inline struct inode *iget(struct super_block *sb, unsigned long ino){ struct inode *inode = iget_locked(sb, ino); if (inode && (inode->i_state & I_NEW)) { sb->s_op->read_inode(inode); unlock_new_inode(inode); } return inode;}extern void __iget(struct inode * inode);extern void clear_inode(struct inode *);extern void destroy_inode(struct inode *);extern struct inode *new_inode(struct super_block *);extern int remove_suid(struct dentry *);extern void remove_dquot_ref(struct super_block *, int, struct list_head *);extern struct semaphore iprune_sem;extern void __insert_inode_hash(struct inode *, unsigned long hashval);extern void remove_inode_hash(struct inode *);static inline void insert_inode_hash(struct inode *inode) { __insert_inode_hash(inode, inode->i_ino);}extern struct file * get_empty_filp(void);extern void file_move(struct file *f, struct list_head *list);extern void file_kill(struct file *f);struct bio;extern void submit_bio(int, struct bio *);extern int bdev_read_only(struct block_device *);extern int set_blocksize(struct block_device *, int);extern int sb_set_blocksize(struct super_block *, int);extern int sb_min_blocksize(struct super_block *, int);extern int generic_file_mmap(struct file *, struct vm_area_struct *);extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);extern int file_send_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);extern ssize_t generic_file_read(struct file *, char __user *, size_t, loff_t *);int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);extern ssize_t generic_file_write(struct file *, const char __user *, size_t, loff_t *);extern ssize_t generic_file_aio_read(struct kiocb *, char __user *, size_t, loff_t);extern ssize_t __generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t *);extern ssize_t generic_file_aio_write(struct kiocb *, const char __user *, size_t, loff_t);extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, unsigned long, loff_t *);extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, unsigned long *, loff_t, loff_t *, size_t, size_t);extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, unsigned long, loff_t, loff_t *, size_t, ssize_t);extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);ssize_t generic_file_write_nolock(struct file *file, const struct iovec *iov, unsigned long nr_segs, loff_t *ppos);extern ssize_t generic_file_sendfile(struct file *, loff_t *, size_t, read_actor_t, void *);extern void do_generic_mapping_read(struct address_space *mapping, struct file_ra_state *, struct file *, loff_t *, read_descriptor_t *, read_actor_t);extern voidfile_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);extern ssize_t generic_file_readv(struct file *filp, const struct iovec *iov, unsigned long nr_segs, loff_t *ppos);ssize_t generic_file_writev(struct file *filp, const struct iovec *iov, unsigned long nr_segs, loff_t *ppos);extern loff_t no_llseek(struct file *file, loff_t offset, int origin);extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);extern loff_t remote_llseek(struct file *file, loff_t offset, int origin);extern int generic_file_open(struct inode * inode, struct file * filp);extern int nonseekable_open(struct inode * inode, struct file * filp);#ifdef CONFIG_FS_XIPextern ssize_t xip_file_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);extern ssize_t xip_file_sendfile(struct file *in_file, loff_t *ppos, size_t count, read_actor_t actor, void *target);extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma);extern ssize_t xip_file_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);extern int xip_truncate_page(struct address_space *mapping, loff_t from);#elsestatic inline int xip_truncate_page(struct address_space *mapping, loff_t from){ return 0;}#endifstatic inline void do_generic_file_read(struct file * filp, loff_t *ppos, read_descriptor_t * desc, read_actor_t actor){ do_generic_mapping_read(filp->f_mapping, &filp->f_ra, filp, ppos, desc, actor);}ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const struct iovec *iov, loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks, dio_iodone_t end_io, int lock_type);enum { DIO_LOCKING = 1, /* need locking between buffered and direct access */ DIO_NO_LOCKING, /* bdev; no locking at all between buffered/direct */ DIO_OWN_LOCKING, /* filesystem locks buffered and direct internally */};static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const struct iovec *iov, loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks, dio_iodone_t end_io){ return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, nr_segs, get_blocks, end_io, DIO_LOCKING);}static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const struct iovec *iov, loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks, dio_iodone_t end_io){ return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, nr_segs, get_blocks, end_io, DIO_NO_LOCKING);}static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const struct iovec *iov, loff_t offset, unsigned long nr_segs, get_blocks_t get_blocks, dio_iodone_t end_io){ return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, nr_segs, get_blocks, end_io, DIO_OWN_LOCKING);}extern struct file_operations generic_ro_fops;#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))extern int vfs_readlink(struct dentry *, char __user *, int, const char *);extern int vfs_follow_link(struct nameidata *, const char *);extern int page_readlink(struct dentry *, char __user *, int);extern void *page_follow_link_light(struct dentry *, struct nameidata *);extern void page_put_link(struct dentry *, struct nameidata *, void *);extern int page_symlink(struct inode *inode, const char *symname, int len);extern struct inode_operations page_symlink_inode_operations;extern int generic_readlink(struct dentry *, char __user *, int);extern void generic_fillattr(struct inode *, struct kstat *);extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);void inode_add_bytes(struct inode *inode, loff_t bytes);void inode_sub_bytes(struct inode *inode, loff_t bytes);loff_t inode_get_bytes(struct inode *inode);void inode_set_bytes(struct inode *inode, loff_t bytes);extern int vfs_readdir(struct file *, filldir_t, void *);extern int vfs_stat(char __user *, struct kstat *);extern int vfs_lstat(char __user *, struct kstat *);extern int vfs_fstat(unsigned int, struct kstat *);extern int vfs_ioctl(struct file *, unsigned int, unsigned int, unsigned long);extern struct file_system_type *get_fs_type(const char *name);extern struct super_block *get_super(struct block_device *);extern struct super_block *user_get_super(dev_t);extern void drop_super(struct super_block *sb);extern int dcache_dir_open(struct inode *, struct file *);extern int dcache_dir_close(struct inode *, struct file *);extern loff_t dcache_dir_lseek(struct file *, loff_t, int);extern int dcache_readdir(struct file *, void *, filldir_t);extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);extern int simple_statfs(struct super_block *, struct kstatfs *);extern int simple_link(struct dentry *, struct inode *, struct dentry *);extern int simple_unlink(struct inode *, struct dentry *);extern int simple_rmdir(struct inode *, struct dentry *);extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);extern int simple_sync_file(struct file *, struct dentry *, int);extern int simple_empty(struct dentry *);extern int simple_readpage(struct file *file, struct page *page);extern int simple_prepare_write(struct file *file, struct page *page, unsigned offset, unsigned to);extern int simple_commit_write(struct file *file, struct page *page, unsigned offset, unsigned to);extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *);extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);extern struct file_operations simple_dir_operations;extern struct inode_operations simple_dir_inode_operations;struct tree_descr { char *name; struct file_operations *ops; int mode; };struct dentry *d_alloc_name(struct dentry *, const char *);extern int simple_fill_super(struct super_block *, int, struct tree_descr *);extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count);extern void simple_release_fs(struct vfsmount **mount, int *count);extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t);extern int inode_change_ok(struct inode *, struct iattr *);extern int __must_check inode_setattr(struct inode *, struct iattr *);extern void inode_update_time(struct inode *inode, int ctime_too);static inline ino_t parent_ino(struct dentry *dentry){ ino_t res; spin_lock(&dentry->d_lock); res = dentry->d_parent->d_inode->i_ino; spin_unlock(&dentry->d_lock); return res;}/* kernel/fork.c */extern int unshare_files(void);/* Transaction based IO helpers *//* * An argresp is stored in an allocated page and holds the * size of the argument or response, along with its content */struct simple_transaction_argresp { ssize_t size; char data[0];};#define SIMPLE_TRANSACTION_LIMIT (PAGE_SIZE - sizeof(struct simple_transaction_argresp))char *simple_transaction_get(struct file *file, const char __user *buf, size_t size);ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos);int simple_transaction_release(struct inode *inode, struct file *file);static inline void simple_transaction_set(struct file *file, size_t n){ struct simple_transaction_argresp *ar = file->private_data; BUG_ON(n > SIMPLE_TRANSACTION_LIMIT); /* * The barrier ensures that ar->size will really remain zero until * ar->data is ready for reading. */ smp_mb(); ar->size = n;}/* * simple attribute files * * These attributes behave similar to those in sysfs: * * Writing to an attribute immediately sets a value, an open file can be * written to multiple times. * * Reading from an attribute creates a buffer from the value that might get * read with multiple read calls. When the attribute has been read * completely, no further read calls are possible until the file is opened * again. * * All attributes contain a text representation of a numeric value * that are accessed with the get() and set() functions. */#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \static int __fops ## _open(struct inode *inode, struct file *file) \{ \ __simple_attr_check_format(__fmt, 0ull); \ return simple_attr_open(inode, file, __get, __set, __fmt); \} \static struct file_operations __fops = { \ .owner = THIS_MODULE, \ .open = __fops ## _open, \ .release = simple_attr_close, \ .read = simple_attr_read, \ .write = simple_attr_write, \};static inline void __attribute__((format(printf, 1, 2)))__simple_attr_check_format(const char *fmt, ...){ /* don't do anything, just let the compiler check the arguments; */}int simple_attr_open(struct inode *inode, struct file *file, u64 (*get)(void *), void (*set)(void *, u64), const char *fmt);int simple_attr_close(struct inode *inode, struct file *file);ssize_t simple_attr_read(struct file *file, char __user *buf, size_t len, loff_t *ppos);ssize_t simple_attr_write(struct file *file, const char __user *buf, size_t len, loff_t *ppos);#ifdef CONFIG_SECURITYstatic inline char *alloc_secdata(void){ return (char *)get_zeroed_page(GFP_KERNEL);}static inline void free_secdata(void *secdata){ free_page((unsigned long)secdata);}#elsestatic inline char *alloc_secdata(void){ return (char *)1;}static inline void free_secdata(void *secdata){ }#endif /* CONFIG_SECURITY */#endif /* __KERNEL__ */#endif /* _LINUX_FS_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?