📄 efs_inode.h
字号:
#ifndef __EFS_INODE_H__#define __EFS_INODE_H__/* * The in-core EFS inode structure. * * Copyright 1992, Silicon Graphics, Inc. * All Rights Reserved. * * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; * the contents of this file may not be disclosed to third parties, copied or * duplicated in any form, in whole or in part, without the prior written * permission of Silicon Graphics, Inc. * * RESTRICTED RIGHTS LEGEND: * Use, duplication or disclosure by the Government is subject to restrictions * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data * and Computer Software clause at DFARS 252.227-7013, and/or in similar or * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - * rights reserved under the Copyright Laws of the United States. * * $Revision: 1.1 $ */#ifdef _KERNEL#include <sys/sema.h>#include "efs_ino.h" /* disk inode and extent structs *//* * Version of a regular, directory, or symbolic link EFS inode as it appears * in memory. This is a template for the actual data structure that contains * i_numextents worth of i_extents. */struct inode { /* hashing, linking, and numbering */ struct ihash *i_hash; /* pointer to hash chain header */ struct inode *i_next; /* inode hash chain linkage */ struct inode **i_prevp; /* pointer to previous i_next */ struct mount *i_mount; /* pointer to containing mount */ struct inode *i_mnext; /* next inode in mount's list */ struct inode **i_mprevp; /* pointer to previous i_mnext */ struct vnode *i_vnode; /* pointer to associated vnode */ ino_t i_number; /* inode number on device */ dev_t i_dev; /* device containing this inode */ /* locking and miscellaneous state */ u_short i_flags; /* random flags -- see below */ short i_lockpid; /* pid of process owning i_lock */ short i_locktrips; /* number of lock reacquisitions */ sema_t i_lock; /* mutual exclusion */ daddr_t i_nextbn; /* next block in sequential read */ daddr_t i_reada; /* trigger readahead at this block */ struct dquot *i_dquot; /* quota structure for this file */ u_long i_vcode; /* version code token (for RFS) */ long i_mapcnt; /* count of mapped pages */ /* internalized efs_dinode attributes */ u_short i_mode; /* file type and protection mode */ short i_nlink; /* number of directory entries */ uid_t i_uid; /* owner identity */ gid_t i_gid; /* group identity */ off_t i_size; /* size of file */ time_t i_atime; /* time last accessed */ time_t i_mtime; /* time last modified */ time_t i_ctime; /* time created or changed */ char i_updtimes; /* update to a time required */ char i_updatime; /* update to atime required */ char i_updmtime; /* update to mtime required */ char i_updctime; /* update to ctime required */ u_long i_gen; /* generation number (for NFS) */ /* internalized efs_dinode extent info */ short i_numextents; /* number of extents */ short i_numindirs; /* number of indirect extents */ size_t i_directbytes; /* bytes in direct extents */ size_t i_indirbytes; /* bytes in indir extents */ extent *i_extents; /* pointer to direct extents */ extent *i_indir; /* malloc'd indirect extent info */ long i_blocks; /* number of direct extent blocks */ union { extent iu_direct[4]; /* inline direct extent space */ dev_t iu_rdev; /* device number if special */ } i_u; void *i_afs; /* pointer to AFS specific stuff */ u_char i_version; /* inode version AFS */ u_char i_spare; /* copy of di_spare AFS */ time_t i_mod; /* time inode last changed */};#define i_direct i_u.iu_direct#define i_rdev i_u.iu_rdev/* * Inode flags. */#define IUPD 0x0001 /* file has been modified */#define IACC 0x0002 /* inode access time to be updated */#define ICHG 0x0004 /* inode has been changed */#define ISYN 0x0008 /* do synchronous write for iupdat */#define INODELAY 0x0010 /* don't do delayed write in iupdat */#define IRWLOCK 0x0020 /* VOP_RWLOCK has been called */#define ITRUNC 0x0040 /* inode may need truncation */#define IINCORE 0x0080 /* indirect extents in core */#define IMOD 0x0100 /* inode has been modified *//* flag for iflush */#define FLUSH_ALL 1 /* flush all inactive inodes even if * some are active *//* * Convenient macros. */#define vtoi(vp) ((struct inode *)(vp)->v_data)#define itov(ip) ((ip)->i_vnode)#define ihold(ip) vn_hold(itov(ip))#define irele(ip) vn_rele(itov(ip))#define itovfs(ip) (itov(ip)->v_vfsp)#define vtoefs(vp) itoefs(vtoi(vp))#define itoefs(ip) mtoefs(ip->i_mount)/* * EFS file identifier. */struct efid { u_short efid_len; /* length of remainder */ u_short efid_pad; /* padding, must be zero */ ino_t efid_ino; /* inode number */ u_long efid_gen; /* generation number */};struct bmapval;struct cred;struct efs;struct mount;/* generic in-core inode functions */extern void ihashinit(void);extern int iget(struct mount *, ino_t, struct inode **);extern void irealloc(struct inode *, size_t);extern void iput(struct inode *);extern void idrop(struct inode *);extern void iinactive(struct inode *);extern void ireclaim(struct inode *);extern int iflush(struct mount *, int);extern void ilock(struct inode *);extern int ilock_nowait(struct inode *);extern void iunlock(struct inode *);/* EFS-specific inode operations */extern int efs_bmap(struct vnode *, off_t, ssize_t, int, struct cred *, struct bmapval *, int *);extern int efs_iaccess(struct inode *, mode_t, struct cred *);extern int efs_ialloc(struct inode *, mode_t, short, dev_t, struct inode **, struct cred *);extern int efs_icreate(struct inode *, mode_t, short, dev_t, struct inode *, struct cred *);extern void efs_idestroy(struct inode *);extern void efs_ifree(struct inode *ip);extern int efs_imap(struct efs *, ino_t, struct bmapval *);extern int efs_iread(struct mount *, ino_t, struct inode **);extern int efs_itrunc(struct inode *, off_t, int *, int);extern int efs_iupdat(struct inode *);extern int efs_readindir(struct inode *);extern struct zone *efs_inode_zone;#endif /* _KERNEL */#endif /* __EFS_INODE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -