⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysv_fs.h

📁 GNU Hurd 源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
	coh_ulong	s_tfree __packed2__; /* total number of free zones */	u16		s_tinode;	/* total number of free inodes */	u16		s_interleave_m;	/* interleave factor */	u16		s_interleave_n;	char		s_fname[6];	/* file system volume name */	char		s_fpack[6];	/* file system pack name */	u32		s_unique;	/* zero, not used */};/* Coherent free list block on disk */struct coh_freelist_chunk {	u16 fl_nfree;	/* number of free blocks in fl_free, <= COH_NICFREE] */	u32  fl_free[COH_NICFREE] __packed2__;};/* SystemV/Coherent inode data on disk */struct sysv_inode {	u16 i_mode;	u16 i_nlink;	u16 i_uid;	u16 i_gid;	u32 i_size;	union { /* directories, regular files, ... */		unsigned char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks,					      * then 1 indirection block,					      * then 1 double indirection block,					      * then 1 triple indirection block.					      * Then maybe a "file generation number" ??					      */		/* devices */		dev_t i_rdev;		/* named pipes on Coherent */		struct {			char p_addp[30];			s16 p_pnc;			s16 p_prx;			s16 p_pwx;		} i_p;	} i_a;	u32 i_atime;	/* time of last access */	u32 i_mtime;	/* time of last modification */	u32 i_ctime;	/* time of creation */};/* The admissible values for i_mode are listed in <linux/stat.h> : * #define S_IFMT  00170000  mask for type * #define S_IFREG  0100000  type = regular file * #define S_IFBLK  0060000  type = block device * #define S_IFDIR  0040000  type = directory * #define S_IFCHR  0020000  type = character device * #define S_IFIFO  0010000  type = named pipe * #define S_ISUID  0004000  set user id * #define S_ISGID  0002000  set group id * #define S_ISVTX  0001000  save swapped text even after use * Additionally for SystemV: * #define S_IFLNK  0120000  type = symbolic link * #define S_IFNAM  0050000  type = XENIX special named file ?? * Additionally for Coherent: * #define S_IFMPB  0070000  type = multiplexed block device ?? * #define S_IFMPC  0030000  type = multiplexed character device ?? * * Since Coherent doesn't know about symbolic links, we use a kludgey * implementation of symbolic links: i_mode = COH_KLUDGE_SYMLINK_MODE * denotes a symbolic link. When a regular file should get this mode by * accident, it is automatically converted to COH_KLUDGE_NOT_SYMLINK. * We use S_IFREG because only regular files (and Coherent pipes...) can have * data blocks with arbitrary contents associated with them, and S_ISVTX * ("save swapped text after use") because it is unused on both Linux and * Coherent: Linux does much more intelligent paging, and Coherent hasn't * virtual memory at all. * Same trick for Xenix. */#define COH_KLUDGE_SYMLINK_MODE	(S_IFREG | S_ISVTX)#define COH_KLUDGE_NOT_SYMLINK	(S_IFREG | S_ISVTX | S_IRUSR) /* force read access */extern inline mode_t from_coh_imode(unsigned short mode){	if (mode == COH_KLUDGE_SYMLINK_MODE)		return (S_IFLNK | 0777);	else		return mode;}extern inline unsigned short to_coh_imode(mode_t mode){	if (S_ISLNK(mode))		return COH_KLUDGE_SYMLINK_MODE;	else if (mode == COH_KLUDGE_SYMLINK_MODE)		return COH_KLUDGE_NOT_SYMLINK;	else		return mode;}/* Admissible values for i_nlink: 0.._LINK_MAX */#define XENIX_LINK_MAX	126	/* ?? */#define SYSV_LINK_MAX	126	/* 127? 251? */#define COH_LINK_MAX	10000	/* max number of hard links to an inode *//* The number of inodes per block is   sb->sv_inodes_per_block = block_size / sizeof(struct sysv_inode) *//* The number of indirect pointers per block is   sb->sv_ind_per_block = block_size / sizeof(u32) *//* SystemV/Coherent directory entry on disk */#define SYSV_NAMELEN	14	/* max size of name in struct sysv_dir_entry */struct sysv_dir_entry {	sysv_ino_t inode;	char name[SYSV_NAMELEN]; /* up to 14 characters, the rest are zeroes */};#define SYSV_DIRSIZE	sizeof(struct sysv_dir_entry)	/* size of every directory entry *//* Operations *//* ========== *//* identify the FS in memory */#define FSTYPE_XENIX	1#define FSTYPE_SYSV4	2#define FSTYPE_SYSV2	3#define FSTYPE_COH	4#define SYSV_MAGIC_BASE		0x012FF7B3#define XENIX_SUPER_MAGIC	(SYSV_MAGIC_BASE+FSTYPE_XENIX)#define SYSV4_SUPER_MAGIC	(SYSV_MAGIC_BASE+FSTYPE_SYSV4)#define SYSV2_SUPER_MAGIC	(SYSV_MAGIC_BASE+FSTYPE_SYSV2)#define COH_SUPER_MAGIC		(SYSV_MAGIC_BASE+FSTYPE_COH)#ifdef __KERNEL__/* sv_get_hash_table(sb,dev,block) is equivalent to  get_hash_table(dev,block,block_size)  */static inline struct buffer_head *sv_get_hash_table (struct super_block *sb, kdev_t dev, unsigned int block){	return get_hash_table (dev, block + sb->sv_block_base, sb->sv_block_size);}/* sv_getblk(sb,dev,block) is equivalent to  getblk(dev,block,block_size)  */static inline struct buffer_head *sv_getblk (struct super_block *sb, kdev_t dev, unsigned int block){	return getblk (dev, block + sb->sv_block_base, sb->sv_block_size);}/* sv_bread(sb,dev,block) is equivalent to  bread(dev,block,block_size)  */static inline struct buffer_head *sv_bread (struct super_block *sb, kdev_t dev, unsigned int block){	return bread (dev, block + sb->sv_block_base, sb->sv_block_size);}/* * Function prototypes */extern struct dentry *sysv_lookup(struct inode * dir, struct dentry * dentry);extern int sysv_create(struct inode * dir, struct dentry * dentry, int mode);extern int sysv_mkdir(struct inode * dir, struct dentry * dentry, int mode);extern int sysv_rmdir(struct inode * dir, struct dentry * dentry);extern int sysv_unlink(struct inode * dir, struct dentry * dentry);extern int sysv_symlink(struct inode * inode, struct dentry * dentry, const char * symname);extern int sysv_link(struct dentry * old_dentry, struct inode * dir, struct dentry * dentry);extern int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, int rdev);extern int sysv_rename(struct inode * old_dir, struct dentry * old_dentry,		       struct inode * new_dir, struct dentry * new_dentry);extern struct inode * sysv_new_inode(const struct inode * dir);extern void sysv_free_inode(struct inode * inode);extern unsigned long sysv_count_free_inodes(struct super_block *sb);extern int sysv_new_block(struct super_block * sb);extern void sysv_free_block(struct super_block * sb, unsigned int block);extern unsigned long sysv_count_free_blocks(struct super_block *sb);extern int sysv_bmap(struct inode *,int);extern struct buffer_head * sysv_getblk(struct inode *, unsigned int, int);extern struct buffer_head * sysv_file_bread(struct inode *, int, int);extern ssize_t sysv_file_read(struct file *, char *, size_t, loff_t *);extern void sysv_truncate(struct inode *);extern void sysv_put_super(struct super_block *);extern struct super_block *sysv_read_super(struct super_block *,void *,int);extern int init_sysv_fs(void);extern void sysv_write_super(struct super_block *);extern void sysv_read_inode(struct inode *);extern int sysv_notify_change(struct dentry *, struct iattr *);extern void sysv_write_inode(struct inode *);extern int sysv_statfs(struct super_block *, struct statfs *, int);extern int sysv_sync_inode(struct inode *);extern int sysv_sync_file(struct file *, struct dentry *);extern int sysv_mmap(struct file *, struct vm_area_struct *);extern struct inode_operations sysv_file_inode_operations;extern struct inode_operations sysv_file_inode_operations_with_bmap;extern struct inode_operations sysv_dir_inode_operations;extern struct inode_operations sysv_symlink_inode_operations;#endif /* __KERNEL__ */#endif

⌨️ 快捷键说明

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