Blame view
fs/xfs/xfs_trans_priv.h
4.33 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
7b7187698 [XFS] Update lice... |
2 3 |
* Copyright (c) 2000,2002,2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c Linux-2.6.12-rc2 |
4 |
* |
7b7187698 [XFS] Update lice... |
5 6 |
* This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as |
1da177e4c Linux-2.6.12-rc2 |
7 8 |
* published by the Free Software Foundation. * |
7b7187698 [XFS] Update lice... |
9 10 11 12 |
* This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. |
1da177e4c Linux-2.6.12-rc2 |
13 |
* |
7b7187698 [XFS] Update lice... |
14 15 16 |
* You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
1da177e4c Linux-2.6.12-rc2 |
17 18 19 20 21 22 23 24 |
*/ #ifndef __XFS_TRANS_PRIV_H__ #define __XFS_TRANS_PRIV_H__ struct xfs_log_item; struct xfs_log_item_desc; struct xfs_mount; struct xfs_trans; |
0e57f6a36 xfs: bulk AIL ins... |
25 26 |
struct xfs_ail; struct xfs_log_vec; |
1da177e4c Linux-2.6.12-rc2 |
27 |
|
e98c414f9 xfs: simplify log... |
28 29 |
void xfs_trans_add_item(struct xfs_trans *, struct xfs_log_item *); void xfs_trans_del_item(struct xfs_log_item *); |
d17c701ce xfs: unlock items... |
30 31 |
void xfs_trans_free_items(struct xfs_trans *tp, xfs_lsn_t commit_lsn, int flags); |
71e330b59 xfs: Introduce de... |
32 |
void xfs_trans_unreserve_and_mod_sb(struct xfs_trans *tp); |
1da177e4c Linux-2.6.12-rc2 |
33 |
|
0e57f6a36 xfs: bulk AIL ins... |
34 35 |
void xfs_trans_committed_bulk(struct xfs_ail *ailp, struct xfs_log_vec *lv, xfs_lsn_t commit_lsn, int aborted); |
1da177e4c Linux-2.6.12-rc2 |
36 |
/* |
27d8d5fe0 [XFS] Use a curso... |
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
* AIL traversal cursor. * * Rather than using a generation number for detecting changes in the ail, use * a cursor that is protected by the ail lock. The aild cursor exists in the * struct xfs_ail, but other traversals can declare it on the stack and link it * to the ail list. * * When an object is deleted from or moved int the AIL, the cursor list is * searched to see if the object is a designated cursor item. If it is, it is * deleted from the cursor so that the next time the cursor is used traversal * will return to the start. * * This means a traversal colliding with a removal will cause a restart of the * list scan, rather than any insertion or deletion anywhere in the list. The * low bit of the item pointer is set if the cursor has been invalidated so * that we can tell the difference between invalidation and reaching the end * of the list to trigger traversal restarts. |
1da177e4c Linux-2.6.12-rc2 |
54 |
*/ |
27d8d5fe0 [XFS] Use a curso... |
55 |
struct xfs_ail_cursor { |
af3e40228 xfs: convert AIL ... |
56 |
struct list_head list; |
27d8d5fe0 [XFS] Use a curso... |
57 58 |
struct xfs_log_item *item; }; |
1da177e4c Linux-2.6.12-rc2 |
59 |
|
249a8c112 [XFS] Move AIL pu... |
60 |
/* |
27d8d5fe0 [XFS] Use a curso... |
61 62 63 |
* Private AIL structures. * * Eventually we need to drive the locking in here as well. |
249a8c112 [XFS] Move AIL pu... |
64 |
*/ |
82fa90124 [XFS] Allocate th... |
65 66 |
struct xfs_ail { struct xfs_mount *xa_mount; |
0030807c6 xfs: revert to us... |
67 |
struct task_struct *xa_task; |
82fa90124 [XFS] Allocate th... |
68 |
struct list_head xa_ail; |
82fa90124 [XFS] Allocate th... |
69 |
xfs_lsn_t xa_target; |
af3e40228 xfs: convert AIL ... |
70 |
struct list_head xa_cursors; |
c7e8f2682 [XFS] Move the AI... |
71 |
spinlock_t xa_lock; |
0bf6a5bd4 xfs: convert the ... |
72 |
xfs_lsn_t xa_last_pushed_lsn; |
670ce93fe xfs: reduce the n... |
73 |
int xa_log_flush; |
82fa90124 [XFS] Allocate th... |
74 |
}; |
27d8d5fe0 [XFS] Use a curso... |
75 76 77 |
/* * From xfs_trans_ail.c */ |
e60599492 xfs: use AIL bulk... |
78 |
void xfs_trans_ail_update_bulk(struct xfs_ail *ailp, |
1d8c95a36 xfs: use a cursor... |
79 |
struct xfs_ail_cursor *cur, |
e60599492 xfs: use AIL bulk... |
80 81 82 83 84 85 86 87 |
struct xfs_log_item **log_items, int nr_items, xfs_lsn_t lsn) __releases(ailp->xa_lock); static inline void xfs_trans_ail_update( struct xfs_ail *ailp, struct xfs_log_item *lip, xfs_lsn_t lsn) __releases(ailp->xa_lock) { |
1d8c95a36 xfs: use a cursor... |
88 |
xfs_trans_ail_update_bulk(ailp, NULL, &lip, 1, lsn); |
e60599492 xfs: use AIL bulk... |
89 |
} |
9552e7f2f xfs: use AIL bulk... |
90 91 92 93 94 95 96 97 98 99 |
void xfs_trans_ail_delete_bulk(struct xfs_ail *ailp, struct xfs_log_item **log_items, int nr_items) __releases(ailp->xa_lock); static inline void xfs_trans_ail_delete( struct xfs_ail *ailp, xfs_log_item_t *lip) __releases(ailp->xa_lock) { xfs_trans_ail_delete_bulk(ailp, &lip, 1); } |
fd074841c xfs: push the AIL... |
100 101 102 |
void xfs_ail_push(struct xfs_ail *, xfs_lsn_t); void xfs_ail_push_all(struct xfs_ail *); xfs_lsn_t xfs_ail_min_lsn(struct xfs_ail *ailp); |
783a2f656 [XFS] Finish remo... |
103 104 |
void xfs_trans_unlocked_item(struct xfs_ail *, xfs_log_item_t *); |
27d8d5fe0 [XFS] Use a curso... |
105 |
|
1d8c95a36 xfs: use a cursor... |
106 |
struct xfs_log_item * xfs_trans_ail_cursor_first(struct xfs_ail *ailp, |
5b00f14fb [XFS] move the AI... |
107 108 |
struct xfs_ail_cursor *cur, xfs_lsn_t lsn); |
1d8c95a36 xfs: use a cursor... |
109 110 111 112 |
struct xfs_log_item * xfs_trans_ail_cursor_last(struct xfs_ail *ailp, struct xfs_ail_cursor *cur, xfs_lsn_t lsn); struct xfs_log_item * xfs_trans_ail_cursor_next(struct xfs_ail *ailp, |
27d8d5fe0 [XFS] Use a curso... |
113 |
struct xfs_ail_cursor *cur); |
5b00f14fb [XFS] move the AI... |
114 |
void xfs_trans_ail_cursor_done(struct xfs_ail *ailp, |
27d8d5fe0 [XFS] Use a curso... |
115 |
struct xfs_ail_cursor *cur); |
7b2e2a31f [XFS] Allow 64 bi... |
116 117 118 119 120 121 122 123 |
#if BITS_PER_LONG != 64 static inline void xfs_trans_ail_copy_lsn( struct xfs_ail *ailp, xfs_lsn_t *dst, xfs_lsn_t *src) { ASSERT(sizeof(xfs_lsn_t) == 8); /* don't lock if it shrinks */ |
c7e8f2682 [XFS] Move the AI... |
124 |
spin_lock(&ailp->xa_lock); |
7b2e2a31f [XFS] Allow 64 bi... |
125 |
*dst = *src; |
c7e8f2682 [XFS] Move the AI... |
126 |
spin_unlock(&ailp->xa_lock); |
7b2e2a31f [XFS] Allow 64 bi... |
127 128 129 130 131 132 133 134 135 136 137 138 |
} #else static inline void xfs_trans_ail_copy_lsn( struct xfs_ail *ailp, xfs_lsn_t *dst, xfs_lsn_t *src) { ASSERT(sizeof(xfs_lsn_t) == 8); *dst = *src; } #endif |
1da177e4c Linux-2.6.12-rc2 |
139 |
#endif /* __XFS_TRANS_PRIV_H__ */ |