version 1.51.6.2, 2009/01/17 13:29:42 |
version 1.52, 2008/07/31 05:38:06 |
|
|
*/ |
*/ |
|
|
#ifndef _UFS_UFS_INODE_H_ |
#ifndef _UFS_UFS_INODE_H_ |
#define _UFS_UFS_INODE_H_ |
#define _UFS_UFS_INODE_H_ |
|
|
#include <sys/vnode.h> |
#include <sys/vnode.h> |
#include <ufs/ufs/dinode.h> |
#include <ufs/ufs/dinode.h> |
|
|
struct ffs_inode_ext { |
struct ffs_inode_ext { |
daddr_t *ffs_snapblklist; /* Collect expunged snapshot blocks. */ |
daddr_t *ffs_snapblklist; /* Collect expunged snapshot blocks. */ |
/* follow two fields are used by contiguous allocation code only. */ |
/* follow two fields are used by contiguous allocation code only. */ |
daddr_t ffs_first_data_blk; /* first data block on disk. */ |
daddr_t ffs_first_data_blk; /* first indirect block on disk. */ |
daddr_t ffs_first_indir_blk; /* first indirect block on disk. */ |
daddr_t ffs_first_indir_blk; /* first data block on disk. */ |
}; |
}; |
|
|
struct ext2fs_inode_ext { |
struct ext2fs_inode_ext { |
|
|
#define i_ffs1_rdev i_din.ffs1_din->di_rdev |
#define i_ffs1_rdev i_din.ffs1_din->di_rdev |
#define i_ffs1_size i_din.ffs1_din->di_size |
#define i_ffs1_size i_din.ffs1_din->di_size |
#define i_ffs1_uid i_din.ffs1_din->di_uid |
#define i_ffs1_uid i_din.ffs1_din->di_uid |
#define i_ffs1_ouid i_din.ffs1_din->di_u.oldids[0] |
#define i_ffs1_ouid i_din.ffs1_din->di_u.oldids[0] |
#define i_ffs1_ogid i_din.ffs1_din->di_u.oldids[1] |
#define i_ffs1_ogid i_din.ffs1_din->di_u.oldids[1] |
|
|
#define i_ffs2_atime i_din.ffs2_din->di_atime |
#define i_ffs2_atime i_din.ffs2_din->di_atime |
#define i_ffs2_atimensec i_din.ffs2_din->di_atimensec |
#define i_ffs2_atimensec i_din.ffs2_din->di_atimensec |
#define i_ffs2_birthtime i_din.ffs2_din->di_birthtime |
#define i_ffs2_birthtime i_din.ffs2_din->di_birthtime |
#define i_ffs2_birthnsec i_din.ffs2_din->di_birthnsec |
#define i_ffs2_birthnsec i_din.ffs2_din->di_birthnsec |
#define i_ffs2_blocks i_din.ffs2_din->di_blocks |
#define i_ffs2_blocks i_din.ffs2_din->di_blocks |
#define i_ffs2_blksize i_din.ffs2_din->di_blksize |
#define i_ffs2_blksize i_din.ffs2_din->di_blksize |
#define i_ffs2_ctime i_din.ffs2_din->di_ctime |
#define i_ffs2_ctime i_din.ffs2_din->di_ctime |
#define i_ffs2_ctimensec i_din.ffs2_din->di_ctimensec |
#define i_ffs2_ctimensec i_din.ffs2_din->di_ctimensec |
#define i_ffs2_db i_din.ffs2_din->di_db |
#define i_ffs2_db i_din.ffs2_din->di_db |
|
|
#define i_ffs2_rdev i_din.ffs2_din->di_rdev |
#define i_ffs2_rdev i_din.ffs2_din->di_rdev |
#define i_ffs2_size i_din.ffs2_din->di_size |
#define i_ffs2_size i_din.ffs2_din->di_size |
#define i_ffs2_uid i_din.ffs2_din->di_uid |
#define i_ffs2_uid i_din.ffs2_din->di_uid |
#define i_ffs2_kernflags i_din.ffs2_din->di_kernflags |
#define i_ffs2_kernflags i_din.ffs2_din->di_kernflags |
#define i_ffs2_extsize i_din.ffs2_din->di_extsize |
#define i_ffs2_extsize i_din.ffs2_din->di_extsize |
#define i_ffs2_extb i_din.ffs2_din->di_extb |
#define i_ffs2_extb i_din.ffs2_din->di_extb |
|
|
#define i_e2fs_mode i_din.e2fs_din->e2di_mode |
#define i_e2fs_mode i_din.e2fs_din->e2di_mode |
#define i_e2fs_uid i_din.e2fs_din->e2di_uid |
#define i_e2fs_uid i_din.e2fs_din->e2di_uid |
|
|
#define i_e2fs_nfrag i_din.e2fs_din->e2di_nfrag |
#define i_e2fs_nfrag i_din.e2fs_din->e2di_nfrag |
#define i_e2fs_fsize i_din.e2fs_din->e2di_fsize |
#define i_e2fs_fsize i_din.e2fs_din->e2di_fsize |
#define i_e2fs_rdev i_din.e2fs_din->e2di_rdev |
#define i_e2fs_rdev i_din.e2fs_din->e2di_rdev |
#define i_e2fs_uid_high i_din.e2fs_din->e2di_uid_high |
|
#define i_e2fs_gid_high i_din.e2fs_din->e2di_gid_high |
|
|
|
/* These flags are kept in i_flag. */ |
/* These flags are kept in i_flag. */ |
#define IN_ACCESS 0x0001 /* Access time update request. */ |
#define IN_ACCESS 0x0001 /* Access time update request. */ |
|
|
#define IN_EXLOCK 0x0080 /* File has exclusive lock. */ |
#define IN_EXLOCK 0x0080 /* File has exclusive lock. */ |
#define IN_CLEANING 0x0100 /* LFS: file is being cleaned */ |
#define IN_CLEANING 0x0100 /* LFS: file is being cleaned */ |
#define IN_ADIROP 0x0200 /* LFS: dirop in progress */ |
#define IN_ADIROP 0x0200 /* LFS: dirop in progress */ |
#define IN_SPACECOUNTED 0x0400 /* Blocks to be freed in free count. */ |
#define IN_SPACECOUNTED 0x0400 /* Blocks to be freed in free count. */ |
#define IN_PAGING 0x1000 /* LFS: file is on paging queue */ |
#define IN_PAGING 0x1000 /* LFS: file is on paging queue */ |
|
|
#if defined(_KERNEL) |
#if defined(_KERNEL) |
|
|
|
|
* The DIP macro is used to access fields in the dinode that are |
* The DIP macro is used to access fields in the dinode that are |
* not cached in the inode itself. |
* not cached in the inode itself. |
*/ |
*/ |
#define DIP(ip, field) \ |
#define DIP(ip, field) \ |
(((ip)->i_ump->um_fstype == UFS1) ? \ |
(((ip)->i_ump->um_fstype == UFS1) ? \ |
(ip)->i_ffs1_##field : (ip)->i_ffs2_##field) |
(ip)->i_ffs1_##field : (ip)->i_ffs2_##field) |
|
|
#define DIP_ASSIGN(ip, field, value) \ |
#define DIP_ASSIGN(ip, field, value) \ |
do { \ |
do { \ |
if ((ip)->i_ump->um_fstype == UFS1) \ |
if ((ip)->i_ump->um_fstype == UFS1) \ |
(ip)->i_ffs1_##field = (value); \ |
(ip)->i_ffs1_##field = (value); \ |
|
|
(ip)->i_ffs2_##field = (value); \ |
(ip)->i_ffs2_##field = (value); \ |
} while(0) |
} while(0) |
|
|
#define DIP_ADD(ip, field, value) \ |
#define DIP_ADD(ip, field, value) \ |
do { \ |
do { \ |
if ((ip)->i_ump->um_fstype == UFS1) \ |
if ((ip)->i_ump->um_fstype == UFS1) \ |
(ip)->i_ffs1_##field += (value); \ |
(ip)->i_ffs1_##field += (value); \ |
|
|
(ip)->i_ffs2_##field += (value); \ |
(ip)->i_ffs2_##field += (value); \ |
} while(0) |
} while(0) |
|
|
#define SHORTLINK(ip) \ |
#define SHORTLINK(ip) \ |
(((ip)->i_ump->um_fstype == UFS1) ? \ |
(((ip)->i_ump->um_fstype == UFS1) ? \ |
(void *)(ip)->i_ffs1_db : (void *)(ip)->i_ffs2_db) |
(void *)(ip)->i_ffs1_db : (void *)(ip)->i_ffs2_db) |
|
|