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 + -
显示快捷键?