1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __XFS_LOG_H__
19#define __XFS_LOG_H__
20
21
22
23#define CYCLE_LSN(lsn) ((uint)((lsn)>>32))
24#define BLOCK_LSN(lsn) ((uint)(lsn))
25
26#define CYCLE_LSN_DISK(lsn) (((uint *)&(lsn))[0])
27
28#ifdef __KERNEL__
29
30
31
32
33static inline xfs_lsn_t _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2)
34{
35 if (CYCLE_LSN(lsn1) != CYCLE_LSN(lsn2))
36 return (CYCLE_LSN(lsn1)<CYCLE_LSN(lsn2))? -999 : 999;
37
38 if (BLOCK_LSN(lsn1) != BLOCK_LSN(lsn2))
39 return (BLOCK_LSN(lsn1)<BLOCK_LSN(lsn2))? -999 : 999;
40
41 return 0;
42}
43
44#define XFS_LSN_CMP(x,y) _lsn_cmp(x,y)
45
46
47
48
49
50
51
52
53#define XFS_LOG_REL_PERM_RESERV 0x1
54
55
56
57
58
59
60
61
62
63
64#define XFS_LOG_SLEEP 0x0
65#define XFS_LOG_NOSLEEP 0x1
66#define XFS_LOG_PERM_RESERV 0x2
67
68
69
70
71
72
73
74
75
76
77#define XFS_LOG_SYNC 0x1
78#define XFS_LOG_FORCE 0x2
79#define XFS_LOG_URGE 0x4
80
81#endif
82
83
84
85#define XFS_TRANSACTION 0x69
86#define XFS_VOLUME 0x2
87#define XFS_LOG 0xaa
88
89
90
91#define XLOG_REG_TYPE_BFORMAT 1
92#define XLOG_REG_TYPE_BCHUNK 2
93#define XLOG_REG_TYPE_EFI_FORMAT 3
94#define XLOG_REG_TYPE_EFD_FORMAT 4
95#define XLOG_REG_TYPE_IFORMAT 5
96#define XLOG_REG_TYPE_ICORE 6
97#define XLOG_REG_TYPE_IEXT 7
98#define XLOG_REG_TYPE_IBROOT 8
99#define XLOG_REG_TYPE_ILOCAL 9
100#define XLOG_REG_TYPE_IATTR_EXT 10
101#define XLOG_REG_TYPE_IATTR_BROOT 11
102#define XLOG_REG_TYPE_IATTR_LOCAL 12
103#define XLOG_REG_TYPE_QFORMAT 13
104#define XLOG_REG_TYPE_DQUOT 14
105#define XLOG_REG_TYPE_QUOTAOFF 15
106#define XLOG_REG_TYPE_LRHEADER 16
107#define XLOG_REG_TYPE_UNMOUNT 17
108#define XLOG_REG_TYPE_COMMIT 18
109#define XLOG_REG_TYPE_TRANSHDR 19
110#define XLOG_REG_TYPE_MAX 19
111
112#define XLOG_VEC_SET_TYPE(vecp, t) ((vecp)->i_type = (t))
113
114typedef struct xfs_log_iovec {
115 xfs_caddr_t i_addr;
116 int i_len;
117 uint i_type;
118} xfs_log_iovec_t;
119
120typedef void* xfs_log_ticket_t;
121
122
123
124
125
126typedef struct xfs_log_callback {
127 struct xfs_log_callback *cb_next;
128 void (*cb_func)(void *, int);
129 void *cb_arg;
130} xfs_log_callback_t;
131
132
133#ifdef __KERNEL__
134
135struct xfs_mount;
136xfs_lsn_t xfs_log_done(struct xfs_mount *mp,
137 xfs_log_ticket_t ticket,
138 void **iclog,
139 uint flags);
140int _xfs_log_force(struct xfs_mount *mp,
141 xfs_lsn_t lsn,
142 uint flags,
143 int *log_forced);
144#define xfs_log_force(mp, lsn, flags) \
145 _xfs_log_force(mp, lsn, flags, NULL);
146int xfs_log_mount(struct xfs_mount *mp,
147 struct xfs_buftarg *log_target,
148 xfs_daddr_t start_block,
149 int num_bblocks);
150int xfs_log_mount_finish(struct xfs_mount *mp, int);
151void xfs_log_move_tail(struct xfs_mount *mp,
152 xfs_lsn_t tail_lsn);
153int xfs_log_notify(struct xfs_mount *mp,
154 void *iclog,
155 xfs_log_callback_t *callback_entry);
156int xfs_log_release_iclog(struct xfs_mount *mp,
157 void *iclog_hndl);
158int xfs_log_reserve(struct xfs_mount *mp,
159 int length,
160 int count,
161 xfs_log_ticket_t *ticket,
162 __uint8_t clientid,
163 uint flags,
164 uint t_type);
165int xfs_log_write(struct xfs_mount *mp,
166 xfs_log_iovec_t region[],
167 int nentries,
168 xfs_log_ticket_t ticket,
169 xfs_lsn_t *start_lsn);
170int xfs_log_unmount(struct xfs_mount *mp);
171int xfs_log_unmount_write(struct xfs_mount *mp);
172void xfs_log_unmount_dealloc(struct xfs_mount *mp);
173int xfs_log_force_umount(struct xfs_mount *mp, int logerror);
174int xfs_log_need_covered(struct xfs_mount *mp);
175
176void xlog_iodone(struct xfs_buf *);
177
178#endif
179
180
181extern int xlog_debug;
182
183
184#endif
185