1 /* 2 * linux/include/linux/ext3_fs_i.h 3 * 4 * Copyright (C) 1992, 1993, 1994, 1995 5 * Remy Card (card@masi.ibp.fr) 6 * Laboratoire MASI - Institut Blaise Pascal 7 * Universite Pierre et Marie Curie (Paris VI) 8 * 9 * from 10 * 11 * linux/include/linux/minix_fs_i.h 12 * 13 * Copyright (C) 1991, 1992 Linus Torvalds 14 */ 15 16 #ifndef _LINUX_EXT3_FS_I 17 #define _LINUX_EXT3_FS_I 18 19 #include <linux/rwsem.h> 20 21 /* 22 * second extended file system inode data in memory 23 */ 24 struct ext3_inode_info { 25 __u32 i_data[15]; 26 __u32 i_flags; 27 #ifdef EXT3_FRAGMENTS 28 __u32 i_faddr; 29 __u8 i_frag_no; 30 __u8 i_frag_size; 31 __u16 unused; /* formerly i_osync */ 32 #endif 33 __u32 i_file_acl; 34 __u32 i_dir_acl; 35 __u32 i_dtime; 36 __u32 i_block_group; 37 __u32 i_state; /* Dynamic state flags for ext3 */ 38 __u32 i_next_alloc_block; 39 __u32 i_next_alloc_goal; 40 #ifdef EXT3_PREALLOCATE 41 __u32 i_prealloc_block; 42 __u32 i_prealloc_count; 43 #endif 44 __u32 i_dir_start_lookup; 45 46 struct list_head i_orphan; /* unlinked but open inodes */ 47 48 /* 49 * i_disksize keeps track of what the inode size is ON DISK, not 50 * in memory. During truncate, i_size is set to the new size by 51 * the VFS prior to calling ext3_truncate(), but the filesystem won't 52 * set i_disksize to 0 until the truncate is actually under way. 53 * 54 * The intent is that i_disksize always represents the blocks which 55 * are used by this file. This allows recovery to restart truncate 56 * on orphans if we crash during truncate. We actually write i_disksize 57 * into the on-disk inode when writing inodes out, instead of i_size. 58 * 59 * The only time when i_disksize and i_size may be different is when 60 * a truncate is in progress. The only things which change i_disksize 61 * are ext3_get_block (growth) and ext3_truncate (shrinkth). 62 */ 63 loff_t i_disksize; 64 65 /* 66 * truncate_sem is for serialising ext3_truncate() against 67 * ext3_getblock(). In the 2.4 ext2 design, great chunks of inode's 68 * data tree are chopped off during truncate. We can't do that in 69 * ext3 because whenever we perform intermediate commits during 70 * truncate, the inode and all the metadata blocks *must* be in a 71 * consistent state which allows truncation of the orphans to restart 72 * during recovery. Hence we must fix the get_block-vs-truncate race 73 * by other means, so we have truncate_sem. 74 */ 75 struct rw_semaphore truncate_sem; 76 }; 77 78 #endif /* _LINUX_EXT3_FS_I */ 79