1 /* 1 2 * JFFS2 -- Journalling Flash File System, Ver 3 * 4 * Copyright © 2004 Ferenc Havasi <havasi@in 5 * Zoltan Sogor <weth@inf.u- 6 * Patrik Kluba <pajko@halom 7 * University of Szeged, Hun 8 * 9 * For licensing information, see the file 'LI 10 * 11 */ 12 13 #ifndef JFFS2_SUMMARY_H 14 #define JFFS2_SUMMARY_H 15 16 /* Limit summary size to 64KiB so that we can 17 is larger than that, we have to just ditch 18 for the eraseblock in question... and it pr 19 anyway. */ 20 #define MAX_SUMMARY_SIZE 65536 21 22 #include <linux/uio.h> 23 #include <linux/jffs2.h> 24 25 #define BLK_STATE_ALLFF 0 26 #define BLK_STATE_CLEAN 1 27 #define BLK_STATE_PARTDIRTY 2 28 #define BLK_STATE_CLEANMARKER 3 29 #define BLK_STATE_ALLDIRTY 4 30 #define BLK_STATE_BADBLOCK 5 31 32 #define JFFS2_SUMMARY_NOSUM_SIZE 0xffffffff 33 #define JFFS2_SUMMARY_INODE_SIZE (sizeof(struc 34 #define JFFS2_SUMMARY_DIRENT_SIZE(x) (sizeof(s 35 #define JFFS2_SUMMARY_XATTR_SIZE (sizeof(struc 36 #define JFFS2_SUMMARY_XREF_SIZE (sizeof(struct 37 38 /* Summary structures used on flash */ 39 40 struct jffs2_sum_unknown_flash 41 { 42 jint16_t nodetype; /* node type * 43 }; 44 45 struct jffs2_sum_inode_flash 46 { 47 jint16_t nodetype; /* node type * 48 jint32_t inode; /* inode numbe 49 jint32_t version; /* inode versi 50 jint32_t offset; /* offset on j 51 jint32_t totlen; /* record leng 52 } __attribute__((packed)); 53 54 struct jffs2_sum_dirent_flash 55 { 56 jint16_t nodetype; /* == JFFS_NOD 57 jint32_t totlen; /* record leng 58 jint32_t offset; /* offset on j 59 jint32_t pino; /* parent inod 60 jint32_t version; /* dirent vers 61 jint32_t ino; /* == zero for 62 uint8_t nsize; /* dirent name 63 uint8_t type; /* dirent type 64 uint8_t name[]; /* dirent name */ 65 } __attribute__((packed)); 66 67 struct jffs2_sum_xattr_flash 68 { 69 jint16_t nodetype; /* == JFFS2_NO 70 jint32_t xid; /* xattr ident 71 jint32_t version; /* version num 72 jint32_t offset; /* offset on j 73 jint32_t totlen; /* node length 74 } __attribute__((packed)); 75 76 struct jffs2_sum_xref_flash 77 { 78 jint16_t nodetype; /* == JFFS2_NO 79 jint32_t offset; /* offset on j 80 } __attribute__((packed)); 81 82 union jffs2_sum_flash 83 { 84 struct jffs2_sum_unknown_flash u; 85 struct jffs2_sum_inode_flash i; 86 struct jffs2_sum_dirent_flash d; 87 struct jffs2_sum_xattr_flash x; 88 struct jffs2_sum_xref_flash r; 89 }; 90 91 /* Summary structures used in the memory */ 92 93 struct jffs2_sum_unknown_mem 94 { 95 union jffs2_sum_mem *next; 96 jint16_t nodetype; /* node type * 97 }; 98 99 struct jffs2_sum_inode_mem 100 { 101 union jffs2_sum_mem *next; 102 jint16_t nodetype; /* node type * 103 jint32_t inode; /* inode numbe 104 jint32_t version; /* inode versi 105 jint32_t offset; /* offset on j 106 jint32_t totlen; /* record leng 107 } __attribute__((packed)); 108 109 struct jffs2_sum_dirent_mem 110 { 111 union jffs2_sum_mem *next; 112 jint16_t nodetype; /* == JFFS_NOD 113 jint32_t totlen; /* record leng 114 jint32_t offset; /* ofset on je 115 jint32_t pino; /* parent inod 116 jint32_t version; /* dirent vers 117 jint32_t ino; /* == zero for 118 uint8_t nsize; /* dirent name 119 uint8_t type; /* dirent type 120 uint8_t name[]; /* dirent name */ 121 } __attribute__((packed)); 122 123 struct jffs2_sum_xattr_mem 124 { 125 union jffs2_sum_mem *next; 126 jint16_t nodetype; 127 jint32_t xid; 128 jint32_t version; 129 jint32_t offset; 130 jint32_t totlen; 131 } __attribute__((packed)); 132 133 struct jffs2_sum_xref_mem 134 { 135 union jffs2_sum_mem *next; 136 jint16_t nodetype; 137 jint32_t offset; 138 } __attribute__((packed)); 139 140 union jffs2_sum_mem 141 { 142 struct jffs2_sum_unknown_mem u; 143 struct jffs2_sum_inode_mem i; 144 struct jffs2_sum_dirent_mem d; 145 struct jffs2_sum_xattr_mem x; 146 struct jffs2_sum_xref_mem r; 147 }; 148 149 /* Summary related information stored in super 150 151 struct jffs2_summary 152 { 153 uint32_t sum_size; /* collected s 154 uint32_t sum_num; 155 uint32_t sum_padded; 156 union jffs2_sum_mem *sum_list_head; 157 union jffs2_sum_mem *sum_list_tail; 158 159 jint32_t *sum_buf; /* buffer for 160 }; 161 162 /* Summary marker is stored at the end of ever 163 164 struct jffs2_sum_marker 165 { 166 jint32_t offset; /* offset of t 167 jint32_t magic; /* == JFFS2_SU 168 }; 169 170 #define JFFS2_SUMMARY_FRAME_SIZE (sizeof(struc 171 172 #ifdef CONFIG_JFFS2_SUMMARY /* SUMMARY SUP 173 174 #define jffs2_sum_active() (1) 175 int jffs2_sum_init(struct jffs2_sb_info *c); 176 void jffs2_sum_exit(struct jffs2_sb_info *c); 177 void jffs2_sum_disable_collecting(struct jffs2 178 int jffs2_sum_is_disabled(struct jffs2_summary 179 void jffs2_sum_reset_collected(struct jffs2_su 180 void jffs2_sum_move_collected(struct jffs2_sb_ 181 int jffs2_sum_add_kvec(struct jffs2_sb_info *c 182 unsigned long count, 183 int jffs2_sum_write_sumnode(struct jffs2_sb_in 184 int jffs2_sum_add_padding_mem(struct jffs2_sum 185 int jffs2_sum_add_inode_mem(struct jffs2_summa 186 int jffs2_sum_add_dirent_mem(struct jffs2_summ 187 int jffs2_sum_add_xattr_mem(struct jffs2_summa 188 int jffs2_sum_add_xref_mem(struct jffs2_summar 189 int jffs2_sum_scan_sumnode(struct jffs2_sb_inf 190 struct jffs2_raw_su 191 uint32_t *pseudo_ra 192 193 #else /* SUMMARY DIS 194 195 #define jffs2_sum_active() (0) 196 #define jffs2_sum_init(a) (0) 197 #define jffs2_sum_exit(a) do { } while (0) 198 #define jffs2_sum_disable_collecting(a) 199 #define jffs2_sum_is_disabled(a) (0) 200 #define jffs2_sum_reset_collected(a) do { } wh 201 #define jffs2_sum_add_kvec(a,b,c,d) (0) 202 #define jffs2_sum_move_collected(a,b) do { } w 203 #define jffs2_sum_write_sumnode(a) (0) 204 #define jffs2_sum_add_padding_mem(a,b) do { } 205 #define jffs2_sum_add_inode_mem(a,b,c) do { } 206 #define jffs2_sum_add_dirent_mem(a,b,c) do { } 207 #define jffs2_sum_add_xattr_mem(a,b,c) do { } 208 #define jffs2_sum_add_xref_mem(a,b,c) do { } w 209 #define jffs2_sum_scan_sumnode(a,b,c,d,e) (0) 210 211 #endif /* CONFIG_JFFS2_SUMMARY */ 212 213 #endif /* JFFS2_SUMMARY_H */ 214
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.