diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_buf.h')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.h | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h index 2a9749a3a762..814f9e83b516 100644 --- a/fs/xfs/linux-2.6/xfs_buf.h +++ b/fs/xfs/linux-2.6/xfs_buf.h | |||
@@ -44,57 +44,57 @@ typedef enum { | |||
44 | XBRW_ZERO = 3, /* Zero target memory */ | 44 | XBRW_ZERO = 3, /* Zero target memory */ |
45 | } xfs_buf_rw_t; | 45 | } xfs_buf_rw_t; |
46 | 46 | ||
47 | typedef enum { | 47 | #define XBF_READ (1 << 0) /* buffer intended for reading from device */ |
48 | XBF_READ = (1 << 0), /* buffer intended for reading from device */ | 48 | #define XBF_WRITE (1 << 1) /* buffer intended for writing to device */ |
49 | XBF_WRITE = (1 << 1), /* buffer intended for writing to device */ | 49 | #define XBF_MAPPED (1 << 2) /* buffer mapped (b_addr valid) */ |
50 | XBF_MAPPED = (1 << 2), /* buffer mapped (b_addr valid) */ | 50 | #define XBF_ASYNC (1 << 4) /* initiator will not wait for completion */ |
51 | XBF_ASYNC = (1 << 4), /* initiator will not wait for completion */ | 51 | #define XBF_DONE (1 << 5) /* all pages in the buffer uptodate */ |
52 | XBF_DONE = (1 << 5), /* all pages in the buffer uptodate */ | 52 | #define XBF_DELWRI (1 << 6) /* buffer has dirty pages */ |
53 | XBF_DELWRI = (1 << 6), /* buffer has dirty pages */ | 53 | #define XBF_STALE (1 << 7) /* buffer has been staled, do not find it */ |
54 | XBF_STALE = (1 << 7), /* buffer has been staled, do not find it */ | 54 | #define XBF_FS_MANAGED (1 << 8) /* filesystem controls freeing memory */ |
55 | XBF_FS_MANAGED = (1 << 8), /* filesystem controls freeing memory */ | 55 | #define XBF_ORDERED (1 << 11)/* use ordered writes */ |
56 | XBF_ORDERED = (1 << 11), /* use ordered writes */ | 56 | #define XBF_READ_AHEAD (1 << 12)/* asynchronous read-ahead */ |
57 | XBF_READ_AHEAD = (1 << 12), /* asynchronous read-ahead */ | 57 | #define XBF_LOG_BUFFER (1 << 13)/* this is a buffer used for the log */ |
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 | #define XBF_LOCK (1 << 14)/* lock requested */ |
61 | XBF_LOCK = (1 << 14), /* lock requested */ | 61 | #define XBF_TRYLOCK (1 << 15)/* lock requested, but do not wait */ |
62 | XBF_TRYLOCK = (1 << 15), /* lock requested, but do not wait */ | 62 | #define XBF_DONT_BLOCK (1 << 16)/* do not block in current thread */ |
63 | XBF_DONT_BLOCK = (1 << 16), /* do not block in current thread */ | 63 | |
64 | 64 | /* flags used only internally */ | |
65 | /* flags used only internally */ | 65 | #define _XBF_PAGE_CACHE (1 << 17)/* backed by pagecache */ |
66 | _XBF_PAGE_CACHE = (1 << 17),/* backed by pagecache */ | 66 | #define _XBF_PAGES (1 << 18)/* backed by refcounted pages */ |
67 | _XBF_PAGES = (1 << 18), /* backed by refcounted pages */ | 67 | #define _XBF_RUN_QUEUES (1 << 19)/* run block device task queue */ |
68 | _XBF_RUN_QUEUES = (1 << 19),/* run block device task queue */ | 68 | #define _XBF_DELWRI_Q (1 << 21)/* buffer on delwri queue */ |
69 | _XBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ | 69 | |
70 | 70 | /* | |
71 | /* | 71 | * Special flag for supporting metadata blocks smaller than a FSB. |
72 | * Special flag for supporting metadata blocks smaller than a FSB. | 72 | * |
73 | * | 73 | * In this case we can have multiple xfs_buf_t on a single page and |
74 | * In this case we can have multiple xfs_buf_t on a single page and | 74 | * need to lock out concurrent xfs_buf_t readers as they only |
75 | * need to lock out concurrent xfs_buf_t readers as they only | 75 | * serialise access to the buffer. |
76 | * serialise access to the buffer. | 76 | * |
77 | * | 77 | * If the FSB size >= PAGE_CACHE_SIZE case, we have no serialisation |
78 | * If the FSB size >= PAGE_CACHE_SIZE case, we have no serialisation | 78 | * between reads of the page. Hence we can have one thread read the |
79 | * between reads of the page. Hence we can have one thread read the | 79 | * page and modify it, but then race with another thread that thinks |
80 | * page and modify it, but then race with another thread that thinks | 80 | * the page is not up-to-date and hence reads it again. |
81 | * the page is not up-to-date and hence reads it again. | 81 | * |
82 | * | 82 | * The result is that the first modifcation to the page is lost. |
83 | * The result is that the first modifcation to the page is lost. | 83 | * This sort of AGF/AGI reading race can happen when unlinking inodes |
84 | * This sort of AGF/AGI reading race can happen when unlinking inodes | 84 | * that require truncation and results in the AGI unlinked list |
85 | * that require truncation and results in the AGI unlinked list | 85 | * modifications being lost. |
86 | * modifications being lost. | 86 | */ |
87 | */ | 87 | #define _XBF_PAGE_LOCKED (1 << 22) |
88 | _XBF_PAGE_LOCKED = (1 << 22), | 88 | |
89 | 89 | /* | |
90 | /* | 90 | * If we try a barrier write, but it fails we have to communicate |
91 | * If we try a barrier write, but it fails we have to communicate | 91 | * this to the upper layers. Unfortunately b_error gets overwritten |
92 | * this to the upper layers. Unfortunately b_error gets overwritten | 92 | * when the buffer is re-issued so we have to add another flag to |
93 | * when the buffer is re-issued so we have to add another flag to | 93 | * keep this information. |
94 | * keep this information. | 94 | */ |
95 | */ | 95 | #define _XFS_BARRIER_FAILED (1 << 23) |
96 | _XFS_BARRIER_FAILED = (1 << 23), | 96 | |
97 | } xfs_buf_flags_t; | 97 | typedef unsigned int xfs_buf_flags_t; |
98 | 98 | ||
99 | #define XFS_BUF_FLAGS \ | 99 | #define XFS_BUF_FLAGS \ |
100 | { XBF_READ, "READ" }, \ | 100 | { XBF_READ, "READ" }, \ |