xfs_inode.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 559 行 · 第 1/2 页
H
559 行
/* * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Further, this software is distributed without any warranty that it is * free of the rightful claim of any third person regarding infringement * or the like. Any license provided herein, whether implied or * otherwise, applies only to this software file. Patent licenses, if * any, provided herein do not apply to combinations of this program with * other software, or any other product whatsoever. * * You should have received a copy of the GNU General Public License along * with this program; if not, write the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston MA 02111-1307, USA. * * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA 94043, or: * * http://www.sgi.com * * For further information regarding this notice, see: * * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ */#ifndef __XFS_INODE_H__#define __XFS_INODE_H__/* * File incore extent information, present for each of data & attr forks. */#define XFS_INLINE_EXTS 2#define XFS_INLINE_DATA 32typedef struct xfs_ifork { int if_bytes; /* bytes in if_u1 */ int if_real_bytes; /* bytes allocated in if_u1 */ xfs_bmbt_block_t *if_broot; /* file's incore btree root */ short if_broot_bytes; /* bytes allocated for root */ unsigned char if_flags; /* per-fork flags */ unsigned char if_ext_max; /* max # of extent records */ xfs_extnum_t if_lastex; /* last if_extents used */ union { xfs_bmbt_rec_t *if_extents; /* linear map file exts */ char *if_data; /* inline file data */ } if_u1; union { xfs_bmbt_rec_t if_inline_ext[XFS_INLINE_EXTS]; /* very small file extents */ char if_inline_data[XFS_INLINE_DATA]; /* very small file data */ xfs_dev_t if_rdev; /* dev number if special */ uuid_t if_uuid; /* mount point value */ } if_u2;} xfs_ifork_t;/* * Flags for xfs_ichgtime(). */#define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */#define XFS_ICHGTIME_ACC 0x2 /* data fork access timestamp */#define XFS_ICHGTIME_CHG 0x4 /* inode field change timestamp *//* * Per-fork incore inode flags. */#define XFS_IFINLINE 0x0001 /* Inline data is read in */#define XFS_IFEXTENTS 0x0002 /* All extent pointers are read in */#define XFS_IFBROOT 0x0004 /* i_broot points to the bmap b-tree root *//* * Flags for xfs_imap() and xfs_dilocate(). */#define XFS_IMAP_LOOKUP 0x1/* * Maximum number of extent pointers in if_u1.if_extents. */#define XFS_MAX_INCORE_EXTENTS 32768#ifdef __KERNEL__struct bhv_desc;struct cred;struct ktrace;struct vnode;struct xfs_buf;struct xfs_bmap_free;struct xfs_bmbt_irec;struct xfs_bmbt_block;struct xfs_inode;struct xfs_inode_log_item;struct xfs_mount;struct xfs_trans;struct xfs_dquot;#if defined(XFS_ILOCK_TRACE)#define XFS_ILOCK_KTRACE_SIZE 32extern ktrace_t *xfs_ilock_trace_buf;extern void xfs_ilock_trace(struct xfs_inode *, int, unsigned int, inst_t *);#else#define xfs_ilock_trace(i,n,f,ra)#endif/* * This structure is used to communicate which extents of a file * were holes when a write started from xfs_write_file() to * xfs_strat_read(). This is necessary so that we can know which * blocks need to be zeroed when they are read in in xfs_strat_read() * if they weren\'t allocated when the buffer given to xfs_strat_read() * was mapped. * * We keep a list of these attached to the inode. The list is * protected by the inode lock and the fact that the io lock is * held exclusively by writers. */typedef struct xfs_gap { struct xfs_gap *xg_next; xfs_fileoff_t xg_offset_fsb; xfs_extlen_t xg_count_fsb;} xfs_gap_t;typedef struct dm_attrs_s { __uint32_t da_dmevmask; /* DMIG event mask */ __uint16_t da_dmstate; /* DMIG state info */ __uint16_t da_pad; /* DMIG extra padding */} dm_attrs_t;typedef struct xfs_iocore { void *io_obj; /* pointer to container * inode or dcxvn structure */ struct xfs_mount *io_mount; /* fs mount struct ptr */#ifdef DEBUG mrlock_t *io_lock; /* inode IO lock */ mrlock_t *io_iolock; /* inode IO lock */#endif /* I/O state */ xfs_fsize_t io_new_size; /* sz when write completes */ /* Miscellaneous state. */ unsigned int io_flags; /* IO related flags */ /* DMAPI state */ dm_attrs_t io_dmattrs;} xfs_iocore_t;#define io_dmevmask io_dmattrs.da_dmevmask#define io_dmstate io_dmattrs.da_dmstate#define XFS_IO_INODE(io) ((xfs_inode_t *) ((io)->io_obj))#define XFS_IO_DCXVN(io) ((dcxvn_t *) ((io)->io_obj))/* * Flags in the flags field */#define XFS_IOCORE_RT 0x1/* * xfs_iocore prototypes */extern void xfs_iocore_inode_init(struct xfs_inode *);extern void xfs_iocore_inode_reinit(struct xfs_inode *);/* * This is the type used in the xfs inode hash table. * An array of these is allocated for each mounted * file system to hash the inodes for that file system. */typedef struct xfs_ihash { struct xfs_inode *ih_next; rwlock_t ih_lock; uint ih_version;} xfs_ihash_t;/* * Inode hashing and hash bucket locking. */#define XFS_BUCKETS(mp) (37*(mp)->m_sb.sb_agcount-1)#define XFS_IHASH(mp,ino) ((mp)->m_ihash + (((uint)(ino)) % (mp)->m_ihsize))/* * This is the xfs inode cluster hash. This hash is used by xfs_iflush to * find inodes that share a cluster and can be flushed to disk at the same * time. */typedef struct xfs_chashlist { struct xfs_chashlist *chl_next; struct xfs_inode *chl_ip; xfs_daddr_t chl_blkno; /* starting block number of * the cluster */ struct xfs_buf *chl_buf; /* the inode buffer */} xfs_chashlist_t;typedef struct xfs_chash { xfs_chashlist_t *ch_list; lock_t ch_lock;} xfs_chash_t;/* * This is the xfs in-core inode structure. * Most of the on-disk inode is embedded in the i_d field. * * The extent pointers/inline file space, however, are managed * separately. The memory for this information is pointed to by * the if_u1 unions depending on the type of the data. * This is used to linearize the array of extents for fast in-core * access. This is used until the file's number of extents * surpasses XFS_MAX_INCORE_EXTENTS, at which point all extent pointers * are accessed through the buffer cache. * * Other state kept in the in-core inode is used for identification, * locking, transactional updating, etc of the inode. * * Generally, we do not want to hold the i_rlock while holding the * i_ilock. Hierarchy is i_iolock followed by i_rlock. * * xfs_iptr_t contains all the inode fields upto and including the * i_mnext and i_mprev fields, it is used as a marker in the inode * chain off the mount structure by xfs_sync calls. */typedef struct { struct xfs_ihash *ip_hash; /* pointer to hash header */ struct xfs_inode *ip_next; /* inode hash link forw */ struct xfs_inode *ip_mnext; /* next inode in mount list */ struct xfs_inode *ip_mprev; /* ptr to prev inode */ struct xfs_inode **ip_prevp; /* ptr to prev i_next */ struct xfs_mount *ip_mount; /* fs mount struct ptr */} xfs_iptr_t;typedef struct xfs_inode { /* Inode linking and identification information. */ struct xfs_ihash *i_hash; /* pointer to hash header */ struct xfs_inode *i_next; /* inode hash link forw */ struct xfs_inode *i_mnext; /* next inode in mount list */ struct xfs_inode *i_mprev; /* ptr to prev inode */ struct xfs_inode **i_prevp; /* ptr to prev i_next */ struct xfs_mount *i_mount; /* fs mount struct ptr */ struct list_head i_reclaim; /* reclaim list */ struct bhv_desc i_bhv_desc; /* inode behavior descriptor*/ struct xfs_dquot *i_udquot; /* user dquot */ struct xfs_dquot *i_gdquot; /* group dquot */ /* Inode location stuff */ xfs_ino_t i_ino; /* inode number (agno/agino)*/ xfs_daddr_t i_blkno; /* blkno of inode buffer */ ushort i_len; /* len of inode buffer */ ushort i_boffset; /* off of inode in buffer */ /* Extent information. */ xfs_ifork_t *i_afp; /* attribute fork pointer */ xfs_ifork_t i_df; /* data fork */ /* Transaction and locking information. */ struct xfs_trans *i_transp; /* ptr to owning transaction*/ struct xfs_inode_log_item *i_itemp; /* logging information */ mrlock_t i_lock; /* inode lock */ mrlock_t i_iolock; /* inode IO lock */ sema_t i_flock; /* inode flush lock */ atomic_t i_pincount; /* inode pin count */ wait_queue_head_t i_ipin_wait; /* inode pinning wait queue */#ifdef HAVE_REFCACHE struct xfs_inode **i_refcache; /* ptr to entry in ref cache */ struct xfs_inode *i_release; /* inode to unref */#endif /* I/O state */ xfs_iocore_t i_iocore; /* I/O core */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?