Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
xfs
xfs_trans_priv.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000,2002,2005 Silicon Graphics, Inc.
3
* All Rights Reserved.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
#ifndef __XFS_TRANS_PRIV_H__
19
#define __XFS_TRANS_PRIV_H__
20
21
struct
xfs_log_item;
22
struct
xfs_log_item_desc
;
23
struct
xfs_mount;
24
struct
xfs_trans;
25
struct
xfs_ail
;
26
struct
xfs_log_vec
;
27
28
void
xfs_trans_add_item
(
struct
xfs_trans *,
struct
xfs_log_item *);
29
void
xfs_trans_del_item
(
struct
xfs_log_item *);
30
void
xfs_trans_free_items
(
struct
xfs_trans *tp,
xfs_lsn_t
commit_lsn,
31
int
flags
);
32
void
xfs_trans_unreserve_and_mod_sb
(
struct
xfs_trans *tp);
33
34
void
xfs_trans_committed_bulk
(
struct
xfs_ail
*ailp,
struct
xfs_log_vec
*
lv
,
35
xfs_lsn_t
commit_lsn,
int
aborted
);
36
/*
37
* AIL traversal cursor.
38
*
39
* Rather than using a generation number for detecting changes in the ail, use
40
* a cursor that is protected by the ail lock. The aild cursor exists in the
41
* struct xfs_ail, but other traversals can declare it on the stack and link it
42
* to the ail list.
43
*
44
* When an object is deleted from or moved int the AIL, the cursor list is
45
* searched to see if the object is a designated cursor item. If it is, it is
46
* deleted from the cursor so that the next time the cursor is used traversal
47
* will return to the start.
48
*
49
* This means a traversal colliding with a removal will cause a restart of the
50
* list scan, rather than any insertion or deletion anywhere in the list. The
51
* low bit of the item pointer is set if the cursor has been invalidated so
52
* that we can tell the difference between invalidation and reaching the end
53
* of the list to trigger traversal restarts.
54
*/
55
struct
xfs_ail_cursor
{
56
struct
list_head
list
;
57
struct
xfs_log_item *
item
;
58
};
59
60
/*
61
* Private AIL structures.
62
*
63
* Eventually we need to drive the locking in here as well.
64
*/
65
struct
xfs_ail
{
66
struct
xfs_mount *
xa_mount
;
67
struct
task_struct
*
xa_task
;
68
struct
list_head
xa_ail
;
69
xfs_lsn_t
xa_target
;
70
xfs_lsn_t
xa_target_prev
;
71
struct
list_head
xa_cursors
;
72
spinlock_t
xa_lock
;
73
xfs_lsn_t
xa_last_pushed_lsn
;
74
int
xa_log_flush
;
75
struct
list_head
xa_buf_list
;
76
wait_queue_head_t
xa_empty
;
77
};
78
79
/*
80
* From xfs_trans_ail.c
81
*/
82
void
xfs_trans_ail_update_bulk
(
struct
xfs_ail
*ailp,
83
struct
xfs_ail_cursor
*
cur
,
84
struct
xfs_log_item **log_items,
int
nr_items,
85
xfs_lsn_t
lsn
)
__releases
(ailp->xa_lock);
86
static
inline
void
87
xfs_trans_ail_update(
88
struct
xfs_ail
*ailp,
89
struct
xfs_log_item *
lip
,
90
xfs_lsn_t
lsn
)
__releases
(ailp->xa_lock)
91
{
92
xfs_trans_ail_update_bulk
(ailp,
NULL
, &
lip
, 1,
lsn
);
93
}
94
95
void
xfs_trans_ail_delete_bulk
(
struct
xfs_ail
*ailp,
96
struct
xfs_log_item **log_items,
int
nr_items,
97
int
shutdown_type)
98
__releases
(ailp->xa_lock);
99
static
inline
void
100
xfs_trans_ail_delete(
101
struct
xfs_ail
*ailp,
102
xfs_log_item_t *
lip
,
103
int
shutdown_type)
__releases
(ailp->xa_lock)
104
{
105
xfs_trans_ail_delete_bulk
(ailp, &
lip
, 1, shutdown_type);
106
}
107
108
void
xfs_ail_push
(
struct
xfs_ail
*,
xfs_lsn_t
);
109
void
xfs_ail_push_all
(
struct
xfs_ail
*);
110
void
xfs_ail_push_all_sync
(
struct
xfs_ail
*);
111
struct
xfs_log_item *
xfs_ail_min
(
struct
xfs_ail
*ailp);
112
xfs_lsn_t
xfs_ail_min_lsn
(
struct
xfs_ail
*ailp);
113
114
struct
xfs_log_item *
xfs_trans_ail_cursor_first
(
struct
xfs_ail
*ailp,
115
struct
xfs_ail_cursor
*
cur
,
116
xfs_lsn_t
lsn
);
117
struct
xfs_log_item *
xfs_trans_ail_cursor_last
(
struct
xfs_ail
*ailp,
118
struct
xfs_ail_cursor
*
cur
,
119
xfs_lsn_t
lsn
);
120
struct
xfs_log_item *
xfs_trans_ail_cursor_next
(
struct
xfs_ail
*ailp,
121
struct
xfs_ail_cursor
*
cur
);
122
void
xfs_trans_ail_cursor_done
(
struct
xfs_ail
*ailp,
123
struct
xfs_ail_cursor
*
cur
);
124
125
#if BITS_PER_LONG != 64
126
static
inline
void
127
xfs_trans_ail_copy_lsn(
128
struct
xfs_ail
*ailp,
129
xfs_lsn_t
*
dst
,
130
xfs_lsn_t
*
src
)
131
{
132
ASSERT
(
sizeof
(
xfs_lsn_t
) == 8);
/* don't lock if it shrinks */
133
spin_lock(&ailp->
xa_lock
);
134
*dst = *
src
;
135
spin_unlock(&ailp->
xa_lock
);
136
}
137
#else
138
static
inline
void
139
xfs_trans_ail_copy_lsn(
140
struct
xfs_ail
*ailp,
141
xfs_lsn_t
*dst,
142
xfs_lsn_t
*src)
143
{
144
ASSERT
(
sizeof
(
xfs_lsn_t
) == 8);
145
*dst = *
src
;
146
}
147
#endif
148
#endif
/* __XFS_TRANS_PRIV_H__ */
Generated on Thu Jan 10 2013 14:50:42 for Linux Kernel by
1.8.2