diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_buf.h')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.h | 95 |
1 files changed, 37 insertions, 58 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h index 9b4d666ad31f..386e7361e50e 100644 --- a/fs/xfs/linux-2.6/xfs_buf.h +++ b/fs/xfs/linux-2.6/xfs_buf.h | |||
@@ -55,6 +55,7 @@ typedef enum { | |||
55 | XBF_FS_MANAGED = (1 << 8), /* filesystem controls freeing memory */ | 55 | XBF_FS_MANAGED = (1 << 8), /* filesystem controls freeing memory */ |
56 | XBF_ORDERED = (1 << 11), /* use ordered writes */ | 56 | XBF_ORDERED = (1 << 11), /* use ordered writes */ |
57 | XBF_READ_AHEAD = (1 << 12), /* asynchronous read-ahead */ | 57 | XBF_READ_AHEAD = (1 << 12), /* asynchronous read-ahead */ |
58 | XBF_LOG_BUFFER = (1 << 13), /* this is a buffer used for the log */ | ||
58 | 59 | ||
59 | /* flags used only as arguments to access routines */ | 60 | /* flags used only as arguments to access routines */ |
60 | XBF_LOCK = (1 << 14), /* lock requested */ | 61 | XBF_LOCK = (1 << 14), /* lock requested */ |
@@ -95,6 +96,28 @@ typedef enum { | |||
95 | _XFS_BARRIER_FAILED = (1 << 23), | 96 | _XFS_BARRIER_FAILED = (1 << 23), |
96 | } xfs_buf_flags_t; | 97 | } xfs_buf_flags_t; |
97 | 98 | ||
99 | #define XFS_BUF_FLAGS \ | ||
100 | { XBF_READ, "READ" }, \ | ||
101 | { XBF_WRITE, "WRITE" }, \ | ||
102 | { XBF_MAPPED, "MAPPED" }, \ | ||
103 | { XBF_ASYNC, "ASYNC" }, \ | ||
104 | { XBF_DONE, "DONE" }, \ | ||
105 | { XBF_DELWRI, "DELWRI" }, \ | ||
106 | { XBF_STALE, "STALE" }, \ | ||
107 | { XBF_FS_MANAGED, "FS_MANAGED" }, \ | ||
108 | { XBF_ORDERED, "ORDERED" }, \ | ||
109 | { XBF_READ_AHEAD, "READ_AHEAD" }, \ | ||
110 | { XBF_LOCK, "LOCK" }, /* should never be set */\ | ||
111 | { XBF_TRYLOCK, "TRYLOCK" }, /* ditto */\ | ||
112 | { XBF_DONT_BLOCK, "DONT_BLOCK" }, /* ditto */\ | ||
113 | { _XBF_PAGE_CACHE, "PAGE_CACHE" }, \ | ||
114 | { _XBF_PAGES, "PAGES" }, \ | ||
115 | { _XBF_RUN_QUEUES, "RUN_QUEUES" }, \ | ||
116 | { _XBF_DELWRI_Q, "DELWRI_Q" }, \ | ||
117 | { _XBF_PAGE_LOCKED, "PAGE_LOCKED" }, \ | ||
118 | { _XFS_BARRIER_FAILED, "BARRIER_FAILED" } | ||
119 | |||
120 | |||
98 | typedef enum { | 121 | typedef enum { |
99 | XBT_FORCE_SLEEP = 0, | 122 | XBT_FORCE_SLEEP = 0, |
100 | XBT_FORCE_FLUSH = 1, | 123 | XBT_FORCE_FLUSH = 1, |
@@ -186,15 +209,10 @@ extern xfs_buf_t *_xfs_buf_find(xfs_buftarg_t *, xfs_off_t, size_t, | |||
186 | #define xfs_incore(buftarg,blkno,len,lockit) \ | 209 | #define xfs_incore(buftarg,blkno,len,lockit) \ |
187 | _xfs_buf_find(buftarg, blkno ,len, lockit, NULL) | 210 | _xfs_buf_find(buftarg, blkno ,len, lockit, NULL) |
188 | 211 | ||
189 | extern xfs_buf_t *xfs_buf_get_flags(xfs_buftarg_t *, xfs_off_t, size_t, | 212 | extern xfs_buf_t *xfs_buf_get(xfs_buftarg_t *, xfs_off_t, size_t, |
190 | xfs_buf_flags_t); | 213 | xfs_buf_flags_t); |
191 | #define xfs_buf_get(target, blkno, len, flags) \ | 214 | extern xfs_buf_t *xfs_buf_read(xfs_buftarg_t *, xfs_off_t, size_t, |
192 | xfs_buf_get_flags((target), (blkno), (len), XBF_LOCK | XBF_MAPPED) | ||
193 | |||
194 | extern xfs_buf_t *xfs_buf_read_flags(xfs_buftarg_t *, xfs_off_t, size_t, | ||
195 | xfs_buf_flags_t); | 215 | xfs_buf_flags_t); |
196 | #define xfs_buf_read(target, blkno, len, flags) \ | ||
197 | xfs_buf_read_flags((target), (blkno), (len), XBF_LOCK | XBF_MAPPED) | ||
198 | 216 | ||
199 | extern xfs_buf_t *xfs_buf_get_empty(size_t, xfs_buftarg_t *); | 217 | extern xfs_buf_t *xfs_buf_get_empty(size_t, xfs_buftarg_t *); |
200 | extern xfs_buf_t *xfs_buf_get_noaddr(size_t, xfs_buftarg_t *); | 218 | extern xfs_buf_t *xfs_buf_get_noaddr(size_t, xfs_buftarg_t *); |
@@ -214,13 +232,17 @@ extern void xfs_buf_lock(xfs_buf_t *); | |||
214 | extern void xfs_buf_unlock(xfs_buf_t *); | 232 | extern void xfs_buf_unlock(xfs_buf_t *); |
215 | 233 | ||
216 | /* Buffer Read and Write Routines */ | 234 | /* Buffer Read and Write Routines */ |
217 | extern int xfs_bawrite(void *mp, xfs_buf_t *bp); | 235 | extern int xfs_bwrite(struct xfs_mount *mp, struct xfs_buf *bp); |
218 | extern void xfs_bdwrite(void *mp, xfs_buf_t *bp); | 236 | extern void xfs_bdwrite(void *mp, xfs_buf_t *bp); |
237 | |||
238 | extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *); | ||
239 | extern int xfs_bdstrat_cb(struct xfs_buf *); | ||
240 | |||
219 | extern void xfs_buf_ioend(xfs_buf_t *, int); | 241 | extern void xfs_buf_ioend(xfs_buf_t *, int); |
220 | extern void xfs_buf_ioerror(xfs_buf_t *, int); | 242 | extern void xfs_buf_ioerror(xfs_buf_t *, int); |
221 | extern int xfs_buf_iorequest(xfs_buf_t *); | 243 | extern int xfs_buf_iorequest(xfs_buf_t *); |
222 | extern int xfs_buf_iowait(xfs_buf_t *); | 244 | extern int xfs_buf_iowait(xfs_buf_t *); |
223 | extern void xfs_buf_iomove(xfs_buf_t *, size_t, size_t, xfs_caddr_t, | 245 | extern void xfs_buf_iomove(xfs_buf_t *, size_t, size_t, void *, |
224 | xfs_buf_rw_t); | 246 | xfs_buf_rw_t); |
225 | 247 | ||
226 | static inline int xfs_buf_iostrategy(xfs_buf_t *bp) | 248 | static inline int xfs_buf_iostrategy(xfs_buf_t *bp) |
@@ -243,49 +265,29 @@ extern int xfs_buf_ispin(xfs_buf_t *); | |||
243 | 265 | ||
244 | /* Delayed Write Buffer Routines */ | 266 | /* Delayed Write Buffer Routines */ |
245 | extern void xfs_buf_delwri_dequeue(xfs_buf_t *); | 267 | extern void xfs_buf_delwri_dequeue(xfs_buf_t *); |
268 | extern void xfs_buf_delwri_promote(xfs_buf_t *); | ||
246 | 269 | ||
247 | /* Buffer Daemon Setup Routines */ | 270 | /* Buffer Daemon Setup Routines */ |
248 | extern int xfs_buf_init(void); | 271 | extern int xfs_buf_init(void); |
249 | extern void xfs_buf_terminate(void); | 272 | extern void xfs_buf_terminate(void); |
250 | 273 | ||
251 | #ifdef XFS_BUF_TRACE | ||
252 | extern ktrace_t *xfs_buf_trace_buf; | ||
253 | extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *); | ||
254 | #else | ||
255 | #define xfs_buf_trace(bp,id,ptr,ra) do { } while (0) | ||
256 | #endif | ||
257 | |||
258 | #define xfs_buf_target_name(target) \ | 274 | #define xfs_buf_target_name(target) \ |
259 | ({ char __b[BDEVNAME_SIZE]; bdevname((target)->bt_bdev, __b); __b; }) | 275 | ({ char __b[BDEVNAME_SIZE]; bdevname((target)->bt_bdev, __b); __b; }) |
260 | 276 | ||
261 | 277 | ||
262 | #define XFS_B_ASYNC XBF_ASYNC | ||
263 | #define XFS_B_DELWRI XBF_DELWRI | ||
264 | #define XFS_B_READ XBF_READ | ||
265 | #define XFS_B_WRITE XBF_WRITE | ||
266 | #define XFS_B_STALE XBF_STALE | ||
267 | |||
268 | #define XFS_BUF_TRYLOCK XBF_TRYLOCK | ||
269 | #define XFS_INCORE_TRYLOCK XBF_TRYLOCK | ||
270 | #define XFS_BUF_LOCK XBF_LOCK | ||
271 | #define XFS_BUF_MAPPED XBF_MAPPED | ||
272 | |||
273 | #define BUF_BUSY XBF_DONT_BLOCK | ||
274 | |||
275 | #define XFS_BUF_BFLAGS(bp) ((bp)->b_flags) | 278 | #define XFS_BUF_BFLAGS(bp) ((bp)->b_flags) |
276 | #define XFS_BUF_ZEROFLAGS(bp) ((bp)->b_flags &= \ | 279 | #define XFS_BUF_ZEROFLAGS(bp) ((bp)->b_flags &= \ |
277 | ~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI|XBF_ORDERED)) | 280 | ~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI|XBF_ORDERED)) |
278 | 281 | ||
279 | #define XFS_BUF_STALE(bp) ((bp)->b_flags |= XFS_B_STALE) | 282 | #define XFS_BUF_STALE(bp) ((bp)->b_flags |= XBF_STALE) |
280 | #define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XFS_B_STALE) | 283 | #define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XBF_STALE) |
281 | #define XFS_BUF_ISSTALE(bp) ((bp)->b_flags & XFS_B_STALE) | 284 | #define XFS_BUF_ISSTALE(bp) ((bp)->b_flags & XBF_STALE) |
282 | #define XFS_BUF_SUPER_STALE(bp) do { \ | 285 | #define XFS_BUF_SUPER_STALE(bp) do { \ |
283 | XFS_BUF_STALE(bp); \ | 286 | XFS_BUF_STALE(bp); \ |
284 | xfs_buf_delwri_dequeue(bp); \ | 287 | xfs_buf_delwri_dequeue(bp); \ |
285 | XFS_BUF_DONE(bp); \ | 288 | XFS_BUF_DONE(bp); \ |
286 | } while (0) | 289 | } while (0) |
287 | 290 | ||
288 | #define XFS_BUF_MANAGE XBF_FS_MANAGED | ||
289 | #define XFS_BUF_UNMANAGE(bp) ((bp)->b_flags &= ~XBF_FS_MANAGED) | 291 | #define XFS_BUF_UNMANAGE(bp) ((bp)->b_flags &= ~XBF_FS_MANAGED) |
290 | 292 | ||
291 | #define XFS_BUF_DELAYWRITE(bp) ((bp)->b_flags |= XBF_DELWRI) | 293 | #define XFS_BUF_DELAYWRITE(bp) ((bp)->b_flags |= XBF_DELWRI) |
@@ -370,39 +372,15 @@ static inline void xfs_buf_relse(xfs_buf_t *bp) | |||
370 | 372 | ||
371 | #define xfs_bpin(bp) xfs_buf_pin(bp) | 373 | #define xfs_bpin(bp) xfs_buf_pin(bp) |
372 | #define xfs_bunpin(bp) xfs_buf_unpin(bp) | 374 | #define xfs_bunpin(bp) xfs_buf_unpin(bp) |
373 | |||
374 | #define xfs_buftrace(id, bp) \ | ||
375 | xfs_buf_trace(bp, id, NULL, (void *)__builtin_return_address(0)) | ||
376 | |||
377 | #define xfs_biodone(bp) xfs_buf_ioend(bp, 0) | 375 | #define xfs_biodone(bp) xfs_buf_ioend(bp, 0) |
378 | 376 | ||
379 | #define xfs_biomove(bp, off, len, data, rw) \ | 377 | #define xfs_biomove(bp, off, len, data, rw) \ |
380 | xfs_buf_iomove((bp), (off), (len), (data), \ | 378 | xfs_buf_iomove((bp), (off), (len), (data), \ |
381 | ((rw) == XFS_B_WRITE) ? XBRW_WRITE : XBRW_READ) | 379 | ((rw) == XBF_WRITE) ? XBRW_WRITE : XBRW_READ) |
382 | 380 | ||
383 | #define xfs_biozero(bp, off, len) \ | 381 | #define xfs_biozero(bp, off, len) \ |
384 | xfs_buf_iomove((bp), (off), (len), NULL, XBRW_ZERO) | 382 | xfs_buf_iomove((bp), (off), (len), NULL, XBRW_ZERO) |
385 | 383 | ||
386 | |||
387 | static inline int XFS_bwrite(xfs_buf_t *bp) | ||
388 | { | ||
389 | int iowait = (bp->b_flags & XBF_ASYNC) == 0; | ||
390 | int error = 0; | ||
391 | |||
392 | if (!iowait) | ||
393 | bp->b_flags |= _XBF_RUN_QUEUES; | ||
394 | |||
395 | xfs_buf_delwri_dequeue(bp); | ||
396 | xfs_buf_iostrategy(bp); | ||
397 | if (iowait) { | ||
398 | error = xfs_buf_iowait(bp); | ||
399 | xfs_buf_relse(bp); | ||
400 | } | ||
401 | return error; | ||
402 | } | ||
403 | |||
404 | #define XFS_bdstrat(bp) xfs_buf_iorequest(bp) | ||
405 | |||
406 | #define xfs_iowait(bp) xfs_buf_iowait(bp) | 384 | #define xfs_iowait(bp) xfs_buf_iowait(bp) |
407 | 385 | ||
408 | #define xfs_baread(target, rablkno, ralen) \ | 386 | #define xfs_baread(target, rablkno, ralen) \ |
@@ -417,6 +395,7 @@ extern void xfs_free_buftarg(struct xfs_mount *, struct xfs_buftarg *); | |||
417 | extern void xfs_wait_buftarg(xfs_buftarg_t *); | 395 | extern void xfs_wait_buftarg(xfs_buftarg_t *); |
418 | extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int); | 396 | extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int); |
419 | extern int xfs_flush_buftarg(xfs_buftarg_t *, int); | 397 | extern int xfs_flush_buftarg(xfs_buftarg_t *, int); |
398 | |||
420 | #ifdef CONFIG_KDB_MODULES | 399 | #ifdef CONFIG_KDB_MODULES |
421 | extern struct list_head *xfs_get_buftarg_list(void); | 400 | extern struct list_head *xfs_get_buftarg_list(void); |
422 | #endif | 401 | #endif |