aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jfs/jfs_logmgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/jfs/jfs_logmgr.h')
-rw-r--r--fs/jfs/jfs_logmgr.h76
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 */
122struct logpage { 122struct 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};