Contents of /trunk/mkinitrd-magellan/busybox/e2fsprogs/old_e2fsprogs/ext2fs/kernel-jbd.h
Parent Directory | Revision Log
Revision 532 -
(show annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 6414 byte(s)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 6414 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * linux/include/linux/jbd.h |
4 | * |
5 | * Written by Stephen C. Tweedie <sct@redhat.com> |
6 | * |
7 | * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved |
8 | * |
9 | * This file is part of the Linux kernel and is made available under |
10 | * the terms of the GNU General Public License, version 2, or at your |
11 | * option, any later version, incorporated herein by reference. |
12 | * |
13 | * Definitions for transaction data structures for the buffer cache |
14 | * filesystem journaling support. |
15 | */ |
16 | |
17 | #ifndef _LINUX_JBD_H |
18 | #define _LINUX_JBD_H |
19 | |
20 | #include <sys/types.h> |
21 | #include <linux/types.h> |
22 | #include "ext2fs.h" |
23 | |
24 | /* |
25 | * Standard header for all descriptor blocks: |
26 | */ |
27 | |
28 | typedef struct journal_header_s |
29 | { |
30 | __u32 h_magic; |
31 | __u32 h_blocktype; |
32 | __u32 h_sequence; |
33 | } journal_header_t; |
34 | |
35 | /* |
36 | * This is the global e2fsck structure. |
37 | */ |
38 | typedef struct e2fsck_struct *e2fsck_t; |
39 | |
40 | |
41 | struct inode { |
42 | e2fsck_t i_ctx; |
43 | ext2_ino_t i_ino; |
44 | struct ext2_inode i_ext2; |
45 | }; |
46 | |
47 | |
48 | /* |
49 | * The journal superblock. All fields are in big-endian byte order. |
50 | */ |
51 | typedef struct journal_superblock_s |
52 | { |
53 | /* 0x0000 */ |
54 | journal_header_t s_header; |
55 | |
56 | /* 0x000C */ |
57 | /* Static information describing the journal */ |
58 | __u32 s_blocksize; /* journal device blocksize */ |
59 | __u32 s_maxlen; /* total blocks in journal file */ |
60 | __u32 s_first; /* first block of log information */ |
61 | |
62 | /* 0x0018 */ |
63 | /* Dynamic information describing the current state of the log */ |
64 | __u32 s_sequence; /* first commit ID expected in log */ |
65 | __u32 s_start; /* blocknr of start of log */ |
66 | |
67 | /* 0x0020 */ |
68 | /* Error value, as set by journal_abort(). */ |
69 | __s32 s_errno; |
70 | |
71 | /* 0x0024 */ |
72 | /* Remaining fields are only valid in a version-2 superblock */ |
73 | __u32 s_feature_compat; /* compatible feature set */ |
74 | __u32 s_feature_incompat; /* incompatible feature set */ |
75 | __u32 s_feature_ro_compat; /* readonly-compatible feature set */ |
76 | /* 0x0030 */ |
77 | __u8 s_uuid[16]; /* 128-bit uuid for journal */ |
78 | |
79 | /* 0x0040 */ |
80 | __u32 s_nr_users; /* Nr of filesystems sharing log */ |
81 | |
82 | __u32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ |
83 | |
84 | /* 0x0048 */ |
85 | __u32 s_max_transaction; /* Limit of journal blocks per trans.*/ |
86 | __u32 s_max_trans_data; /* Limit of data blocks per trans. */ |
87 | |
88 | /* 0x0050 */ |
89 | __u32 s_padding[44]; |
90 | |
91 | /* 0x0100 */ |
92 | __u8 s_users[16*48]; /* ids of all fs'es sharing the log */ |
93 | /* 0x0400 */ |
94 | } journal_superblock_t; |
95 | |
96 | |
97 | extern int journal_blocks_per_page(struct inode *inode); |
98 | extern int jbd_blocks_per_page(struct inode *inode); |
99 | |
100 | #define JFS_MIN_JOURNAL_BLOCKS 1024 |
101 | |
102 | |
103 | /* |
104 | * Internal structures used by the logging mechanism: |
105 | */ |
106 | |
107 | #define JFS_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ |
108 | |
109 | /* |
110 | * Descriptor block types: |
111 | */ |
112 | |
113 | #define JFS_DESCRIPTOR_BLOCK 1 |
114 | #define JFS_COMMIT_BLOCK 2 |
115 | #define JFS_SUPERBLOCK_V1 3 |
116 | #define JFS_SUPERBLOCK_V2 4 |
117 | #define JFS_REVOKE_BLOCK 5 |
118 | |
119 | /* |
120 | * The block tag: used to describe a single buffer in the journal |
121 | */ |
122 | typedef struct journal_block_tag_s |
123 | { |
124 | __u32 t_blocknr; /* The on-disk block number */ |
125 | __u32 t_flags; /* See below */ |
126 | } journal_block_tag_t; |
127 | |
128 | /* |
129 | * The revoke descriptor: used on disk to describe a series of blocks to |
130 | * be revoked from the log |
131 | */ |
132 | typedef struct journal_revoke_header_s |
133 | { |
134 | journal_header_t r_header; |
135 | int r_count; /* Count of bytes used in the block */ |
136 | } journal_revoke_header_t; |
137 | |
138 | |
139 | /* Definitions for the journal tag flags word: */ |
140 | #define JFS_FLAG_ESCAPE 1 /* on-disk block is escaped */ |
141 | #define JFS_FLAG_SAME_UUID 2 /* block has same uuid as previous */ |
142 | #define JFS_FLAG_DELETED 4 /* block deleted by this transaction */ |
143 | #define JFS_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ |
144 | |
145 | |
146 | |
147 | |
148 | #define JFS_HAS_COMPAT_FEATURE(j,mask) \ |
149 | ((j)->j_format_version >= 2 && \ |
150 | ((j)->j_superblock->s_feature_compat & cpu_to_be32((mask)))) |
151 | #define JFS_HAS_RO_COMPAT_FEATURE(j,mask) \ |
152 | ((j)->j_format_version >= 2 && \ |
153 | ((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask)))) |
154 | #define JFS_HAS_INCOMPAT_FEATURE(j,mask) \ |
155 | ((j)->j_format_version >= 2 && \ |
156 | ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) |
157 | |
158 | #define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 |
159 | |
160 | /* Features known to this kernel version: */ |
161 | #define JFS_KNOWN_COMPAT_FEATURES 0 |
162 | #define JFS_KNOWN_ROCOMPAT_FEATURES 0 |
163 | #define JFS_KNOWN_INCOMPAT_FEATURES JFS_FEATURE_INCOMPAT_REVOKE |
164 | |
165 | /* Comparison functions for transaction IDs: perform comparisons using |
166 | * modulo arithmetic so that they work over sequence number wraps. */ |
167 | |
168 | |
169 | /* |
170 | * Definitions which augment the buffer_head layer |
171 | */ |
172 | |
173 | /* journaling buffer types */ |
174 | #define BJ_None 0 /* Not journaled */ |
175 | #define BJ_SyncData 1 /* Normal data: flush before commit */ |
176 | #define BJ_AsyncData 2 /* writepage data: wait on it before commit */ |
177 | #define BJ_Metadata 3 /* Normal journaled metadata */ |
178 | #define BJ_Forget 4 /* Buffer superceded by this transaction */ |
179 | #define BJ_IO 5 /* Buffer is for temporary IO use */ |
180 | #define BJ_Shadow 6 /* Buffer contents being shadowed to the log */ |
181 | #define BJ_LogCtl 7 /* Buffer contains log descriptors */ |
182 | #define BJ_Reserved 8 /* Buffer is reserved for access by journal */ |
183 | #define BJ_Types 9 |
184 | |
185 | |
186 | struct kdev_s { |
187 | e2fsck_t k_ctx; |
188 | int k_dev; |
189 | }; |
190 | |
191 | typedef struct kdev_s *kdev_t; |
192 | typedef unsigned int tid_t; |
193 | |
194 | struct journal_s |
195 | { |
196 | unsigned long j_flags; |
197 | int j_errno; |
198 | struct buffer_head * j_sb_buffer; |
199 | struct journal_superblock_s *j_superblock; |
200 | int j_format_version; |
201 | unsigned long j_head; |
202 | unsigned long j_tail; |
203 | unsigned long j_free; |
204 | unsigned long j_first, j_last; |
205 | kdev_t j_dev; |
206 | kdev_t j_fs_dev; |
207 | int j_blocksize; |
208 | unsigned int j_blk_offset; |
209 | unsigned int j_maxlen; |
210 | struct inode * j_inode; |
211 | tid_t j_tail_sequence; |
212 | tid_t j_transaction_sequence; |
213 | __u8 j_uuid[16]; |
214 | struct jbd_revoke_table_s *j_revoke; |
215 | }; |
216 | |
217 | typedef struct journal_s journal_t; |
218 | |
219 | extern int journal_recover (journal_t *journal); |
220 | extern int journal_skip_recovery (journal_t *); |
221 | |
222 | /* Primary revoke support */ |
223 | extern int journal_init_revoke(journal_t *, int); |
224 | extern void journal_destroy_revoke_caches(void); |
225 | extern int journal_init_revoke_caches(void); |
226 | |
227 | /* Recovery revoke support */ |
228 | extern int journal_set_revoke(journal_t *, unsigned long, tid_t); |
229 | extern int journal_test_revoke(journal_t *, unsigned long, tid_t); |
230 | extern void journal_clear_revoke(journal_t *); |
231 | extern void journal_brelse_array(struct buffer_head *b[], int n); |
232 | |
233 | extern void journal_destroy_revoke(journal_t *); |
234 | |
235 | |
236 | #endif /* _LINUX_JBD_H */ |