diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /fs/xfs/xfs_buf_item.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'fs/xfs/xfs_buf_item.h')
-rw-r--r-- | fs/xfs/xfs_buf_item.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/fs/xfs/xfs_buf_item.h b/fs/xfs/xfs_buf_item.h new file mode 100644 index 000000000000..5f1b0c9308f6 --- /dev/null +++ b/fs/xfs/xfs_buf_item.h | |||
@@ -0,0 +1,171 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of version 2 of the GNU General Public License as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope that it would be useful, but | ||
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
11 | * | ||
12 | * Further, this software is distributed without any warranty that it is | ||
13 | * free of the rightful claim of any third person regarding infringement | ||
14 | * or the like. Any license provided herein, whether implied or | ||
15 | * otherwise, applies only to this software file. Patent licenses, if | ||
16 | * any, provided herein do not apply to combinations of this program with | ||
17 | * other software, or any other product whatsoever. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License along | ||
20 | * with this program; if not, write the Free Software Foundation, Inc., 59 | ||
21 | * Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
22 | * | ||
23 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, | ||
24 | * Mountain View, CA 94043, or: | ||
25 | * | ||
26 | * http://www.sgi.com | ||
27 | * | ||
28 | * For further information regarding this notice, see: | ||
29 | * | ||
30 | * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ | ||
31 | */ | ||
32 | #ifndef __XFS_BUF_ITEM_H__ | ||
33 | #define __XFS_BUF_ITEM_H__ | ||
34 | |||
35 | /* | ||
36 | * This is the structure used to lay out a buf log item in the | ||
37 | * log. The data map describes which 128 byte chunks of the buffer | ||
38 | * have been logged. This structure works only on buffers that | ||
39 | * reside up to the first TB in the filesystem. These buffers are | ||
40 | * generated only by pre-6.2 systems and are known as XFS_LI_6_1_BUF. | ||
41 | */ | ||
42 | typedef struct xfs_buf_log_format_v1 { | ||
43 | unsigned short blf_type; /* buf log item type indicator */ | ||
44 | unsigned short blf_size; /* size of this item */ | ||
45 | __int32_t blf_blkno; /* starting blkno of this buf */ | ||
46 | ushort blf_flags; /* misc state */ | ||
47 | ushort blf_len; /* number of blocks in this buf */ | ||
48 | unsigned int blf_map_size; /* size of data bitmap in words */ | ||
49 | unsigned int blf_data_map[1];/* variable size bitmap of */ | ||
50 | /* regions of buffer in this item */ | ||
51 | } xfs_buf_log_format_v1_t; | ||
52 | |||
53 | /* | ||
54 | * This is a form of the above structure with a 64 bit blkno field. | ||
55 | * For 6.2 and beyond, this is XFS_LI_BUF. We use this to log everything. | ||
56 | */ | ||
57 | typedef struct xfs_buf_log_format_t { | ||
58 | unsigned short blf_type; /* buf log item type indicator */ | ||
59 | unsigned short blf_size; /* size of this item */ | ||
60 | ushort blf_flags; /* misc state */ | ||
61 | ushort blf_len; /* number of blocks in this buf */ | ||
62 | __int64_t blf_blkno; /* starting blkno of this buf */ | ||
63 | unsigned int blf_map_size; /* size of data bitmap in words */ | ||
64 | unsigned int blf_data_map[1];/* variable size bitmap of */ | ||
65 | /* regions of buffer in this item */ | ||
66 | } xfs_buf_log_format_t; | ||
67 | |||
68 | /* | ||
69 | * This flag indicates that the buffer contains on disk inodes | ||
70 | * and requires special recovery handling. | ||
71 | */ | ||
72 | #define XFS_BLI_INODE_BUF 0x1 | ||
73 | /* | ||
74 | * This flag indicates that the buffer should not be replayed | ||
75 | * during recovery because its blocks are being freed. | ||
76 | */ | ||
77 | #define XFS_BLI_CANCEL 0x2 | ||
78 | /* | ||
79 | * This flag indicates that the buffer contains on disk | ||
80 | * user or group dquots and may require special recovery handling. | ||
81 | */ | ||
82 | #define XFS_BLI_UDQUOT_BUF 0x4 | ||
83 | /* #define XFS_BLI_PDQUOT_BUF 0x8 */ | ||
84 | #define XFS_BLI_GDQUOT_BUF 0x10 | ||
85 | |||
86 | #define XFS_BLI_CHUNK 128 | ||
87 | #define XFS_BLI_SHIFT 7 | ||
88 | #define BIT_TO_WORD_SHIFT 5 | ||
89 | #define NBWORD (NBBY * sizeof(unsigned int)) | ||
90 | |||
91 | /* | ||
92 | * buf log item flags | ||
93 | */ | ||
94 | #define XFS_BLI_HOLD 0x01 | ||
95 | #define XFS_BLI_DIRTY 0x02 | ||
96 | #define XFS_BLI_STALE 0x04 | ||
97 | #define XFS_BLI_LOGGED 0x08 | ||
98 | #define XFS_BLI_INODE_ALLOC_BUF 0x10 | ||
99 | #define XFS_BLI_STALE_INODE 0x20 | ||
100 | |||
101 | |||
102 | #ifdef __KERNEL__ | ||
103 | |||
104 | struct xfs_buf; | ||
105 | struct ktrace; | ||
106 | struct xfs_mount; | ||
107 | struct xfs_buf_log_item; | ||
108 | |||
109 | #if defined(XFS_BLI_TRACE) | ||
110 | #define XFS_BLI_TRACE_SIZE 32 | ||
111 | |||
112 | void xfs_buf_item_trace(char *, struct xfs_buf_log_item *); | ||
113 | #else | ||
114 | #define xfs_buf_item_trace(id, bip) | ||
115 | #endif | ||
116 | |||
117 | /* | ||
118 | * This is the in core log item structure used to track information | ||
119 | * needed to log buffers. It tracks how many times the lock has been | ||
120 | * locked, and which 128 byte chunks of the buffer are dirty. | ||
121 | */ | ||
122 | typedef struct xfs_buf_log_item { | ||
123 | xfs_log_item_t bli_item; /* common item structure */ | ||
124 | struct xfs_buf *bli_buf; /* real buffer pointer */ | ||
125 | unsigned int bli_flags; /* misc flags */ | ||
126 | unsigned int bli_recur; /* lock recursion count */ | ||
127 | atomic_t bli_refcount; /* cnt of tp refs */ | ||
128 | #ifdef XFS_BLI_TRACE | ||
129 | struct ktrace *bli_trace; /* event trace buf */ | ||
130 | #endif | ||
131 | #ifdef XFS_TRANS_DEBUG | ||
132 | char *bli_orig; /* original buffer copy */ | ||
133 | char *bli_logged; /* bytes logged (bitmap) */ | ||
134 | #endif | ||
135 | xfs_buf_log_format_t bli_format; /* in-log header */ | ||
136 | } xfs_buf_log_item_t; | ||
137 | |||
138 | /* | ||
139 | * This structure is used during recovery to record the buf log | ||
140 | * items which have been canceled and should not be replayed. | ||
141 | */ | ||
142 | typedef struct xfs_buf_cancel { | ||
143 | xfs_daddr_t bc_blkno; | ||
144 | uint bc_len; | ||
145 | int bc_refcount; | ||
146 | struct xfs_buf_cancel *bc_next; | ||
147 | } xfs_buf_cancel_t; | ||
148 | |||
149 | void xfs_buf_item_init(struct xfs_buf *, struct xfs_mount *); | ||
150 | void xfs_buf_item_relse(struct xfs_buf *); | ||
151 | void xfs_buf_item_log(xfs_buf_log_item_t *, uint, uint); | ||
152 | uint xfs_buf_item_dirty(xfs_buf_log_item_t *); | ||
153 | void xfs_buf_attach_iodone(struct xfs_buf *, | ||
154 | void(*)(struct xfs_buf *, xfs_log_item_t *), | ||
155 | xfs_log_item_t *); | ||
156 | void xfs_buf_iodone_callbacks(struct xfs_buf *); | ||
157 | void xfs_buf_iodone(struct xfs_buf *, xfs_buf_log_item_t *); | ||
158 | |||
159 | #ifdef XFS_TRANS_DEBUG | ||
160 | void | ||
161 | xfs_buf_item_flush_log_debug( | ||
162 | struct xfs_buf *bp, | ||
163 | uint first, | ||
164 | uint last); | ||
165 | #else | ||
166 | #define xfs_buf_item_flush_log_debug(bp, first, last) | ||
167 | #endif | ||
168 | |||
169 | #endif /* __KERNEL__ */ | ||
170 | |||
171 | #endif /* __XFS_BUF_ITEM_H__ */ | ||