diff options
Diffstat (limited to 'fs/jfs/jfs_logmgr.h')
-rw-r--r-- | fs/jfs/jfs_logmgr.h | 76 |
1 files changed, 37 insertions, 39 deletions
diff --git a/fs/jfs/jfs_logmgr.h b/fs/jfs/jfs_logmgr.h index 8c6909b80014..a53fb17ea219 100644 --- a/fs/jfs/jfs_logmgr.h +++ b/fs/jfs/jfs_logmgr.h | |||
@@ -4,16 +4,16 @@ | |||
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2 of the License, or | 7 | * the Free Software Foundation; either version 2 of the License, or |
8 | * (at your option) any later version. | 8 | * (at your option) any later version. |
9 | * | 9 | * |
10 | * This program is distributed in the hope that it will be useful, | 10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
13 | * the GNU General Public License for more details. | 13 | * the GNU General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU General Public License | 15 | * You should have received a copy of the GNU General Public License |
16 | * along with this program; if not, write to the Free Software | 16 | * along with this program; if not, write to the Free Software |
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ | 18 | */ |
19 | #ifndef _H_JFS_LOGMGR | 19 | #ifndef _H_JFS_LOGMGR |
@@ -35,19 +35,19 @@ | |||
35 | /* | 35 | /* |
36 | * log logical volume | 36 | * log logical volume |
37 | * | 37 | * |
38 | * a log is used to make the commit operation on journalled | 38 | * a log is used to make the commit operation on journalled |
39 | * files within the same logical volume group atomic. | 39 | * files within the same logical volume group atomic. |
40 | * a log is implemented with a logical volume. | 40 | * a log is implemented with a logical volume. |
41 | * there is one log per logical volume group. | 41 | * there is one log per logical volume group. |
42 | * | 42 | * |
43 | * block 0 of the log logical volume is not used (ipl etc). | 43 | * block 0 of the log logical volume is not used (ipl etc). |
44 | * block 1 contains a log "superblock" and is used by logFormat(), | 44 | * block 1 contains a log "superblock" and is used by logFormat(), |
45 | * lmLogInit(), lmLogShutdown(), and logRedo() to record status | 45 | * lmLogInit(), lmLogShutdown(), and logRedo() to record status |
46 | * of the log but is not otherwise used during normal processing. | 46 | * of the log but is not otherwise used during normal processing. |
47 | * blocks 2 - (N-1) are used to contain log records. | 47 | * blocks 2 - (N-1) are used to contain log records. |
48 | * | 48 | * |
49 | * when a volume group is varied-on-line, logRedo() must have | 49 | * when a volume group is varied-on-line, logRedo() must have |
50 | * been executed before the file systems (logical volumes) in | 50 | * been executed before the file systems (logical volumes) in |
51 | * the volume group can be mounted. | 51 | * the volume group can be mounted. |
52 | */ | 52 | */ |
53 | /* | 53 | /* |
@@ -97,26 +97,26 @@ struct logsuper { | |||
97 | * log logical page | 97 | * log logical page |
98 | * | 98 | * |
99 | * (this comment should be rewritten !) | 99 | * (this comment should be rewritten !) |
100 | * the header and trailer structures (h,t) will normally have | 100 | * the header and trailer structures (h,t) will normally have |
101 | * the same page and eor value. | 101 | * the same page and eor value. |
102 | * An exception to this occurs when a complete page write is not | 102 | * An exception to this occurs when a complete page write is not |
103 | * accomplished on a power failure. Since the hardware may "split write" | 103 | * accomplished on a power failure. Since the hardware may "split write" |
104 | * sectors in the page, any out of order sequence may occur during powerfail | 104 | * sectors in the page, any out of order sequence may occur during powerfail |
105 | * and needs to be recognized during log replay. The xor value is | 105 | * and needs to be recognized during log replay. The xor value is |
106 | * an "exclusive or" of all log words in the page up to eor. This | 106 | * an "exclusive or" of all log words in the page up to eor. This |
107 | * 32 bit eor is stored with the top 16 bits in the header and the | 107 | * 32 bit eor is stored with the top 16 bits in the header and the |
108 | * bottom 16 bits in the trailer. logredo can easily recognize pages | 108 | * bottom 16 bits in the trailer. logredo can easily recognize pages |
109 | * that were not completed by reconstructing this eor and checking | 109 | * that were not completed by reconstructing this eor and checking |
110 | * the log page. | 110 | * the log page. |
111 | * | 111 | * |
112 | * Previous versions of the operating system did not allow split | 112 | * Previous versions of the operating system did not allow split |
113 | * writes and detected partially written records in logredo by | 113 | * writes and detected partially written records in logredo by |
114 | * ordering the updates to the header, trailer, and the move of data | 114 | * ordering the updates to the header, trailer, and the move of data |
115 | * into the logdata area. The order: (1) data is moved (2) header | 115 | * into the logdata area. The order: (1) data is moved (2) header |
116 | * is updated (3) trailer is updated. In logredo, when the header | 116 | * is updated (3) trailer is updated. In logredo, when the header |
117 | * differed from the trailer, the header and trailer were reconciled | 117 | * differed from the trailer, the header and trailer were reconciled |
118 | * as follows: if h.page != t.page they were set to the smaller of | 118 | * as follows: if h.page != t.page they were set to the smaller of |
119 | * the two and h.eor and t.eor set to 8 (i.e. empty page). if (only) | 119 | * the two and h.eor and t.eor set to 8 (i.e. empty page). if (only) |
120 | * h.eor != t.eor they were set to the smaller of their two values. | 120 | * h.eor != t.eor they were set to the smaller of their two values. |
121 | */ | 121 | */ |
122 | struct logpage { | 122 | struct logpage { |
@@ -147,20 +147,20 @@ struct logpage { | |||
147 | * in a page, pages are written to temporary paging space if | 147 | * in a page, pages are written to temporary paging space if |
148 | * if they must be written to disk before commit, and i/o is | 148 | * if they must be written to disk before commit, and i/o is |
149 | * scheduled for modified pages to their home location after | 149 | * scheduled for modified pages to their home location after |
150 | * the log records containing the after values and the commit | 150 | * the log records containing the after values and the commit |
151 | * record is written to the log on disk, undo discards the copy | 151 | * record is written to the log on disk, undo discards the copy |
152 | * in main-memory.) | 152 | * in main-memory.) |
153 | * | 153 | * |
154 | * a log record consists of a data area of variable length followed by | 154 | * a log record consists of a data area of variable length followed by |
155 | * a descriptor of fixed size LOGRDSIZE bytes. | 155 | * a descriptor of fixed size LOGRDSIZE bytes. |
156 | * the data area is rounded up to an integral number of 4-bytes and | 156 | * the data area is rounded up to an integral number of 4-bytes and |
157 | * must be no longer than LOGPSIZE. | 157 | * must be no longer than LOGPSIZE. |
158 | * the descriptor is of size of multiple of 4-bytes and aligned on a | 158 | * the descriptor is of size of multiple of 4-bytes and aligned on a |
159 | * 4-byte boundary. | 159 | * 4-byte boundary. |
160 | * records are packed one after the other in the data area of log pages. | 160 | * records are packed one after the other in the data area of log pages. |
161 | * (sometimes a DUMMY record is inserted so that at least one record ends | 161 | * (sometimes a DUMMY record is inserted so that at least one record ends |
162 | * on every page or the longest record is placed on at most two pages). | 162 | * on every page or the longest record is placed on at most two pages). |
163 | * the field eor in page header/trailer points to the byte following | 163 | * the field eor in page header/trailer points to the byte following |
164 | * the last record on a page. | 164 | * the last record on a page. |
165 | */ | 165 | */ |
166 | 166 | ||
@@ -270,11 +270,11 @@ struct lrd { | |||
270 | /* | 270 | /* |
271 | * NOREDOINOEXT: the inode extent is freed | 271 | * NOREDOINOEXT: the inode extent is freed |
272 | * | 272 | * |
273 | * do not apply after-image records which precede this | 273 | * do not apply after-image records which precede this |
274 | * record in the log with the any of the 4 page block | 274 | * record in the log with the any of the 4 page block |
275 | * numbers in this inode extent. | 275 | * numbers in this inode extent. |
276 | * | 276 | * |
277 | * NOTE: The fileset and pxd fields MUST remain in | 277 | * NOTE: The fileset and pxd fields MUST remain in |
278 | * the same fields in the REDOPAGE record format. | 278 | * the same fields in the REDOPAGE record format. |
279 | * | 279 | * |
280 | */ | 280 | */ |
@@ -319,12 +319,10 @@ struct lrd { | |||
319 | * do not apply records which precede this record in the log | 319 | * do not apply records which precede this record in the log |
320 | * with the same inode number. | 320 | * with the same inode number. |
321 | * | 321 | * |
322 | * NOREDILE must be the first to be written at commit | 322 | * NOREDOFILE must be the first to be written at commit |
323 | * (last to be read in logredo()) - it prevents | 323 | * (last to be read in logredo()) - it prevents |
324 | * replay of preceding updates of all preceding generations | 324 | * replay of preceding updates of all preceding generations |
325 | * of the inumber esp. the on-disk inode itself, | 325 | * of the inumber esp. the on-disk inode itself. |
326 | * but does NOT prevent | ||
327 | * replay of the | ||
328 | */ | 326 | */ |
329 | struct { | 327 | struct { |
330 | __le32 fileset; /* 4: fileset number */ | 328 | __le32 fileset; /* 4: fileset number */ |
@@ -332,7 +330,7 @@ struct lrd { | |||
332 | } noredofile; | 330 | } noredofile; |
333 | 331 | ||
334 | /* | 332 | /* |
335 | * ? NEWPAGE: | 333 | * ? NEWPAGE: |
336 | * | 334 | * |
337 | * metadata type dependent | 335 | * metadata type dependent |
338 | */ | 336 | */ |
@@ -464,7 +462,7 @@ struct lbuf { | |||
464 | s64 l_blkno; /* 8: log page block number */ | 462 | s64 l_blkno; /* 8: log page block number */ |
465 | caddr_t l_ldata; /* 4: data page */ | 463 | caddr_t l_ldata; /* 4: data page */ |
466 | struct page *l_page; /* The page itself */ | 464 | struct page *l_page; /* The page itself */ |
467 | uint l_offset; /* Offset of l_ldata within the page */ | 465 | uint l_offset; /* Offset of l_ldata within the page */ |
468 | 466 | ||
469 | wait_queue_head_t l_ioevent; /* 4: i/o done event */ | 467 | wait_queue_head_t l_ioevent; /* 4: i/o done event */ |
470 | }; | 468 | }; |