1/*- 2 * Copyright 2000 Hans Reiser 3 * See README for licensing and copyright details 4 * 5 * Ported to FreeBSD by Jean-S��bastien P��dron <jspedron@club-internet.fr> 6 * 7 * $FreeBSD$ 8 */ 9 10#ifndef _GNU_REISERFS_REISERFS_FS_I_H 11#define _GNU_REISERFS_REISERFS_FS_I_H 12 13#include <sys/queue.h> 14 15/* Bitmasks for i_flags field in reiserfs-specific part of inode */ 16typedef enum { 17 /* 18 * This says what format of key do all items (but stat data) of 19 * an object have. If this is set, that format is 3.6 otherwise 20 * - 3.5 21 */ 22 i_item_key_version_mask = 0x0001, 23 /* If this is unset, object has 3.5 stat data, otherwise, it has 24 * 3.6 stat data with 64bit size, 32bit nlink etc. */ 25 i_stat_data_version_mask = 0x0002, 26 /* File might need tail packing on close */ 27 i_pack_on_close_mask = 0x0004, 28 /* Don't pack tail of file */ 29 i_nopack_mask = 0x0008, 30 /* If those is set, "safe link" was created for this file during 31 * truncate or unlink. Safe link is used to avoid leakage of disk 32 * space on crash with some files open, but unlinked. */ 33 i_link_saved_unlink_mask = 0x0010, 34 i_link_saved_truncate_mask = 0x0020, 35 i_priv_object = 0x0080, 36 i_has_xattr_dir = 0x0100, 37} reiserfs_inode_flags; 38 39struct reiserfs_node { 40 struct vnode *i_vnode; 41 struct vnode *i_devvp; 42 struct cdev *i_dev; 43 ino_t i_number; 44 45 ino_t i_ino; 46 47 struct reiserfs_sb_info *i_reiserfs; 48 49 uint32_t i_flag; /* Flags, see below */ 50 uint32_t i_key[4]; /* Key is still 4 32 bit 51 integers */ 52 uint32_t i_flags; /* Transient inode flags that 53 are never stored on disk. 54 Bitmasks for this field 55 are defined above. */ 56 uint32_t i_first_direct_byte; /* Offset of first byte stored 57 in direct item. */ 58 uint32_t i_attrs; /* Copy of persistent inode 59 flags read from sd_attrs. */ 60 61 uint16_t i_mode; /* IFMT, permissions. */ 62 uint16_t i_nlink; /* File link count. */ 63 uint64_t i_size; /* File byte count. */ 64 uint32_t i_bytes; 65 uid_t i_uid; /* File owner. */ 66 gid_t i_gid; /* File group. */ 67 struct timespec i_atime; /* Last access time. */ 68 struct timespec i_mtime; /* Last modified time. */ 69 struct timespec i_ctime; /* Last inode change time. */ 70 71 uint32_t i_blocks; 72 uint32_t i_generation; 73}; 74 75#define VTOI(vp) ((struct reiserfs_node *)(vp)->v_data) 76#define ITOV(ip) ((ip)->i_vnode) 77 78/* These flags are kept in i_flag. */ 79#define IN_HASHED 0x0020 /* Inode is on hash list */ 80 81/* This overlays the fid structure (see mount.h) */ 82struct rfid { 83 uint16_t rfid_len; /* Length of structure */ 84 uint16_t rfid_pad; /* Force 32-bit alignment */ 85 ino_t rfid_dirid; /* File key */ 86 ino_t rfid_objectid; 87 uint32_t rfid_gen; /* Generation number */ 88}; 89 90#endif /* !defined _GNU_REISERFS_REISERFS_FS_I_H */ 91