|
|
| File: [Development] / xfs-linux-nodel / xfs_inode_item.h (download)
Revision 1.17, Tue Nov 15 18:01:30 1994 UTC (22 years, 11 months ago) by ajs
Add a field to the incore inode log item structure to hold a pointer to a buffer which needs to be pushed out. This is used in the trylock routine to hand off the dirty inode buffer to the push routine where we can safely call bawrite() without worry of breaking if we sleep. |
#ifndef _XFS_INODE_ITEM_H
#define _XFS_INODE_ITEM_H
struct xfs_inode;
struct xfs_bmbt_rec;
/*
* This is the structure used to lay out an inode log item in the
* log. The size of the inline data/extents/b-tree root to be logged
* (if any) is indicated in the ilf_dsize field.
*/
typedef struct xfs_inode_log_format {
unsigned short ilf_type; /* inode log item type */
unsigned short ilf_size; /* size of this item */
uint ilf_fields; /* flags for fields logged */
uint ilf_dsize; /* size of data/ext/root */
xfs_ino_t ilf_ino; /* inode number */
union {
dev_t ilfu_rdev; /* rdev value for dev inode*/
uuid_t ilfu_uuid; /* mount point value */
} ilf_u;
} xfs_inode_log_format_t;
typedef struct xfs_inode_log_item {
xfs_log_item_t ili_item; /* common portion */
struct xfs_inode *ili_inode; /* inode ptr */
xfs_lsn_t ili_flush_lsn; /* lsn at last flush */
unsigned short ili_ilock_recur; /* lock recursion count */
unsigned short ili_iolock_recur; /* lock recursion count */
unsigned short ili_flags; /* misc flags */
unsigned short ili_logged; /* flushed logged data */
unsigned int ili_last_fields; /* fields when flushed */
struct xfs_bmbt_rec *ili_extents_buf; /* array of logged exts */
buf_t *ili_bp; /* locked inode buffer */
xfs_inode_log_format_t ili_format; /* logged structure */
} xfs_inode_log_item_t;
#define XFS_ILI_HOLD 0x1
#define XFS_ILI_IOLOCKED_EXCL 0x2
#define XFS_ILI_IOLOCKED_SHARED 0x4
#define XFS_ILI_IOLOCKED_ANY (XFS_ILI_IOLOCKED_EXCL | XFS_ILI_IOLOCKED_SHARED)
/*
* Flags for xfs_trans_log_inode flags field.
*/
#define XFS_ILOG_CORE 0x001 /* log standard inode fields */
#define XFS_ILOG_DATA 0x002 /* log iu_data */
#define XFS_ILOG_EXT 0x004 /* log iu_extents */
#define XFS_ILOG_BROOT 0x008 /* log i_broot */
#define XFS_ILOG_DEV 0x010 /* log the dev field */
#define XFS_ILOG_UUID 0x020 /* log the uuid field */
#define XFS_ILOG_NONCORE (XFS_ILOG_DATA | XFS_ILOG_EXT | \
XFS_ILOG_BROOT | XFS_ILOG_DEV | \
XFS_ILOG_UUID)
#define XFS_ILOG_ALL (XFS_ILOG_CORE | XFS_ILOG_DATA | \
XFS_ILOG_EXT | XFS_ILOG_BROOT | \
XFS_ILOG_DEV | XFS_ILOG_UUID)
void xfs_inode_item_init(struct xfs_inode *, xfs_mount_t *);
void xfs_iflush_done(buf_t *, xfs_inode_log_item_t *);
#endif /* _XFS_INODE_ITEM_H */