diff options
-rw-r--r-- | fs/xfs/xfs_ag.h | 5 | ||||
-rw-r--r-- | fs/xfs/xfs_alloc.h | 27 | ||||
-rw-r--r-- | fs/xfs/xfs_arch.h | 39 | ||||
-rw-r--r-- | fs/xfs/xfs_bit.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_bmap.h | 61 | ||||
-rw-r--r-- | fs/xfs/xfs_bmap_btree.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_btree.h | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_da_btree.h | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_ialloc.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_imap.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.h | 246 | ||||
-rw-r--r-- | fs/xfs/xfs_inode_item.h | 41 | ||||
-rw-r--r-- | fs/xfs/xfs_mount.h | 17 | ||||
-rw-r--r-- | fs/xfs/xfs_trans.h | 317 |
14 files changed, 383 insertions, 389 deletions
diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h index 61b292a9fb41..729ee3eb39ad 100644 --- a/fs/xfs/xfs_ag.h +++ b/fs/xfs/xfs_ag.h | |||
@@ -192,15 +192,16 @@ typedef struct xfs_perag | |||
192 | xfs_agino_t pagi_freecount; /* number of free inodes */ | 192 | xfs_agino_t pagi_freecount; /* number of free inodes */ |
193 | xfs_agino_t pagi_count; /* number of allocated inodes */ | 193 | xfs_agino_t pagi_count; /* number of allocated inodes */ |
194 | int pagb_count; /* pagb slots in use */ | 194 | int pagb_count; /* pagb slots in use */ |
195 | xfs_perag_busy_t *pagb_list; /* unstable blocks */ | ||
195 | #ifdef __KERNEL__ | 196 | #ifdef __KERNEL__ |
196 | spinlock_t pagb_lock; /* lock for pagb_list */ | 197 | spinlock_t pagb_lock; /* lock for pagb_list */ |
197 | #endif | 198 | |
198 | xfs_perag_busy_t *pagb_list; /* unstable blocks */ | ||
199 | atomic_t pagf_fstrms; /* # of filestreams active in this AG */ | 199 | atomic_t pagf_fstrms; /* # of filestreams active in this AG */ |
200 | 200 | ||
201 | int pag_ici_init; /* incore inode cache initialised */ | 201 | int pag_ici_init; /* incore inode cache initialised */ |
202 | rwlock_t pag_ici_lock; /* incore inode lock */ | 202 | rwlock_t pag_ici_lock; /* incore inode lock */ |
203 | struct radix_tree_root pag_ici_root; /* incore inode cache root */ | 203 | struct radix_tree_root pag_ici_root; /* incore inode cache root */ |
204 | #endif | ||
204 | } xfs_perag_t; | 205 | } xfs_perag_t; |
205 | 206 | ||
206 | #define XFS_AG_MAXLEVELS(mp) ((mp)->m_ag_maxlevels) | 207 | #define XFS_AG_MAXLEVELS(mp) ((mp)->m_ag_maxlevels) |
diff --git a/fs/xfs/xfs_alloc.h b/fs/xfs/xfs_alloc.h index 5aec15d0651e..588172796f7b 100644 --- a/fs/xfs/xfs_alloc.h +++ b/fs/xfs/xfs_alloc.h | |||
@@ -121,6 +121,19 @@ extern ktrace_t *xfs_alloc_trace_buf; | |||
121 | #define XFS_ALLOC_KTRACE_BUSYSEARCH 6 | 121 | #define XFS_ALLOC_KTRACE_BUSYSEARCH 6 |
122 | #endif | 122 | #endif |
123 | 123 | ||
124 | void | ||
125 | xfs_alloc_mark_busy(xfs_trans_t *tp, | ||
126 | xfs_agnumber_t agno, | ||
127 | xfs_agblock_t bno, | ||
128 | xfs_extlen_t len); | ||
129 | |||
130 | void | ||
131 | xfs_alloc_clear_busy(xfs_trans_t *tp, | ||
132 | xfs_agnumber_t ag, | ||
133 | int idx); | ||
134 | |||
135 | #endif /* __KERNEL__ */ | ||
136 | |||
124 | /* | 137 | /* |
125 | * Compute and fill in value of m_ag_maxlevels. | 138 | * Compute and fill in value of m_ag_maxlevels. |
126 | */ | 139 | */ |
@@ -196,18 +209,4 @@ xfs_free_extent( | |||
196 | xfs_fsblock_t bno, /* starting block number of extent */ | 209 | xfs_fsblock_t bno, /* starting block number of extent */ |
197 | xfs_extlen_t len); /* length of extent */ | 210 | xfs_extlen_t len); /* length of extent */ |
198 | 211 | ||
199 | void | ||
200 | xfs_alloc_mark_busy(xfs_trans_t *tp, | ||
201 | xfs_agnumber_t agno, | ||
202 | xfs_agblock_t bno, | ||
203 | xfs_extlen_t len); | ||
204 | |||
205 | void | ||
206 | xfs_alloc_clear_busy(xfs_trans_t *tp, | ||
207 | xfs_agnumber_t ag, | ||
208 | int idx); | ||
209 | |||
210 | |||
211 | #endif /* __KERNEL__ */ | ||
212 | |||
213 | #endif /* __XFS_ALLOC_H__ */ | 212 | #endif /* __XFS_ALLOC_H__ */ |
diff --git a/fs/xfs/xfs_arch.h b/fs/xfs/xfs_arch.h index 0b3b5efe848c..53d5e70d1360 100644 --- a/fs/xfs/xfs_arch.h +++ b/fs/xfs/xfs_arch.h | |||
@@ -41,21 +41,36 @@ | |||
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | #ifdef XFS_NATIVE_HOST | 43 | #ifdef XFS_NATIVE_HOST |
44 | #define cpu_to_be16(val) ((__be16)(val)) | 44 | #define cpu_to_be16(val) ((__force __be16)(__u16)(val)) |
45 | #define cpu_to_be32(val) ((__be32)(val)) | 45 | #define cpu_to_be32(val) ((__force __be32)(__u32)(val)) |
46 | #define cpu_to_be64(val) ((__be64)(val)) | 46 | #define cpu_to_be64(val) ((__force __be64)(__u64)(val)) |
47 | #define be16_to_cpu(val) ((__uint16_t)(val)) | 47 | #define be16_to_cpu(val) ((__force __u16)(__be16)(val)) |
48 | #define be32_to_cpu(val) ((__uint32_t)(val)) | 48 | #define be32_to_cpu(val) ((__force __u32)(__be32)(val)) |
49 | #define be64_to_cpu(val) ((__uint64_t)(val)) | 49 | #define be64_to_cpu(val) ((__force __u64)(__be64)(val)) |
50 | #else | 50 | #else |
51 | #define cpu_to_be16(val) (__swab16((__uint16_t)(val))) | 51 | #define cpu_to_be16(val) ((__force __be16)__swab16((__u16)(val))) |
52 | #define cpu_to_be32(val) (__swab32((__uint32_t)(val))) | 52 | #define cpu_to_be32(val) ((__force __be32)__swab32((__u32)(val))) |
53 | #define cpu_to_be64(val) (__swab64((__uint64_t)(val))) | 53 | #define cpu_to_be64(val) ((__force __be64)__swab64((__u64)(val))) |
54 | #define be16_to_cpu(val) (__swab16((__be16)(val))) | 54 | #define be16_to_cpu(val) (__swab16((__force __u16)(__be16)(val))) |
55 | #define be32_to_cpu(val) (__swab32((__be32)(val))) | 55 | #define be32_to_cpu(val) (__swab32((__force __u32)(__be32)(val))) |
56 | #define be64_to_cpu(val) (__swab64((__be64)(val))) | 56 | #define be64_to_cpu(val) (__swab64((__force __u64)(__be64)(val))) |
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | static inline void be16_add_cpu(__be16 *a, __s16 b) | ||
60 | { | ||
61 | *a = cpu_to_be16(be16_to_cpu(*a) + b); | ||
62 | } | ||
63 | |||
64 | static inline void be32_add_cpu(__be32 *a, __s32 b) | ||
65 | { | ||
66 | *a = cpu_to_be32(be32_to_cpu(*a) + b); | ||
67 | } | ||
68 | |||
69 | static inline void be64_add_cpu(__be64 *a, __s64 b) | ||
70 | { | ||
71 | *a = cpu_to_be64(be64_to_cpu(*a) + b); | ||
72 | } | ||
73 | |||
59 | #endif /* __KERNEL__ */ | 74 | #endif /* __KERNEL__ */ |
60 | 75 | ||
61 | /* do we need conversion? */ | 76 | /* do we need conversion? */ |
diff --git a/fs/xfs/xfs_bit.h b/fs/xfs/xfs_bit.h index 8e0e463dae2d..bca7b243c319 100644 --- a/fs/xfs/xfs_bit.h +++ b/fs/xfs/xfs_bit.h | |||
@@ -61,8 +61,7 @@ static inline int xfs_highbit64(__uint64_t v) | |||
61 | /* Get low bit set out of 32-bit argument, -1 if none set */ | 61 | /* Get low bit set out of 32-bit argument, -1 if none set */ |
62 | static inline int xfs_lowbit32(__uint32_t v) | 62 | static inline int xfs_lowbit32(__uint32_t v) |
63 | { | 63 | { |
64 | unsigned long t = v; | 64 | return ffs(v) - 1; |
65 | return (v) ? find_first_bit(&t, 32) : -1; | ||
66 | } | 65 | } |
67 | 66 | ||
68 | /* Get low bit set out of 64-bit argument, -1 if none set */ | 67 | /* Get low bit set out of 64-bit argument, -1 if none set */ |
diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h index 9f3e3a836d15..7c9d12cd7a47 100644 --- a/fs/xfs/xfs_bmap.h +++ b/fs/xfs/xfs_bmap.h | |||
@@ -137,9 +137,7 @@ typedef struct xfs_bmalloca { | |||
137 | char conv; /* overwriting unwritten extents */ | 137 | char conv; /* overwriting unwritten extents */ |
138 | } xfs_bmalloca_t; | 138 | } xfs_bmalloca_t; |
139 | 139 | ||
140 | #ifdef __KERNEL__ | 140 | #if defined(__KERNEL__) && defined(XFS_BMAP_TRACE) |
141 | |||
142 | #if defined(XFS_BMAP_TRACE) | ||
143 | /* | 141 | /* |
144 | * Trace operations for bmap extent tracing | 142 | * Trace operations for bmap extent tracing |
145 | */ | 143 | */ |
@@ -163,9 +161,12 @@ xfs_bmap_trace_exlist( | |||
163 | int whichfork); /* data or attr fork */ | 161 | int whichfork); /* data or attr fork */ |
164 | #define XFS_BMAP_TRACE_EXLIST(ip,c,w) \ | 162 | #define XFS_BMAP_TRACE_EXLIST(ip,c,w) \ |
165 | xfs_bmap_trace_exlist(__func__,ip,c,w) | 163 | xfs_bmap_trace_exlist(__func__,ip,c,w) |
166 | #else | 164 | |
165 | #else /* __KERNEL__ && XFS_BMAP_TRACE */ | ||
166 | |||
167 | #define XFS_BMAP_TRACE_EXLIST(ip,c,w) | 167 | #define XFS_BMAP_TRACE_EXLIST(ip,c,w) |
168 | #endif | 168 | |
169 | #endif /* __KERNEL__ && XFS_BMAP_TRACE */ | ||
169 | 170 | ||
170 | /* | 171 | /* |
171 | * Convert inode from non-attributed to attributed. | 172 | * Convert inode from non-attributed to attributed. |
@@ -206,20 +207,6 @@ xfs_bmap_compute_maxlevels( | |||
206 | int whichfork); /* data or attr fork */ | 207 | int whichfork); /* data or attr fork */ |
207 | 208 | ||
208 | /* | 209 | /* |
209 | * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi | ||
210 | * caller. Frees all the extents that need freeing, which must be done | ||
211 | * last due to locking considerations. | ||
212 | * | ||
213 | * Return 1 if the given transaction was committed and a new one allocated, | ||
214 | * and 0 otherwise. | ||
215 | */ | ||
216 | int /* error */ | ||
217 | xfs_bmap_finish( | ||
218 | struct xfs_trans **tp, /* transaction pointer addr */ | ||
219 | xfs_bmap_free_t *flist, /* i/o: list extents to free */ | ||
220 | int *committed); /* xact committed or not */ | ||
221 | |||
222 | /* | ||
223 | * Returns the file-relative block number of the first unused block in the file. | 210 | * Returns the file-relative block number of the first unused block in the file. |
224 | * This is the lowest-address hole if the file has holes, else the first block | 211 | * This is the lowest-address hole if the file has holes, else the first block |
225 | * past the end of file. | 212 | * past the end of file. |
@@ -344,6 +331,32 @@ xfs_bunmapi( | |||
344 | int *done); /* set if not done yet */ | 331 | int *done); /* set if not done yet */ |
345 | 332 | ||
346 | /* | 333 | /* |
334 | * Check an extent list, which has just been read, for | ||
335 | * any bit in the extent flag field. | ||
336 | */ | ||
337 | int | ||
338 | xfs_check_nostate_extents( | ||
339 | struct xfs_ifork *ifp, | ||
340 | xfs_extnum_t idx, | ||
341 | xfs_extnum_t num); | ||
342 | |||
343 | #ifdef __KERNEL__ | ||
344 | |||
345 | /* | ||
346 | * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi | ||
347 | * caller. Frees all the extents that need freeing, which must be done | ||
348 | * last due to locking considerations. | ||
349 | * | ||
350 | * Return 1 if the given transaction was committed and a new one allocated, | ||
351 | * and 0 otherwise. | ||
352 | */ | ||
353 | int /* error */ | ||
354 | xfs_bmap_finish( | ||
355 | struct xfs_trans **tp, /* transaction pointer addr */ | ||
356 | xfs_bmap_free_t *flist, /* i/o: list extents to free */ | ||
357 | int *committed); /* xact committed or not */ | ||
358 | |||
359 | /* | ||
347 | * Fcntl interface to xfs_bmapi. | 360 | * Fcntl interface to xfs_bmapi. |
348 | */ | 361 | */ |
349 | int /* error code */ | 362 | int /* error code */ |
@@ -375,16 +388,6 @@ xfs_bmap_count_blocks( | |||
375 | int *count); | 388 | int *count); |
376 | 389 | ||
377 | /* | 390 | /* |
378 | * Check an extent list, which has just been read, for | ||
379 | * any bit in the extent flag field. | ||
380 | */ | ||
381 | int | ||
382 | xfs_check_nostate_extents( | ||
383 | struct xfs_ifork *ifp, | ||
384 | xfs_extnum_t idx, | ||
385 | xfs_extnum_t num); | ||
386 | |||
387 | /* | ||
388 | * Search the extent records for the entry containing block bno. | 391 | * Search the extent records for the entry containing block bno. |
389 | * If bno lies in a hole, point to the next entry. If bno lies | 392 | * If bno lies in a hole, point to the next entry. If bno lies |
390 | * past eof, *eofp will be set, and *prevp will contain the last | 393 | * past eof, *eofp will be set, and *prevp will contain the last |
diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h index 6f38e2505701..5669242b52d3 100644 --- a/fs/xfs/xfs_bmap_btree.h +++ b/fs/xfs/xfs_bmap_btree.h | |||
@@ -231,8 +231,6 @@ typedef struct xfs_btree_lblock xfs_bmbt_block_t; | |||
231 | be16_to_cpu((bb)->bb_numrecs) <= (mp)->m_bmap_dmxr[(level) != 0]) | 231 | be16_to_cpu((bb)->bb_numrecs) <= (mp)->m_bmap_dmxr[(level) != 0]) |
232 | 232 | ||
233 | 233 | ||
234 | #ifdef __KERNEL__ | ||
235 | |||
236 | /* | 234 | /* |
237 | * Prototypes for xfs_bmap.c to call. | 235 | * Prototypes for xfs_bmap.c to call. |
238 | */ | 236 | */ |
@@ -264,6 +262,5 @@ extern void xfs_bmbt_to_bmdr(xfs_bmbt_block_t *, int, xfs_bmdr_block_t *, int); | |||
264 | extern struct xfs_btree_cur *xfs_bmbt_init_cursor(struct xfs_mount *, | 262 | extern struct xfs_btree_cur *xfs_bmbt_init_cursor(struct xfs_mount *, |
265 | struct xfs_trans *, struct xfs_inode *, int); | 263 | struct xfs_trans *, struct xfs_inode *, int); |
266 | 264 | ||
267 | #endif /* __KERNEL__ */ | ||
268 | 265 | ||
269 | #endif /* __XFS_BMAP_BTREE_H__ */ | 266 | #endif /* __XFS_BMAP_BTREE_H__ */ |
diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h index 2a22c587f1ae..7425b2b4a254 100644 --- a/fs/xfs/xfs_btree.h +++ b/fs/xfs/xfs_btree.h | |||
@@ -327,8 +327,6 @@ typedef struct xfs_btree_cur | |||
327 | #define XFS_BUF_TO_SBLOCK(bp) ((xfs_btree_sblock_t *)XFS_BUF_PTR(bp)) | 327 | #define XFS_BUF_TO_SBLOCK(bp) ((xfs_btree_sblock_t *)XFS_BUF_PTR(bp)) |
328 | 328 | ||
329 | 329 | ||
330 | #ifdef __KERNEL__ | ||
331 | |||
332 | /* | 330 | /* |
333 | * Check that long form block header is ok. | 331 | * Check that long form block header is ok. |
334 | */ | 332 | */ |
@@ -515,8 +513,6 @@ static inline int xfs_btree_get_level(struct xfs_btree_block *block) | |||
515 | return be16_to_cpu(block->bb_level); | 513 | return be16_to_cpu(block->bb_level); |
516 | } | 514 | } |
517 | 515 | ||
518 | #endif /* __KERNEL__ */ | ||
519 | |||
520 | 516 | ||
521 | /* | 517 | /* |
522 | * Min and max functions for extlen, agblock, fileoff, and filblks types. | 518 | * Min and max functions for extlen, agblock, fileoff, and filblks types. |
diff --git a/fs/xfs/xfs_da_btree.h b/fs/xfs/xfs_da_btree.h index 599e270e6959..70b710c1792d 100644 --- a/fs/xfs/xfs_da_btree.h +++ b/fs/xfs/xfs_da_btree.h | |||
@@ -206,9 +206,8 @@ struct xfs_nameops { | |||
206 | }; | 206 | }; |
207 | 207 | ||
208 | 208 | ||
209 | #ifdef __KERNEL__ | ||
210 | /*======================================================================== | 209 | /*======================================================================== |
211 | * Function prototypes for the kernel. | 210 | * Function prototypes. |
212 | *========================================================================*/ | 211 | *========================================================================*/ |
213 | 212 | ||
214 | /* | 213 | /* |
@@ -269,6 +268,5 @@ xfs_daddr_t xfs_da_blkno(xfs_dabuf_t *dabuf); | |||
269 | 268 | ||
270 | extern struct kmem_zone *xfs_da_state_zone; | 269 | extern struct kmem_zone *xfs_da_state_zone; |
271 | extern struct kmem_zone *xfs_dabuf_zone; | 270 | extern struct kmem_zone *xfs_dabuf_zone; |
272 | #endif /* __KERNEL__ */ | ||
273 | 271 | ||
274 | #endif /* __XFS_DA_BTREE_H__ */ | 272 | #endif /* __XFS_DA_BTREE_H__ */ |
diff --git a/fs/xfs/xfs_ialloc.h b/fs/xfs/xfs_ialloc.h index c5745f6d94ec..ccf554a6e0a1 100644 --- a/fs/xfs/xfs_ialloc.h +++ b/fs/xfs/xfs_ialloc.h | |||
@@ -56,7 +56,6 @@ static inline int xfs_ialloc_find_free(xfs_inofree_t *fp) | |||
56 | } | 56 | } |
57 | 57 | ||
58 | 58 | ||
59 | #ifdef __KERNEL__ | ||
60 | /* | 59 | /* |
61 | * Allocate an inode on disk. | 60 | * Allocate an inode on disk. |
62 | * Mode is used to tell whether the new inode will need space, and whether | 61 | * Mode is used to tell whether the new inode will need space, and whether |
@@ -174,6 +173,4 @@ int xfs_inobt_lookup_le(struct xfs_btree_cur *cur, xfs_agino_t ino, | |||
174 | extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino, | 173 | extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino, |
175 | __int32_t *fcnt, xfs_inofree_t *free, int *stat); | 174 | __int32_t *fcnt, xfs_inofree_t *free, int *stat); |
176 | 175 | ||
177 | #endif /* __KERNEL__ */ | ||
178 | |||
179 | #endif /* __XFS_IALLOC_H__ */ | 176 | #endif /* __XFS_IALLOC_H__ */ |
diff --git a/fs/xfs/xfs_imap.h b/fs/xfs/xfs_imap.h index d36450003983..f9ce62890ea5 100644 --- a/fs/xfs/xfs_imap.h +++ b/fs/xfs/xfs_imap.h | |||
@@ -30,11 +30,9 @@ typedef struct xfs_imap { | |||
30 | ushort im_boffset; /* inode offset in block in bytes */ | 30 | ushort im_boffset; /* inode offset in block in bytes */ |
31 | } xfs_imap_t; | 31 | } xfs_imap_t; |
32 | 32 | ||
33 | #ifdef __KERNEL__ | ||
34 | struct xfs_mount; | 33 | struct xfs_mount; |
35 | struct xfs_trans; | 34 | struct xfs_trans; |
36 | int xfs_imap(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, | 35 | int xfs_imap(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, |
37 | xfs_imap_t *, uint); | 36 | xfs_imap_t *, uint); |
38 | #endif | ||
39 | 37 | ||
40 | #endif /* __XFS_IMAP_H__ */ | 38 | #endif /* __XFS_IMAP_H__ */ |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 2a69a7dee228..a8f1e6833aa6 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
@@ -20,7 +20,7 @@ | |||
20 | 20 | ||
21 | struct xfs_dinode; | 21 | struct xfs_dinode; |
22 | struct xfs_dinode_core; | 22 | struct xfs_dinode_core; |
23 | 23 | struct xfs_inode; | |
24 | 24 | ||
25 | /* | 25 | /* |
26 | * Fork identifiers. | 26 | * Fork identifiers. |
@@ -84,54 +84,6 @@ typedef struct xfs_ifork { | |||
84 | } xfs_ifork_t; | 84 | } xfs_ifork_t; |
85 | 85 | ||
86 | /* | 86 | /* |
87 | * Flags for xfs_ichgtime(). | ||
88 | */ | ||
89 | #define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */ | ||
90 | #define XFS_ICHGTIME_CHG 0x2 /* inode field change timestamp */ | ||
91 | |||
92 | /* | ||
93 | * Per-fork incore inode flags. | ||
94 | */ | ||
95 | #define XFS_IFINLINE 0x01 /* Inline data is read in */ | ||
96 | #define XFS_IFEXTENTS 0x02 /* All extent pointers are read in */ | ||
97 | #define XFS_IFBROOT 0x04 /* i_broot points to the bmap b-tree root */ | ||
98 | #define XFS_IFEXTIREC 0x08 /* Indirection array of extent blocks */ | ||
99 | |||
100 | /* | ||
101 | * Flags for xfs_itobp(), xfs_imap() and xfs_dilocate(). | ||
102 | */ | ||
103 | #define XFS_IMAP_LOOKUP 0x1 | ||
104 | #define XFS_IMAP_BULKSTAT 0x2 | ||
105 | |||
106 | #ifdef __KERNEL__ | ||
107 | struct bhv_desc; | ||
108 | struct cred; | ||
109 | struct ktrace; | ||
110 | struct xfs_buf; | ||
111 | struct xfs_bmap_free; | ||
112 | struct xfs_bmbt_irec; | ||
113 | struct xfs_bmbt_block; | ||
114 | struct xfs_inode; | ||
115 | struct xfs_inode_log_item; | ||
116 | struct xfs_mount; | ||
117 | struct xfs_trans; | ||
118 | struct xfs_dquot; | ||
119 | |||
120 | #if defined(XFS_ILOCK_TRACE) | ||
121 | #define XFS_ILOCK_KTRACE_SIZE 32 | ||
122 | extern ktrace_t *xfs_ilock_trace_buf; | ||
123 | extern void xfs_ilock_trace(struct xfs_inode *, int, unsigned int, inst_t *); | ||
124 | #else | ||
125 | #define xfs_ilock_trace(i,n,f,ra) | ||
126 | #endif | ||
127 | |||
128 | typedef struct dm_attrs_s { | ||
129 | __uint32_t da_dmevmask; /* DMIG event mask */ | ||
130 | __uint16_t da_dmstate; /* DMIG state info */ | ||
131 | __uint16_t da_pad; /* DMIG extra padding */ | ||
132 | } dm_attrs_t; | ||
133 | |||
134 | /* | ||
135 | * This is the xfs in-core inode structure. | 87 | * This is the xfs in-core inode structure. |
136 | * Most of the on-disk inode is embedded in the i_d field. | 88 | * Most of the on-disk inode is embedded in the i_d field. |
137 | * | 89 | * |
@@ -191,6 +143,96 @@ typedef struct xfs_icdinode { | |||
191 | __uint32_t di_gen; /* generation number */ | 143 | __uint32_t di_gen; /* generation number */ |
192 | } xfs_icdinode_t; | 144 | } xfs_icdinode_t; |
193 | 145 | ||
146 | /* | ||
147 | * Flags for xfs_ichgtime(). | ||
148 | */ | ||
149 | #define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */ | ||
150 | #define XFS_ICHGTIME_CHG 0x2 /* inode field change timestamp */ | ||
151 | |||
152 | /* | ||
153 | * Per-fork incore inode flags. | ||
154 | */ | ||
155 | #define XFS_IFINLINE 0x01 /* Inline data is read in */ | ||
156 | #define XFS_IFEXTENTS 0x02 /* All extent pointers are read in */ | ||
157 | #define XFS_IFBROOT 0x04 /* i_broot points to the bmap b-tree root */ | ||
158 | #define XFS_IFEXTIREC 0x08 /* Indirection array of extent blocks */ | ||
159 | |||
160 | /* | ||
161 | * Flags for xfs_itobp(), xfs_imap() and xfs_dilocate(). | ||
162 | */ | ||
163 | #define XFS_IMAP_LOOKUP 0x1 | ||
164 | #define XFS_IMAP_BULKSTAT 0x2 | ||
165 | |||
166 | /* | ||
167 | * Fork handling. | ||
168 | */ | ||
169 | |||
170 | #define XFS_IFORK_Q(ip) ((ip)->i_d.di_forkoff != 0) | ||
171 | #define XFS_IFORK_BOFF(ip) ((int)((ip)->i_d.di_forkoff << 3)) | ||
172 | |||
173 | #define XFS_IFORK_PTR(ip,w) \ | ||
174 | ((w) == XFS_DATA_FORK ? \ | ||
175 | &(ip)->i_df : \ | ||
176 | (ip)->i_afp) | ||
177 | #define XFS_IFORK_DSIZE(ip) \ | ||
178 | (XFS_IFORK_Q(ip) ? \ | ||
179 | XFS_IFORK_BOFF(ip) : \ | ||
180 | XFS_LITINO((ip)->i_mount)) | ||
181 | #define XFS_IFORK_ASIZE(ip) \ | ||
182 | (XFS_IFORK_Q(ip) ? \ | ||
183 | XFS_LITINO((ip)->i_mount) - XFS_IFORK_BOFF(ip) : \ | ||
184 | 0) | ||
185 | #define XFS_IFORK_SIZE(ip,w) \ | ||
186 | ((w) == XFS_DATA_FORK ? \ | ||
187 | XFS_IFORK_DSIZE(ip) : \ | ||
188 | XFS_IFORK_ASIZE(ip)) | ||
189 | #define XFS_IFORK_FORMAT(ip,w) \ | ||
190 | ((w) == XFS_DATA_FORK ? \ | ||
191 | (ip)->i_d.di_format : \ | ||
192 | (ip)->i_d.di_aformat) | ||
193 | #define XFS_IFORK_FMT_SET(ip,w,n) \ | ||
194 | ((w) == XFS_DATA_FORK ? \ | ||
195 | ((ip)->i_d.di_format = (n)) : \ | ||
196 | ((ip)->i_d.di_aformat = (n))) | ||
197 | #define XFS_IFORK_NEXTENTS(ip,w) \ | ||
198 | ((w) == XFS_DATA_FORK ? \ | ||
199 | (ip)->i_d.di_nextents : \ | ||
200 | (ip)->i_d.di_anextents) | ||
201 | #define XFS_IFORK_NEXT_SET(ip,w,n) \ | ||
202 | ((w) == XFS_DATA_FORK ? \ | ||
203 | ((ip)->i_d.di_nextents = (n)) : \ | ||
204 | ((ip)->i_d.di_anextents = (n))) | ||
205 | |||
206 | |||
207 | |||
208 | #ifdef __KERNEL__ | ||
209 | |||
210 | struct bhv_desc; | ||
211 | struct cred; | ||
212 | struct ktrace; | ||
213 | struct xfs_buf; | ||
214 | struct xfs_bmap_free; | ||
215 | struct xfs_bmbt_irec; | ||
216 | struct xfs_bmbt_block; | ||
217 | struct xfs_inode_log_item; | ||
218 | struct xfs_mount; | ||
219 | struct xfs_trans; | ||
220 | struct xfs_dquot; | ||
221 | |||
222 | #if defined(XFS_ILOCK_TRACE) | ||
223 | #define XFS_ILOCK_KTRACE_SIZE 32 | ||
224 | extern ktrace_t *xfs_ilock_trace_buf; | ||
225 | extern void xfs_ilock_trace(struct xfs_inode *, int, unsigned int, inst_t *); | ||
226 | #else | ||
227 | #define xfs_ilock_trace(i,n,f,ra) | ||
228 | #endif | ||
229 | |||
230 | typedef struct dm_attrs_s { | ||
231 | __uint32_t da_dmevmask; /* DMIG event mask */ | ||
232 | __uint16_t da_dmstate; /* DMIG state info */ | ||
233 | __uint16_t da_pad; /* DMIG extra padding */ | ||
234 | } dm_attrs_t; | ||
235 | |||
194 | typedef struct { | 236 | typedef struct { |
195 | struct xfs_inode *ip_mnext; /* next inode in mount list */ | 237 | struct xfs_inode *ip_mnext; /* next inode in mount list */ |
196 | struct xfs_inode *ip_mprev; /* ptr to prev inode */ | 238 | struct xfs_inode *ip_mprev; /* ptr to prev inode */ |
@@ -327,50 +369,26 @@ xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags) | |||
327 | spin_unlock(&ip->i_flags_lock); | 369 | spin_unlock(&ip->i_flags_lock); |
328 | return ret; | 370 | return ret; |
329 | } | 371 | } |
330 | #endif /* __KERNEL__ */ | ||
331 | |||
332 | 372 | ||
333 | /* | 373 | /* |
334 | * Fork handling. | 374 | * Manage the i_flush queue embedded in the inode. This completion |
375 | * queue synchronizes processes attempting to flush the in-core | ||
376 | * inode back to disk. | ||
335 | */ | 377 | */ |
378 | static inline void xfs_iflock(xfs_inode_t *ip) | ||
379 | { | ||
380 | wait_for_completion(&ip->i_flush); | ||
381 | } | ||
336 | 382 | ||
337 | #define XFS_IFORK_Q(ip) ((ip)->i_d.di_forkoff != 0) | 383 | static inline int xfs_iflock_nowait(xfs_inode_t *ip) |
338 | #define XFS_IFORK_BOFF(ip) ((int)((ip)->i_d.di_forkoff << 3)) | 384 | { |
339 | 385 | return try_wait_for_completion(&ip->i_flush); | |
340 | #define XFS_IFORK_PTR(ip,w) \ | 386 | } |
341 | ((w) == XFS_DATA_FORK ? \ | ||
342 | &(ip)->i_df : \ | ||
343 | (ip)->i_afp) | ||
344 | #define XFS_IFORK_DSIZE(ip) \ | ||
345 | (XFS_IFORK_Q(ip) ? \ | ||
346 | XFS_IFORK_BOFF(ip) : \ | ||
347 | XFS_LITINO((ip)->i_mount)) | ||
348 | #define XFS_IFORK_ASIZE(ip) \ | ||
349 | (XFS_IFORK_Q(ip) ? \ | ||
350 | XFS_LITINO((ip)->i_mount) - XFS_IFORK_BOFF(ip) : \ | ||
351 | 0) | ||
352 | #define XFS_IFORK_SIZE(ip,w) \ | ||
353 | ((w) == XFS_DATA_FORK ? \ | ||
354 | XFS_IFORK_DSIZE(ip) : \ | ||
355 | XFS_IFORK_ASIZE(ip)) | ||
356 | #define XFS_IFORK_FORMAT(ip,w) \ | ||
357 | ((w) == XFS_DATA_FORK ? \ | ||
358 | (ip)->i_d.di_format : \ | ||
359 | (ip)->i_d.di_aformat) | ||
360 | #define XFS_IFORK_FMT_SET(ip,w,n) \ | ||
361 | ((w) == XFS_DATA_FORK ? \ | ||
362 | ((ip)->i_d.di_format = (n)) : \ | ||
363 | ((ip)->i_d.di_aformat = (n))) | ||
364 | #define XFS_IFORK_NEXTENTS(ip,w) \ | ||
365 | ((w) == XFS_DATA_FORK ? \ | ||
366 | (ip)->i_d.di_nextents : \ | ||
367 | (ip)->i_d.di_anextents) | ||
368 | #define XFS_IFORK_NEXT_SET(ip,w,n) \ | ||
369 | ((w) == XFS_DATA_FORK ? \ | ||
370 | ((ip)->i_d.di_nextents = (n)) : \ | ||
371 | ((ip)->i_d.di_anextents = (n))) | ||
372 | 387 | ||
373 | #ifdef __KERNEL__ | 388 | static inline void xfs_ifunlock(xfs_inode_t *ip) |
389 | { | ||
390 | complete(&ip->i_flush); | ||
391 | } | ||
374 | 392 | ||
375 | /* | 393 | /* |
376 | * In-core inode flags. | 394 | * In-core inode flags. |
@@ -490,19 +508,11 @@ int xfs_finish_reclaim_all(struct xfs_mount *, int); | |||
490 | /* | 508 | /* |
491 | * xfs_inode.c prototypes. | 509 | * xfs_inode.c prototypes. |
492 | */ | 510 | */ |
493 | int xfs_itobp(struct xfs_mount *, struct xfs_trans *, | ||
494 | xfs_inode_t *, struct xfs_dinode **, struct xfs_buf **, | ||
495 | xfs_daddr_t, uint, uint); | ||
496 | int xfs_iread(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, | 511 | int xfs_iread(struct xfs_mount *, struct xfs_trans *, xfs_ino_t, |
497 | xfs_inode_t **, xfs_daddr_t, uint); | 512 | xfs_inode_t **, xfs_daddr_t, uint); |
498 | int xfs_iread_extents(struct xfs_trans *, xfs_inode_t *, int); | ||
499 | int xfs_ialloc(struct xfs_trans *, xfs_inode_t *, mode_t, | 513 | int xfs_ialloc(struct xfs_trans *, xfs_inode_t *, mode_t, |
500 | xfs_nlink_t, xfs_dev_t, struct cred *, xfs_prid_t, | 514 | xfs_nlink_t, xfs_dev_t, struct cred *, xfs_prid_t, |
501 | int, struct xfs_buf **, boolean_t *, xfs_inode_t **); | 515 | int, struct xfs_buf **, boolean_t *, xfs_inode_t **); |
502 | void xfs_dinode_from_disk(struct xfs_icdinode *, | ||
503 | struct xfs_dinode_core *); | ||
504 | void xfs_dinode_to_disk(struct xfs_dinode_core *, | ||
505 | struct xfs_icdinode *); | ||
506 | 516 | ||
507 | uint xfs_ip2xflags(struct xfs_inode *); | 517 | uint xfs_ip2xflags(struct xfs_inode *); |
508 | uint xfs_dic2xflags(struct xfs_dinode *); | 518 | uint xfs_dic2xflags(struct xfs_dinode *); |
@@ -514,15 +524,11 @@ int xfs_itruncate_finish(struct xfs_trans **, xfs_inode_t *, | |||
514 | int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); | 524 | int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); |
515 | 525 | ||
516 | struct xfs_inode * xfs_inode_alloc(struct xfs_mount *, xfs_ino_t); | 526 | struct xfs_inode * xfs_inode_alloc(struct xfs_mount *, xfs_ino_t); |
517 | void xfs_idestroy_fork(xfs_inode_t *, int); | ||
518 | void xfs_idestroy(xfs_inode_t *); | 527 | void xfs_idestroy(xfs_inode_t *); |
519 | void xfs_idata_realloc(xfs_inode_t *, int, int); | ||
520 | void xfs_iextract(xfs_inode_t *); | 528 | void xfs_iextract(xfs_inode_t *); |
521 | void xfs_iext_realloc(xfs_inode_t *, int, int); | 529 | void xfs_iext_realloc(xfs_inode_t *, int, int); |
522 | void xfs_iroot_realloc(xfs_inode_t *, int, int); | ||
523 | void xfs_ipin(xfs_inode_t *); | 530 | void xfs_ipin(xfs_inode_t *); |
524 | void xfs_iunpin(xfs_inode_t *); | 531 | void xfs_iunpin(xfs_inode_t *); |
525 | int xfs_iextents_copy(xfs_inode_t *, xfs_bmbt_rec_t *, int); | ||
526 | int xfs_iflush(xfs_inode_t *, uint); | 532 | int xfs_iflush(xfs_inode_t *, uint); |
527 | void xfs_iflush_all(struct xfs_mount *); | 533 | void xfs_iflush_all(struct xfs_mount *); |
528 | void xfs_ichgtime(xfs_inode_t *, int); | 534 | void xfs_ichgtime(xfs_inode_t *, int); |
@@ -533,6 +539,21 @@ void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); | |||
533 | void xfs_synchronize_atime(xfs_inode_t *); | 539 | void xfs_synchronize_atime(xfs_inode_t *); |
534 | void xfs_mark_inode_dirty_sync(xfs_inode_t *); | 540 | void xfs_mark_inode_dirty_sync(xfs_inode_t *); |
535 | 541 | ||
542 | #endif /* __KERNEL__ */ | ||
543 | |||
544 | int xfs_itobp(struct xfs_mount *, struct xfs_trans *, | ||
545 | struct xfs_inode *, struct xfs_dinode **, | ||
546 | struct xfs_buf **, xfs_daddr_t, uint, uint); | ||
547 | void xfs_dinode_from_disk(struct xfs_icdinode *, | ||
548 | struct xfs_dinode_core *); | ||
549 | void xfs_dinode_to_disk(struct xfs_dinode_core *, | ||
550 | struct xfs_icdinode *); | ||
551 | void xfs_idestroy_fork(struct xfs_inode *, int); | ||
552 | void xfs_idata_realloc(struct xfs_inode *, int, int); | ||
553 | void xfs_iroot_realloc(struct xfs_inode *, int, int); | ||
554 | int xfs_iread_extents(struct xfs_trans *, struct xfs_inode *, int); | ||
555 | int xfs_iextents_copy(struct xfs_inode *, xfs_bmbt_rec_t *, int); | ||
556 | |||
536 | xfs_bmbt_rec_host_t *xfs_iext_get_ext(xfs_ifork_t *, xfs_extnum_t); | 557 | xfs_bmbt_rec_host_t *xfs_iext_get_ext(xfs_ifork_t *, xfs_extnum_t); |
537 | void xfs_iext_insert(xfs_ifork_t *, xfs_extnum_t, xfs_extnum_t, | 558 | void xfs_iext_insert(xfs_ifork_t *, xfs_extnum_t, xfs_extnum_t, |
538 | xfs_bmbt_irec_t *); | 559 | xfs_bmbt_irec_t *); |
@@ -562,7 +583,8 @@ void xfs_iext_irec_update_extoffs(xfs_ifork_t *, int, int); | |||
562 | #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount)) | 583 | #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount)) |
563 | 584 | ||
564 | #ifdef DEBUG | 585 | #ifdef DEBUG |
565 | void xfs_isize_check(struct xfs_mount *, xfs_inode_t *, xfs_fsize_t); | 586 | void xfs_isize_check(struct xfs_mount *, struct xfs_inode *, |
587 | xfs_fsize_t); | ||
566 | #else /* DEBUG */ | 588 | #else /* DEBUG */ |
567 | #define xfs_isize_check(mp, ip, isize) | 589 | #define xfs_isize_check(mp, ip, isize) |
568 | #endif /* DEBUG */ | 590 | #endif /* DEBUG */ |
@@ -577,26 +599,4 @@ extern struct kmem_zone *xfs_ifork_zone; | |||
577 | extern struct kmem_zone *xfs_inode_zone; | 599 | extern struct kmem_zone *xfs_inode_zone; |
578 | extern struct kmem_zone *xfs_ili_zone; | 600 | extern struct kmem_zone *xfs_ili_zone; |
579 | 601 | ||
580 | /* | ||
581 | * Manage the i_flush queue embedded in the inode. This completion | ||
582 | * queue synchronizes processes attempting to flush the in-core | ||
583 | * inode back to disk. | ||
584 | */ | ||
585 | static inline void xfs_iflock(xfs_inode_t *ip) | ||
586 | { | ||
587 | wait_for_completion(&ip->i_flush); | ||
588 | } | ||
589 | |||
590 | static inline int xfs_iflock_nowait(xfs_inode_t *ip) | ||
591 | { | ||
592 | return try_wait_for_completion(&ip->i_flush); | ||
593 | } | ||
594 | |||
595 | static inline void xfs_ifunlock(xfs_inode_t *ip) | ||
596 | { | ||
597 | complete(&ip->i_flush); | ||
598 | } | ||
599 | |||
600 | #endif /* __KERNEL__ */ | ||
601 | |||
602 | #endif /* __XFS_INODE_H__ */ | 602 | #endif /* __XFS_INODE_H__ */ |
diff --git a/fs/xfs/xfs_inode_item.h b/fs/xfs/xfs_inode_item.h index 40513077ab36..1ff04cc323ad 100644 --- a/fs/xfs/xfs_inode_item.h +++ b/fs/xfs/xfs_inode_item.h | |||
@@ -112,6 +112,24 @@ typedef struct xfs_inode_log_format_64 { | |||
112 | #define XFS_ILI_IOLOCKED_ANY (XFS_ILI_IOLOCKED_EXCL | XFS_ILI_IOLOCKED_SHARED) | 112 | #define XFS_ILI_IOLOCKED_ANY (XFS_ILI_IOLOCKED_EXCL | XFS_ILI_IOLOCKED_SHARED) |
113 | 113 | ||
114 | 114 | ||
115 | #define XFS_ILOG_FBROOT(w) xfs_ilog_fbroot(w) | ||
116 | static inline int xfs_ilog_fbroot(int w) | ||
117 | { | ||
118 | return (w == XFS_DATA_FORK ? XFS_ILOG_DBROOT : XFS_ILOG_ABROOT); | ||
119 | } | ||
120 | |||
121 | #define XFS_ILOG_FEXT(w) xfs_ilog_fext(w) | ||
122 | static inline int xfs_ilog_fext(int w) | ||
123 | { | ||
124 | return (w == XFS_DATA_FORK ? XFS_ILOG_DEXT : XFS_ILOG_AEXT); | ||
125 | } | ||
126 | |||
127 | #define XFS_ILOG_FDATA(w) xfs_ilog_fdata(w) | ||
128 | static inline int xfs_ilog_fdata(int w) | ||
129 | { | ||
130 | return (w == XFS_DATA_FORK ? XFS_ILOG_DDATA : XFS_ILOG_ADATA); | ||
131 | } | ||
132 | |||
115 | #ifdef __KERNEL__ | 133 | #ifdef __KERNEL__ |
116 | 134 | ||
117 | struct xfs_buf; | 135 | struct xfs_buf; |
@@ -148,26 +166,6 @@ typedef struct xfs_inode_log_item { | |||
148 | } xfs_inode_log_item_t; | 166 | } xfs_inode_log_item_t; |
149 | 167 | ||
150 | 168 | ||
151 | #define XFS_ILOG_FDATA(w) xfs_ilog_fdata(w) | ||
152 | static inline int xfs_ilog_fdata(int w) | ||
153 | { | ||
154 | return (w == XFS_DATA_FORK ? XFS_ILOG_DDATA : XFS_ILOG_ADATA); | ||
155 | } | ||
156 | |||
157 | #endif /* __KERNEL__ */ | ||
158 | |||
159 | #define XFS_ILOG_FBROOT(w) xfs_ilog_fbroot(w) | ||
160 | static inline int xfs_ilog_fbroot(int w) | ||
161 | { | ||
162 | return (w == XFS_DATA_FORK ? XFS_ILOG_DBROOT : XFS_ILOG_ABROOT); | ||
163 | } | ||
164 | |||
165 | #define XFS_ILOG_FEXT(w) xfs_ilog_fext(w) | ||
166 | static inline int xfs_ilog_fext(int w) | ||
167 | { | ||
168 | return (w == XFS_DATA_FORK ? XFS_ILOG_DEXT : XFS_ILOG_AEXT); | ||
169 | } | ||
170 | |||
171 | static inline int xfs_inode_clean(xfs_inode_t *ip) | 169 | static inline int xfs_inode_clean(xfs_inode_t *ip) |
172 | { | 170 | { |
173 | return (!ip->i_itemp || | 171 | return (!ip->i_itemp || |
@@ -175,9 +173,6 @@ static inline int xfs_inode_clean(xfs_inode_t *ip) | |||
175 | !ip->i_update_core; | 173 | !ip->i_update_core; |
176 | } | 174 | } |
177 | 175 | ||
178 | |||
179 | #ifdef __KERNEL__ | ||
180 | |||
181 | extern void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *); | 176 | extern void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *); |
182 | extern void xfs_inode_item_destroy(struct xfs_inode *); | 177 | extern void xfs_inode_item_destroy(struct xfs_inode *); |
183 | extern void xfs_iflush_done(struct xfs_buf *, xfs_inode_log_item_t *); | 178 | extern void xfs_iflush_done(struct xfs_buf *, xfs_inode_log_item_t *); |
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 49d647e730e1..56c3b122e532 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
@@ -44,14 +44,14 @@ typedef struct xfs_trans_reservations { | |||
44 | } xfs_trans_reservations_t; | 44 | } xfs_trans_reservations_t; |
45 | 45 | ||
46 | #ifndef __KERNEL__ | 46 | #ifndef __KERNEL__ |
47 | /* | 47 | |
48 | * Moved here from xfs_ag.h to avoid reordering header files | ||
49 | */ | ||
50 | #define XFS_DADDR_TO_AGNO(mp,d) \ | 48 | #define XFS_DADDR_TO_AGNO(mp,d) \ |
51 | ((xfs_agnumber_t)(XFS_BB_TO_FSBT(mp, d) / (mp)->m_sb.sb_agblocks)) | 49 | ((xfs_agnumber_t)(XFS_BB_TO_FSBT(mp, d) / (mp)->m_sb.sb_agblocks)) |
52 | #define XFS_DADDR_TO_AGBNO(mp,d) \ | 50 | #define XFS_DADDR_TO_AGBNO(mp,d) \ |
53 | ((xfs_agblock_t)(XFS_BB_TO_FSBT(mp, d) % (mp)->m_sb.sb_agblocks)) | 51 | ((xfs_agblock_t)(XFS_BB_TO_FSBT(mp, d) % (mp)->m_sb.sb_agblocks)) |
54 | #else | 52 | |
53 | #else /* __KERNEL__ */ | ||
54 | |||
55 | struct cred; | 55 | struct cred; |
56 | struct log; | 56 | struct log; |
57 | struct xfs_mount_args; | 57 | struct xfs_mount_args; |
@@ -507,7 +507,6 @@ typedef struct xfs_mod_sb { | |||
507 | #define XFS_MOUNT_ILOCK(mp) mutex_lock(&((mp)->m_ilock)) | 507 | #define XFS_MOUNT_ILOCK(mp) mutex_lock(&((mp)->m_ilock)) |
508 | #define XFS_MOUNT_IUNLOCK(mp) mutex_unlock(&((mp)->m_ilock)) | 508 | #define XFS_MOUNT_IUNLOCK(mp) mutex_unlock(&((mp)->m_ilock)) |
509 | 509 | ||
510 | extern void xfs_mod_sb(xfs_trans_t *, __int64_t); | ||
511 | extern int xfs_log_sbcount(xfs_mount_t *, uint); | 510 | extern int xfs_log_sbcount(xfs_mount_t *, uint); |
512 | extern int xfs_mountfs(xfs_mount_t *mp); | 511 | extern int xfs_mountfs(xfs_mount_t *mp); |
513 | extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); | 512 | extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); |
@@ -526,9 +525,6 @@ extern void xfs_freesb(xfs_mount_t *); | |||
526 | extern int xfs_fs_writable(xfs_mount_t *); | 525 | extern int xfs_fs_writable(xfs_mount_t *); |
527 | extern int xfs_syncsub(xfs_mount_t *, int, int *); | 526 | extern int xfs_syncsub(xfs_mount_t *, int, int *); |
528 | extern int xfs_sync_inodes(xfs_mount_t *, int, int *); | 527 | extern int xfs_sync_inodes(xfs_mount_t *, int, int *); |
529 | extern xfs_agnumber_t xfs_initialize_perag(xfs_mount_t *, xfs_agnumber_t); | ||
530 | extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *); | ||
531 | extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t); | ||
532 | extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t); | 528 | extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t); |
533 | 529 | ||
534 | extern int xfs_dmops_get(struct xfs_mount *, struct xfs_mount_args *); | 530 | extern int xfs_dmops_get(struct xfs_mount *, struct xfs_mount_args *); |
@@ -540,4 +536,9 @@ extern struct xfs_dmops xfs_dmcore_xfs; | |||
540 | 536 | ||
541 | #endif /* __KERNEL__ */ | 537 | #endif /* __KERNEL__ */ |
542 | 538 | ||
539 | extern void xfs_mod_sb(struct xfs_trans *, __int64_t); | ||
540 | extern xfs_agnumber_t xfs_initialize_perag(struct xfs_mount *, xfs_agnumber_t); | ||
541 | extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *); | ||
542 | extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t); | ||
543 | |||
543 | #endif /* __XFS_MOUNT_H__ */ | 544 | #endif /* __XFS_MOUNT_H__ */ |
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 74c80bd2b0ec..1d89d50a5b99 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h | |||
@@ -18,6 +18,8 @@ | |||
18 | #ifndef __XFS_TRANS_H__ | 18 | #ifndef __XFS_TRANS_H__ |
19 | #define __XFS_TRANS_H__ | 19 | #define __XFS_TRANS_H__ |
20 | 20 | ||
21 | struct xfs_log_item; | ||
22 | |||
21 | /* | 23 | /* |
22 | * This is the structure written in the log at the head of | 24 | * This is the structure written in the log at the head of |
23 | * every transaction. It identifies the type and id of the | 25 | * every transaction. It identifies the type and id of the |
@@ -98,76 +100,6 @@ typedef struct xfs_trans_header { | |||
98 | #define XFS_TRANS_TYPE_MAX 41 | 100 | #define XFS_TRANS_TYPE_MAX 41 |
99 | /* new transaction types need to be reflected in xfs_logprint(8) */ | 101 | /* new transaction types need to be reflected in xfs_logprint(8) */ |
100 | 102 | ||
101 | |||
102 | #ifdef __KERNEL__ | ||
103 | struct xfs_buf; | ||
104 | struct xfs_buftarg; | ||
105 | struct xfs_efd_log_item; | ||
106 | struct xfs_efi_log_item; | ||
107 | struct xfs_inode; | ||
108 | struct xfs_item_ops; | ||
109 | struct xfs_log_iovec; | ||
110 | struct xfs_log_item; | ||
111 | struct xfs_log_item_desc; | ||
112 | struct xfs_mount; | ||
113 | struct xfs_trans; | ||
114 | struct xfs_dquot_acct; | ||
115 | |||
116 | typedef struct xfs_log_item { | ||
117 | struct list_head li_ail; /* AIL pointers */ | ||
118 | xfs_lsn_t li_lsn; /* last on-disk lsn */ | ||
119 | struct xfs_log_item_desc *li_desc; /* ptr to current desc*/ | ||
120 | struct xfs_mount *li_mountp; /* ptr to fs mount */ | ||
121 | uint li_type; /* item type */ | ||
122 | uint li_flags; /* misc flags */ | ||
123 | struct xfs_log_item *li_bio_list; /* buffer item list */ | ||
124 | void (*li_cb)(struct xfs_buf *, | ||
125 | struct xfs_log_item *); | ||
126 | /* buffer item iodone */ | ||
127 | /* callback func */ | ||
128 | struct xfs_item_ops *li_ops; /* function list */ | ||
129 | } xfs_log_item_t; | ||
130 | |||
131 | #define XFS_LI_IN_AIL 0x1 | ||
132 | #define XFS_LI_ABORTED 0x2 | ||
133 | |||
134 | typedef struct xfs_item_ops { | ||
135 | uint (*iop_size)(xfs_log_item_t *); | ||
136 | void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *); | ||
137 | void (*iop_pin)(xfs_log_item_t *); | ||
138 | void (*iop_unpin)(xfs_log_item_t *, int); | ||
139 | void (*iop_unpin_remove)(xfs_log_item_t *, struct xfs_trans *); | ||
140 | uint (*iop_trylock)(xfs_log_item_t *); | ||
141 | void (*iop_unlock)(xfs_log_item_t *); | ||
142 | xfs_lsn_t (*iop_committed)(xfs_log_item_t *, xfs_lsn_t); | ||
143 | void (*iop_push)(xfs_log_item_t *); | ||
144 | void (*iop_pushbuf)(xfs_log_item_t *); | ||
145 | void (*iop_committing)(xfs_log_item_t *, xfs_lsn_t); | ||
146 | } xfs_item_ops_t; | ||
147 | |||
148 | #define IOP_SIZE(ip) (*(ip)->li_ops->iop_size)(ip) | ||
149 | #define IOP_FORMAT(ip,vp) (*(ip)->li_ops->iop_format)(ip, vp) | ||
150 | #define IOP_PIN(ip) (*(ip)->li_ops->iop_pin)(ip) | ||
151 | #define IOP_UNPIN(ip, flags) (*(ip)->li_ops->iop_unpin)(ip, flags) | ||
152 | #define IOP_UNPIN_REMOVE(ip,tp) (*(ip)->li_ops->iop_unpin_remove)(ip, tp) | ||
153 | #define IOP_TRYLOCK(ip) (*(ip)->li_ops->iop_trylock)(ip) | ||
154 | #define IOP_UNLOCK(ip) (*(ip)->li_ops->iop_unlock)(ip) | ||
155 | #define IOP_COMMITTED(ip, lsn) (*(ip)->li_ops->iop_committed)(ip, lsn) | ||
156 | #define IOP_PUSH(ip) (*(ip)->li_ops->iop_push)(ip) | ||
157 | #define IOP_PUSHBUF(ip) (*(ip)->li_ops->iop_pushbuf)(ip) | ||
158 | #define IOP_COMMITTING(ip, lsn) (*(ip)->li_ops->iop_committing)(ip, lsn) | ||
159 | |||
160 | /* | ||
161 | * Return values for the IOP_TRYLOCK() routines. | ||
162 | */ | ||
163 | #define XFS_ITEM_SUCCESS 0 | ||
164 | #define XFS_ITEM_PINNED 1 | ||
165 | #define XFS_ITEM_LOCKED 2 | ||
166 | #define XFS_ITEM_FLUSHING 3 | ||
167 | #define XFS_ITEM_PUSHBUF 4 | ||
168 | |||
169 | #endif /* __KERNEL__ */ | ||
170 | |||
171 | /* | 103 | /* |
172 | * This structure is used to track log items associated with | 104 | * This structure is used to track log items associated with |
173 | * a transaction. It points to the log item and keeps some | 105 | * a transaction. It points to the log item and keeps some |
@@ -176,7 +108,7 @@ typedef struct xfs_item_ops { | |||
176 | * once we get to commit processing (see xfs_trans_commit()). | 108 | * once we get to commit processing (see xfs_trans_commit()). |
177 | */ | 109 | */ |
178 | typedef struct xfs_log_item_desc { | 110 | typedef struct xfs_log_item_desc { |
179 | xfs_log_item_t *lid_item; | 111 | struct xfs_log_item *lid_item; |
180 | ushort lid_size; | 112 | ushort lid_size; |
181 | unsigned char lid_flags; | 113 | unsigned char lid_flags; |
182 | unsigned char lid_index; | 114 | unsigned char lid_index; |
@@ -276,94 +208,6 @@ xfs_lic_desc_to_chunk(xfs_log_item_desc_t *dp) | |||
276 | (xfs_caddr_t)(((xfs_log_item_chunk_t*)0)->lic_descs)); | 208 | (xfs_caddr_t)(((xfs_log_item_chunk_t*)0)->lic_descs)); |
277 | } | 209 | } |
278 | 210 | ||
279 | #ifdef __KERNEL__ | ||
280 | /* | ||
281 | * This structure is used to maintain a list of block ranges that have been | ||
282 | * freed in the transaction. The ranges are listed in the perag[] busy list | ||
283 | * between when they're freed and the transaction is committed to disk. | ||
284 | */ | ||
285 | |||
286 | typedef struct xfs_log_busy_slot { | ||
287 | xfs_agnumber_t lbc_ag; | ||
288 | ushort lbc_idx; /* index in perag.busy[] */ | ||
289 | } xfs_log_busy_slot_t; | ||
290 | |||
291 | #define XFS_LBC_NUM_SLOTS 31 | ||
292 | typedef struct xfs_log_busy_chunk { | ||
293 | struct xfs_log_busy_chunk *lbc_next; | ||
294 | uint lbc_free; /* free slots bitmask */ | ||
295 | ushort lbc_unused; /* first unused */ | ||
296 | xfs_log_busy_slot_t lbc_busy[XFS_LBC_NUM_SLOTS]; | ||
297 | } xfs_log_busy_chunk_t; | ||
298 | |||
299 | #define XFS_LBC_MAX_SLOT (XFS_LBC_NUM_SLOTS - 1) | ||
300 | #define XFS_LBC_FREEMASK ((1U << XFS_LBC_NUM_SLOTS) - 1) | ||
301 | |||
302 | #define XFS_LBC_INIT(cp) ((cp)->lbc_free = XFS_LBC_FREEMASK) | ||
303 | #define XFS_LBC_CLAIM(cp, slot) ((cp)->lbc_free &= ~(1 << (slot))) | ||
304 | #define XFS_LBC_SLOT(cp, slot) (&((cp)->lbc_busy[(slot)])) | ||
305 | #define XFS_LBC_VACANCY(cp) (((cp)->lbc_free) & XFS_LBC_FREEMASK) | ||
306 | #define XFS_LBC_ISFREE(cp, slot) ((cp)->lbc_free & (1 << (slot))) | ||
307 | |||
308 | /* | ||
309 | * This is the type of function which can be given to xfs_trans_callback() | ||
310 | * to be called upon the transaction's commit to disk. | ||
311 | */ | ||
312 | typedef void (*xfs_trans_callback_t)(struct xfs_trans *, void *); | ||
313 | |||
314 | /* | ||
315 | * This is the structure maintained for every active transaction. | ||
316 | */ | ||
317 | typedef struct xfs_trans { | ||
318 | unsigned int t_magic; /* magic number */ | ||
319 | xfs_log_callback_t t_logcb; /* log callback struct */ | ||
320 | unsigned int t_type; /* transaction type */ | ||
321 | unsigned int t_log_res; /* amt of log space resvd */ | ||
322 | unsigned int t_log_count; /* count for perm log res */ | ||
323 | unsigned int t_blk_res; /* # of blocks resvd */ | ||
324 | unsigned int t_blk_res_used; /* # of resvd blocks used */ | ||
325 | unsigned int t_rtx_res; /* # of rt extents resvd */ | ||
326 | unsigned int t_rtx_res_used; /* # of resvd rt extents used */ | ||
327 | xfs_log_ticket_t t_ticket; /* log mgr ticket */ | ||
328 | xfs_lsn_t t_lsn; /* log seq num of start of | ||
329 | * transaction. */ | ||
330 | xfs_lsn_t t_commit_lsn; /* log seq num of end of | ||
331 | * transaction. */ | ||
332 | struct xfs_mount *t_mountp; /* ptr to fs mount struct */ | ||
333 | struct xfs_dquot_acct *t_dqinfo; /* acctg info for dquots */ | ||
334 | xfs_trans_callback_t t_callback; /* transaction callback */ | ||
335 | void *t_callarg; /* callback arg */ | ||
336 | unsigned int t_flags; /* misc flags */ | ||
337 | int64_t t_icount_delta; /* superblock icount change */ | ||
338 | int64_t t_ifree_delta; /* superblock ifree change */ | ||
339 | int64_t t_fdblocks_delta; /* superblock fdblocks chg */ | ||
340 | int64_t t_res_fdblocks_delta; /* on-disk only chg */ | ||
341 | int64_t t_frextents_delta;/* superblock freextents chg*/ | ||
342 | int64_t t_res_frextents_delta; /* on-disk only chg */ | ||
343 | #ifdef DEBUG | ||
344 | int64_t t_ag_freeblks_delta; /* debugging counter */ | ||
345 | int64_t t_ag_flist_delta; /* debugging counter */ | ||
346 | int64_t t_ag_btree_delta; /* debugging counter */ | ||
347 | #endif | ||
348 | int64_t t_dblocks_delta;/* superblock dblocks change */ | ||
349 | int64_t t_agcount_delta;/* superblock agcount change */ | ||
350 | int64_t t_imaxpct_delta;/* superblock imaxpct change */ | ||
351 | int64_t t_rextsize_delta;/* superblock rextsize chg */ | ||
352 | int64_t t_rbmblocks_delta;/* superblock rbmblocks chg */ | ||
353 | int64_t t_rblocks_delta;/* superblock rblocks change */ | ||
354 | int64_t t_rextents_delta;/* superblocks rextents chg */ | ||
355 | int64_t t_rextslog_delta;/* superblocks rextslog chg */ | ||
356 | unsigned int t_items_free; /* log item descs free */ | ||
357 | xfs_log_item_chunk_t t_items; /* first log item desc chunk */ | ||
358 | xfs_trans_header_t t_header; /* header for in-log trans */ | ||
359 | unsigned int t_busy_free; /* busy descs free */ | ||
360 | xfs_log_busy_chunk_t t_busy; /* busy/async free blocks */ | ||
361 | unsigned long t_pflags; /* saved process flags state */ | ||
362 | } xfs_trans_t; | ||
363 | |||
364 | #endif /* __KERNEL__ */ | ||
365 | |||
366 | |||
367 | #define XFS_TRANS_MAGIC 0x5452414E /* 'TRAN' */ | 211 | #define XFS_TRANS_MAGIC 0x5452414E /* 'TRAN' */ |
368 | /* | 212 | /* |
369 | * Values for t_flags. | 213 | * Values for t_flags. |
@@ -906,6 +750,156 @@ typedef struct xfs_trans { | |||
906 | #define XFS_DQUOT_REF 1 | 750 | #define XFS_DQUOT_REF 1 |
907 | 751 | ||
908 | #ifdef __KERNEL__ | 752 | #ifdef __KERNEL__ |
753 | |||
754 | struct xfs_buf; | ||
755 | struct xfs_buftarg; | ||
756 | struct xfs_efd_log_item; | ||
757 | struct xfs_efi_log_item; | ||
758 | struct xfs_inode; | ||
759 | struct xfs_item_ops; | ||
760 | struct xfs_log_iovec; | ||
761 | struct xfs_log_item_desc; | ||
762 | struct xfs_mount; | ||
763 | struct xfs_trans; | ||
764 | struct xfs_dquot_acct; | ||
765 | |||
766 | typedef struct xfs_log_item { | ||
767 | struct list_head li_ail; /* AIL pointers */ | ||
768 | xfs_lsn_t li_lsn; /* last on-disk lsn */ | ||
769 | struct xfs_log_item_desc *li_desc; /* ptr to current desc*/ | ||
770 | struct xfs_mount *li_mountp; /* ptr to fs mount */ | ||
771 | uint li_type; /* item type */ | ||
772 | uint li_flags; /* misc flags */ | ||
773 | struct xfs_log_item *li_bio_list; /* buffer item list */ | ||
774 | void (*li_cb)(struct xfs_buf *, | ||
775 | struct xfs_log_item *); | ||
776 | /* buffer item iodone */ | ||
777 | /* callback func */ | ||
778 | struct xfs_item_ops *li_ops; /* function list */ | ||
779 | } xfs_log_item_t; | ||
780 | |||
781 | #define XFS_LI_IN_AIL 0x1 | ||
782 | #define XFS_LI_ABORTED 0x2 | ||
783 | |||
784 | typedef struct xfs_item_ops { | ||
785 | uint (*iop_size)(xfs_log_item_t *); | ||
786 | void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *); | ||
787 | void (*iop_pin)(xfs_log_item_t *); | ||
788 | void (*iop_unpin)(xfs_log_item_t *, int); | ||
789 | void (*iop_unpin_remove)(xfs_log_item_t *, struct xfs_trans *); | ||
790 | uint (*iop_trylock)(xfs_log_item_t *); | ||
791 | void (*iop_unlock)(xfs_log_item_t *); | ||
792 | xfs_lsn_t (*iop_committed)(xfs_log_item_t *, xfs_lsn_t); | ||
793 | void (*iop_push)(xfs_log_item_t *); | ||
794 | void (*iop_pushbuf)(xfs_log_item_t *); | ||
795 | void (*iop_committing)(xfs_log_item_t *, xfs_lsn_t); | ||
796 | } xfs_item_ops_t; | ||
797 | |||
798 | #define IOP_SIZE(ip) (*(ip)->li_ops->iop_size)(ip) | ||
799 | #define IOP_FORMAT(ip,vp) (*(ip)->li_ops->iop_format)(ip, vp) | ||
800 | #define IOP_PIN(ip) (*(ip)->li_ops->iop_pin)(ip) | ||
801 | #define IOP_UNPIN(ip, flags) (*(ip)->li_ops->iop_unpin)(ip, flags) | ||
802 | #define IOP_UNPIN_REMOVE(ip,tp) (*(ip)->li_ops->iop_unpin_remove)(ip, tp) | ||
803 | #define IOP_TRYLOCK(ip) (*(ip)->li_ops->iop_trylock)(ip) | ||
804 | #define IOP_UNLOCK(ip) (*(ip)->li_ops->iop_unlock)(ip) | ||
805 | #define IOP_COMMITTED(ip, lsn) (*(ip)->li_ops->iop_committed)(ip, lsn) | ||
806 | #define IOP_PUSH(ip) (*(ip)->li_ops->iop_push)(ip) | ||
807 | #define IOP_PUSHBUF(ip) (*(ip)->li_ops->iop_pushbuf)(ip) | ||
808 | #define IOP_COMMITTING(ip, lsn) (*(ip)->li_ops->iop_committing)(ip, lsn) | ||
809 | |||
810 | /* | ||
811 | * Return values for the IOP_TRYLOCK() routines. | ||
812 | */ | ||
813 | #define XFS_ITEM_SUCCESS 0 | ||
814 | #define XFS_ITEM_PINNED 1 | ||
815 | #define XFS_ITEM_LOCKED 2 | ||
816 | #define XFS_ITEM_FLUSHING 3 | ||
817 | #define XFS_ITEM_PUSHBUF 4 | ||
818 | |||
819 | /* | ||
820 | * This structure is used to maintain a list of block ranges that have been | ||
821 | * freed in the transaction. The ranges are listed in the perag[] busy list | ||
822 | * between when they're freed and the transaction is committed to disk. | ||
823 | */ | ||
824 | |||
825 | typedef struct xfs_log_busy_slot { | ||
826 | xfs_agnumber_t lbc_ag; | ||
827 | ushort lbc_idx; /* index in perag.busy[] */ | ||
828 | } xfs_log_busy_slot_t; | ||
829 | |||
830 | #define XFS_LBC_NUM_SLOTS 31 | ||
831 | typedef struct xfs_log_busy_chunk { | ||
832 | struct xfs_log_busy_chunk *lbc_next; | ||
833 | uint lbc_free; /* free slots bitmask */ | ||
834 | ushort lbc_unused; /* first unused */ | ||
835 | xfs_log_busy_slot_t lbc_busy[XFS_LBC_NUM_SLOTS]; | ||
836 | } xfs_log_busy_chunk_t; | ||
837 | |||
838 | #define XFS_LBC_MAX_SLOT (XFS_LBC_NUM_SLOTS - 1) | ||
839 | #define XFS_LBC_FREEMASK ((1U << XFS_LBC_NUM_SLOTS) - 1) | ||
840 | |||
841 | #define XFS_LBC_INIT(cp) ((cp)->lbc_free = XFS_LBC_FREEMASK) | ||
842 | #define XFS_LBC_CLAIM(cp, slot) ((cp)->lbc_free &= ~(1 << (slot))) | ||
843 | #define XFS_LBC_SLOT(cp, slot) (&((cp)->lbc_busy[(slot)])) | ||
844 | #define XFS_LBC_VACANCY(cp) (((cp)->lbc_free) & XFS_LBC_FREEMASK) | ||
845 | #define XFS_LBC_ISFREE(cp, slot) ((cp)->lbc_free & (1 << (slot))) | ||
846 | |||
847 | /* | ||
848 | * This is the type of function which can be given to xfs_trans_callback() | ||
849 | * to be called upon the transaction's commit to disk. | ||
850 | */ | ||
851 | typedef void (*xfs_trans_callback_t)(struct xfs_trans *, void *); | ||
852 | |||
853 | /* | ||
854 | * This is the structure maintained for every active transaction. | ||
855 | */ | ||
856 | typedef struct xfs_trans { | ||
857 | unsigned int t_magic; /* magic number */ | ||
858 | xfs_log_callback_t t_logcb; /* log callback struct */ | ||
859 | unsigned int t_type; /* transaction type */ | ||
860 | unsigned int t_log_res; /* amt of log space resvd */ | ||
861 | unsigned int t_log_count; /* count for perm log res */ | ||
862 | unsigned int t_blk_res; /* # of blocks resvd */ | ||
863 | unsigned int t_blk_res_used; /* # of resvd blocks used */ | ||
864 | unsigned int t_rtx_res; /* # of rt extents resvd */ | ||
865 | unsigned int t_rtx_res_used; /* # of resvd rt extents used */ | ||
866 | xfs_log_ticket_t t_ticket; /* log mgr ticket */ | ||
867 | xfs_lsn_t t_lsn; /* log seq num of start of | ||
868 | * transaction. */ | ||
869 | xfs_lsn_t t_commit_lsn; /* log seq num of end of | ||
870 | * transaction. */ | ||
871 | struct xfs_mount *t_mountp; /* ptr to fs mount struct */ | ||
872 | struct xfs_dquot_acct *t_dqinfo; /* acctg info for dquots */ | ||
873 | xfs_trans_callback_t t_callback; /* transaction callback */ | ||
874 | void *t_callarg; /* callback arg */ | ||
875 | unsigned int t_flags; /* misc flags */ | ||
876 | int64_t t_icount_delta; /* superblock icount change */ | ||
877 | int64_t t_ifree_delta; /* superblock ifree change */ | ||
878 | int64_t t_fdblocks_delta; /* superblock fdblocks chg */ | ||
879 | int64_t t_res_fdblocks_delta; /* on-disk only chg */ | ||
880 | int64_t t_frextents_delta;/* superblock freextents chg*/ | ||
881 | int64_t t_res_frextents_delta; /* on-disk only chg */ | ||
882 | #ifdef DEBUG | ||
883 | int64_t t_ag_freeblks_delta; /* debugging counter */ | ||
884 | int64_t t_ag_flist_delta; /* debugging counter */ | ||
885 | int64_t t_ag_btree_delta; /* debugging counter */ | ||
886 | #endif | ||
887 | int64_t t_dblocks_delta;/* superblock dblocks change */ | ||
888 | int64_t t_agcount_delta;/* superblock agcount change */ | ||
889 | int64_t t_imaxpct_delta;/* superblock imaxpct change */ | ||
890 | int64_t t_rextsize_delta;/* superblock rextsize chg */ | ||
891 | int64_t t_rbmblocks_delta;/* superblock rbmblocks chg */ | ||
892 | int64_t t_rblocks_delta;/* superblock rblocks change */ | ||
893 | int64_t t_rextents_delta;/* superblocks rextents chg */ | ||
894 | int64_t t_rextslog_delta;/* superblocks rextslog chg */ | ||
895 | unsigned int t_items_free; /* log item descs free */ | ||
896 | xfs_log_item_chunk_t t_items; /* first log item desc chunk */ | ||
897 | xfs_trans_header_t t_header; /* header for in-log trans */ | ||
898 | unsigned int t_busy_free; /* busy descs free */ | ||
899 | xfs_log_busy_chunk_t t_busy; /* busy/async free blocks */ | ||
900 | unsigned long t_pflags; /* saved process flags state */ | ||
901 | } xfs_trans_t; | ||
902 | |||
909 | /* | 903 | /* |
910 | * XFS transaction mechanism exported interfaces that are | 904 | * XFS transaction mechanism exported interfaces that are |
911 | * actually macros. | 905 | * actually macros. |
@@ -928,7 +922,6 @@ typedef struct xfs_trans { | |||
928 | /* | 922 | /* |
929 | * XFS transaction mechanism exported interfaces. | 923 | * XFS transaction mechanism exported interfaces. |
930 | */ | 924 | */ |
931 | void xfs_trans_init(struct xfs_mount *); | ||
932 | xfs_trans_t *xfs_trans_alloc(struct xfs_mount *, uint); | 925 | xfs_trans_t *xfs_trans_alloc(struct xfs_mount *, uint); |
933 | xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint); | 926 | xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint); |
934 | xfs_trans_t *xfs_trans_dup(xfs_trans_t *); | 927 | xfs_trans_t *xfs_trans_dup(xfs_trans_t *); |
@@ -975,7 +968,6 @@ int _xfs_trans_commit(xfs_trans_t *, | |||
975 | int *); | 968 | int *); |
976 | #define xfs_trans_commit(tp, flags) _xfs_trans_commit(tp, flags, NULL) | 969 | #define xfs_trans_commit(tp, flags) _xfs_trans_commit(tp, flags, NULL) |
977 | void xfs_trans_cancel(xfs_trans_t *, int); | 970 | void xfs_trans_cancel(xfs_trans_t *, int); |
978 | int xfs_trans_roll(struct xfs_trans **, struct xfs_inode *); | ||
979 | int xfs_trans_ail_init(struct xfs_mount *); | 971 | int xfs_trans_ail_init(struct xfs_mount *); |
980 | void xfs_trans_ail_destroy(struct xfs_mount *); | 972 | void xfs_trans_ail_destroy(struct xfs_mount *); |
981 | void xfs_trans_push_ail(struct xfs_mount *, xfs_lsn_t); | 973 | void xfs_trans_push_ail(struct xfs_mount *, xfs_lsn_t); |
@@ -990,4 +982,7 @@ extern kmem_zone_t *xfs_trans_zone; | |||
990 | 982 | ||
991 | #endif /* __KERNEL__ */ | 983 | #endif /* __KERNEL__ */ |
992 | 984 | ||
985 | void xfs_trans_init(struct xfs_mount *); | ||
986 | int xfs_trans_roll(struct xfs_trans **, struct xfs_inode *); | ||
987 | |||
993 | #endif /* __XFS_TRANS_H__ */ | 988 | #endif /* __XFS_TRANS_H__ */ |