fs.h

来自「GNU Hurd 源代码」· C头文件 代码 · 共 911 行 · 第 1/2 页

H
911
字号
	struct wait_queue *fl_wait;	struct file *fl_file;	unsigned char fl_flags;	unsigned char fl_type;	off_t fl_start;	off_t fl_end;	void (*fl_notify)(struct file_lock *);	/* unblock callback */	union {		struct nfs_lock_info	nfs_fl;	} fl_u;};extern struct file_lock			*file_lock_table;#include <linux/fcntl.h>extern int fcntl_getlk(unsigned int fd, struct flock *l);extern int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l);/* fs/locks.c */extern void locks_remove_posix(struct file *, fl_owner_t id);extern void locks_remove_flock(struct file *);extern struct file_lock *posix_test_lock(struct file *, struct file_lock *);extern int posix_lock_file(struct file *, struct file_lock *, unsigned int);extern void posix_block_lock(struct file_lock *, struct file_lock *);extern void posix_unblock_lock(struct file_lock *);struct fasync_struct {	int    magic;	int    fa_fd;	struct fasync_struct	*fa_next; /* singly linked list */	struct file 		*fa_file;};#define FASYNC_MAGIC 0x4601extern int fasync_helper(int, struct file *, int, struct fasync_struct **);#include <linux/minix_fs_sb.h>#include <linux/ext2_fs_sb.h>#include <linux/hpfs_fs_sb.h>#include <linux/ntfs_fs_sb.h>#include <linux/msdos_fs_sb.h>#include <linux/iso_fs_sb.h>#include <linux/nfs_fs_sb.h>#include <linux/sysv_fs_sb.h>#include <linux/affs_fs_sb.h>#include <linux/ufs_fs_sb.h>#include <linux/efs_fs_sb.h>#include <linux/romfs_fs_sb.h>#include <linux/smb_fs_sb.h>#include <linux/hfs_fs_sb.h>#include <linux/adfs_fs_sb.h>#include <linux/qnx4_fs_sb.h>extern struct list_head super_blocks;#define sb_entry(list)	list_entry((list), struct super_block, s_list)struct super_block {	struct list_head	s_list;		/* Keep this first */	kdev_t			s_dev;	unsigned long		s_blocksize;	unsigned char		s_blocksize_bits;	unsigned char		s_lock;	unsigned char		s_rd_only;	unsigned char		s_dirt;	struct file_system_type	*s_type;	struct super_operations	*s_op;	struct dquot_operations	*dq_op;	unsigned long		s_flags;	unsigned long		s_magic;	unsigned long		s_time;	struct dentry		*s_root;	struct wait_queue	*s_wait;	struct inode		*s_ibasket;	short int		s_ibasket_count;	short int		s_ibasket_max;	struct list_head	s_dirty;	/* dirty inodes */	union {		struct minix_sb_info	minix_sb;		struct ext2_sb_info	ext2_sb;		struct hpfs_sb_info	hpfs_sb;		struct ntfs_sb_info     ntfs_sb;		struct msdos_sb_info	msdos_sb;		struct isofs_sb_info	isofs_sb;		struct nfs_sb_info	nfs_sb;		struct sysv_sb_info	sysv_sb;		struct affs_sb_info	affs_sb;		struct ufs_sb_info	ufs_sb;		struct efs_sb_info	efs_sb;		struct romfs_sb_info	romfs_sb;		struct smb_sb_info	smbfs_sb;		struct hfs_sb_info	hfs_sb;		struct adfs_sb_info	adfs_sb;		struct qnx4_sb_info	qnx4_sb;	   		void			*generic_sbp;	} u;	/*	 * The next field is for VFS *only*. No filesystems have any business	 * even looking at it. You had been warned.	 */	struct semaphore s_vfs_rename_sem;	/* Kludge */};/* * VFS helper functions.. */extern int vfs_rmdir(struct inode *, struct dentry *);extern int vfs_unlink(struct inode *, struct dentry *);extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);/* * This is the "filldir" function type, used by readdir() to let * the kernel specify what kind of dirent layout it wants to have. * This allows the kernel to read directories into kernel space or * to have different dirent layouts depending on the binary type. */typedef int (*filldir_t)(void *, const char *, int, off_t, ino_t);	struct file_operations {	loff_t (*llseek) (struct file *, loff_t, int);	ssize_t (*read) (struct file *, char *, size_t, loff_t *);	ssize_t (*write) (struct file *, const char *, size_t, loff_t *);	int (*readdir) (struct file *, void *, filldir_t);	unsigned int (*poll) (struct file *, struct poll_table_struct *);	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);	int (*mmap) (struct file *, struct vm_area_struct *);	int (*open) (struct inode *, struct file *);	int (*flush) (struct file *);	int (*release) (struct inode *, struct file *);	int (*fsync) (struct file *, struct dentry *);	int (*fasync) (int, struct file *, int);	int (*check_media_change) (kdev_t dev);	int (*revalidate) (kdev_t dev);	int (*lock) (struct file *, int, struct file_lock *);};struct inode_operations {	struct file_operations * default_file_ops;	int (*create) (struct inode *,struct dentry *,int);	struct dentry * (*lookup) (struct inode *,struct dentry *);	int (*link) (struct dentry *,struct inode *,struct dentry *);	int (*unlink) (struct inode *,struct dentry *);	int (*symlink) (struct inode *,struct dentry *,const char *);	int (*mkdir) (struct inode *,struct dentry *,int);	int (*rmdir) (struct inode *,struct dentry *);	int (*mknod) (struct inode *,struct dentry *,int,int);	int (*rename) (struct inode *, struct dentry *,			struct inode *, struct dentry *);	int (*readlink) (struct dentry *, char *,int);	struct dentry * (*follow_link) (struct dentry *, struct dentry *, unsigned int);	int (*readpage) (struct file *, struct page *);	int (*writepage) (struct file *, struct page *);	int (*bmap) (struct inode *,int);	void (*truncate) (struct inode *);	int (*permission) (struct inode *, int);	int (*smap) (struct inode *,int);	int (*updatepage) (struct file *, struct page *, unsigned long, unsigned int, int);	int (*revalidate) (struct dentry *);};struct super_operations {	void (*read_inode) (struct inode *);	void (*write_inode) (struct inode *);	void (*put_inode) (struct inode *);	void (*delete_inode) (struct inode *);	int (*notify_change) (struct dentry *, struct iattr *);	void (*put_super) (struct super_block *);	void (*write_super) (struct super_block *);	int (*statfs) (struct super_block *, struct statfs *, int);	int (*remount_fs) (struct super_block *, int *, char *);	void (*clear_inode) (struct inode *);	void (*umount_begin) (struct super_block *);};struct dquot_operations {	void (*initialize) (struct inode *, short);	void (*drop) (struct inode *);	int (*alloc_block) (const struct inode *, unsigned long, uid_t, char);	int (*alloc_inode) (const struct inode *, unsigned long, uid_t);	void (*free_block) (const struct inode *, unsigned long);	void (*free_inode) (const struct inode *, unsigned long);	int (*transfer) (struct dentry *, struct iattr *, uid_t);};struct file_system_type {	const char *name;	int fs_flags;	struct super_block *(*read_super) (struct super_block *, void *, int);	struct file_system_type * next;};extern int register_filesystem(struct file_system_type *);extern int unregister_filesystem(struct file_system_type *);/* Return value for VFS lock functions - tells locks.c to lock conventionally * REALLY kosha for root NFS and nfs_lock */ #define LOCK_USE_CLNT 1#define FLOCK_VERIFY_READ  1#define FLOCK_VERIFY_WRITE 2extern int locks_mandatory_locked(struct inode *inode);extern int locks_mandatory_area(int read_write, struct inode *inode,				struct file *filp, loff_t offset,				size_t count);extern inline int locks_verify_locked(struct inode *inode){	/* Candidates for mandatory locking have the setgid bit set	 * but no group execute bit -  an otherwise meaningless combination.	 */	if (IS_MANDLOCK(inode) &&	    (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)		return (locks_mandatory_locked(inode));	return (0);}extern inline int locks_verify_area(int read_write, struct inode *inode,				    struct file *filp, loff_t offset,				    size_t count){	/* Candidates for mandatory locking have the setgid bit set	 * but no group execute bit -  an otherwise meaningless combination.	 */	if (IS_MANDLOCK(inode) &&	    (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)		return (locks_mandatory_area(read_write, inode, filp, offset,					     count));	return (0);}/* fs/open.c */asmlinkage int sys_open(const char *, int, int);asmlinkage int sys_close(unsigned int);		/* yes, it's really unsigned */extern int do_truncate(struct dentry *, unsigned long);extern int get_unused_fd(void);extern void put_unused_fd(unsigned int);extern struct file *filp_open(const char *, int, int);extern int filp_close(struct file *, fl_owner_t id);extern char * getname(const char * filename);#define __getname()	((char *) __get_free_page(GFP_KERNEL))#define putname(name)	free_page((unsigned long)(name))extern void kill_fasync(struct fasync_struct *fa, int sig);extern int register_blkdev(unsigned int, const char *, struct file_operations *);extern int unregister_blkdev(unsigned int major, const char * name);extern int blkdev_open(struct inode * inode, struct file * filp);extern int blkdev_release (struct inode * inode);extern struct file_operations def_blk_fops;extern struct inode_operations blkdev_inode_operations;/* fs/devices.c */extern int register_chrdev(unsigned int, const char *, struct file_operations *);extern int unregister_chrdev(unsigned int major, const char * name);extern int chrdev_open(struct inode * inode, struct file * filp);extern struct file_operations def_chr_fops;extern struct inode_operations chrdev_inode_operations;extern char * bdevname(kdev_t dev);extern char * cdevname(kdev_t dev);extern char * kdevname(kdev_t dev);extern void init_fifo(struct inode * inode);extern struct inode_operations fifo_inode_operations;/* Invalid inode operations -- fs/bad_inode.c */extern void make_bad_inode(struct inode * inode);extern int is_bad_inode(struct inode * inode);extern struct file_operations connecting_fifo_fops;extern struct file_operations read_fifo_fops;extern struct file_operations write_fifo_fops;extern struct file_operations rdwr_fifo_fops;extern struct file_operations read_pipe_fops;extern struct file_operations write_pipe_fops;extern struct file_operations rdwr_pipe_fops;extern struct file_system_type *get_fs_type(const char *name);extern int fs_may_remount_ro(struct super_block *);extern int fs_may_mount(kdev_t dev);extern struct file *inuse_filps;extern void refile_buffer(struct buffer_head * buf);extern void set_writetime(struct buffer_head * buf, int flag);extern int try_to_free_buffers(struct page *);extern int nr_buffers;extern long buffermem;extern int nr_buffer_heads;#define BUF_CLEAN	0#define BUF_LOCKED	1	/* Buffers scheduled for write */#define BUF_DIRTY	2	/* Dirty buffers, not yet scheduled for write */#define NR_LIST		3void mark_buffer_uptodate(struct buffer_head * bh, int on);extern inline void mark_buffer_clean(struct buffer_head * bh){	if (test_and_clear_bit(BH_Dirty, &bh->b_state)) {		if (bh->b_list == BUF_DIRTY)			refile_buffer(bh);	}}extern inline void mark_buffer_dirty(struct buffer_head * bh, int flag){	if (!test_and_set_bit(BH_Dirty, &bh->b_state)) {		set_writetime(bh, flag);		if (bh->b_list != BUF_DIRTY)			refile_buffer(bh);	}}extern int check_disk_change(kdev_t dev);extern int invalidate_inodes(struct super_block * sb);extern void invalidate_inode_pages(struct inode *);#define invalidate_buffers(dev)	__invalidate_buffers((dev), 0)#define destroy_buffers(dev)	__invalidate_buffers((dev), 1)extern void __invalidate_buffers(kdev_t dev, int);extern int floppy_is_wp(int minor);extern void sync_inodes(kdev_t dev);extern void write_inode_now(struct inode *inode);extern void sync_dev(kdev_t dev);extern int fsync_dev(kdev_t dev);extern void sync_supers(kdev_t dev);extern int bmap(struct inode * inode,int block);extern int notify_change(struct dentry *, struct iattr *);extern int permission(struct inode * inode,int mask);extern int get_write_access(struct inode *inode);extern void put_write_access(struct inode *inode);extern struct dentry * open_namei(const char * pathname, int flag, int mode);extern struct dentry * do_mknod(const char * filename, int mode, dev_t dev);extern int do_pipe(int *);/* 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 *);/* * Kernel pointers have redundant information, so we can use a * scheme where we can return either an error code or a dentry * pointer with the same return value. * * This should be a per-architecture thing, to allow different * error and pointer decisions. */#define ERR_PTR(err)	((void *)((long)(err)))#define PTR_ERR(ptr)	((long)(ptr))#define IS_ERR(ptr)	((unsigned long)(ptr) > (unsigned long)(-1000))/* * The bitmask for a lookup event: *  - follow links at the end *  - require a directory *  - ending slashes ok even for nonexistent files *  - internal "there are more path compnents" flag */#define LOOKUP_FOLLOW		(1)#define LOOKUP_DIRECTORY	(2)#define LOOKUP_SLASHOK		(4)#define LOOKUP_CONTINUE		(8)extern struct dentry * lookup_dentry(const char *, struct dentry *, unsigned int);extern struct dentry * __namei(const char *, unsigned int);#define namei(pathname)		__namei(pathname, 1)#define lnamei(pathname)	__namei(pathname, 0)extern void iput(struct inode *);extern struct inode * igrab(struct inode *inode);extern ino_t iunique(struct super_block *, ino_t);extern struct inode * iget(struct super_block *, unsigned long);extern struct inode * iget_in_use (struct super_block *, unsigned long);extern void clear_inode(struct inode *);extern struct inode * get_empty_inode(void);extern void insert_inode_hash(struct inode *);extern void remove_inode_hash(struct inode *);extern struct file * get_empty_filp(void);extern struct buffer_head * get_hash_table(kdev_t, int, int);extern struct buffer_head * getblk(kdev_t, int, int);extern struct buffer_head * find_buffer(kdev_t dev, int block, int size);extern void ll_rw_block(int, int, struct buffer_head * bh[]);extern int is_read_only(kdev_t);extern void __brelse(struct buffer_head *);extern inline void brelse(struct buffer_head *buf){	if (buf)		__brelse(buf);}extern void __bforget(struct buffer_head *buf);extern inline void bforget(struct buffer_head *buf){	if (buf)		__bforget(buf);}extern void set_blocksize(kdev_t dev, int size);extern unsigned int get_hardblocksize(kdev_t dev);extern struct buffer_head * bread(kdev_t dev, int block, int size);extern struct buffer_head * breada(kdev_t dev,int block, int size, 				   unsigned int pos, unsigned int filesize);extern int brw_page(int, struct page *, kdev_t, int [], int, int);extern int generic_readpage(struct file *, struct page *);extern int generic_file_mmap(struct file *, struct vm_area_struct *);extern ssize_t generic_file_read(struct file *, char *, size_t, loff_t *);extern ssize_t generic_file_write(struct file *, const char*, size_t, loff_t*);extern struct super_block *get_super(kdev_t dev);extern void put_super(kdev_t dev);unsigned long generate_cluster(kdev_t dev, int b[], int size);unsigned long generate_cluster_swab32(kdev_t dev, int b[], int size);extern kdev_t ROOT_DEV;extern void show_buffers(void);extern void mount_root(void);#ifdef CONFIG_BLK_DEV_INITRDextern kdev_t real_root_dev;extern int change_root(kdev_t new_root_dev,const char *put_old);#endifextern ssize_t char_read(struct file *, char *, size_t, loff_t *);extern ssize_t block_read(struct file *, char *, size_t, loff_t *);extern int read_ahead[];extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);extern int block_fsync(struct file *, struct dentry *dir);extern int file_fsync(struct file *, struct dentry *dir);extern int inode_change_ok(struct inode *, struct iattr *);extern void inode_setattr(struct inode *, struct iattr *);extern __u32 inode_generation_count;#endif /* __KERNEL__ */#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?