Blame view
fs/xfs/xfs_log.h
5.48 KB
1da177e4c
|
1 |
/* |
7b7187698
|
2 3 |
* Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c
|
4 |
* |
7b7187698
|
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
|
7 8 |
* published by the Free Software Foundation. * |
7b7187698
|
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
|
13 |
* |
7b7187698
|
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
|
17 18 19 20 21 |
*/ #ifndef __XFS_LOG_H__ #define __XFS_LOG_H__ /* get lsn fields */ |
1da177e4c
|
22 23 |
#define CYCLE_LSN(lsn) ((uint)((lsn)>>32)) #define BLOCK_LSN(lsn) ((uint)(lsn)) |
b53e675dc
|
24 |
|
1da177e4c
|
25 |
/* this is used in a spot where we might otherwise double-endian-flip */ |
b53e675dc
|
26 |
#define CYCLE_LSN_DISK(lsn) (((__be32 *)&(lsn))[0]) |
1da177e4c
|
27 28 29 |
#ifdef __KERNEL__ /* |
c41564b5a
|
30 |
* By comparing each component, we don't have to worry about extra |
1da177e4c
|
31 32 |
* endian issues in treating two 32 bit numbers as one 64 bit number */ |
a13656470
|
33 |
static inline xfs_lsn_t _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2) |
1da177e4c
|
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
{ if (CYCLE_LSN(lsn1) != CYCLE_LSN(lsn2)) return (CYCLE_LSN(lsn1)<CYCLE_LSN(lsn2))? -999 : 999; if (BLOCK_LSN(lsn1) != BLOCK_LSN(lsn2)) return (BLOCK_LSN(lsn1)<BLOCK_LSN(lsn2))? -999 : 999; return 0; } #define XFS_LSN_CMP(x,y) _lsn_cmp(x,y) /* * Macros, structures, prototypes for interface to the log manager. */ /* |
1da177e4c
|
51 52 53 |
* Flags to xfs_log_done() */ #define XFS_LOG_REL_PERM_RESERV 0x1 |
1da177e4c
|
54 55 56 |
/* * Flags to xfs_log_reserve() * |
1da177e4c
|
57 58 59 60 |
* XFS_LOG_PERM_RESERV: Permanent reservation. When writes are * performed against this type of reservation, the reservation * is not decreased. Long running transactions should use this. */ |
1da177e4c
|
61 |
#define XFS_LOG_PERM_RESERV 0x2 |
1da177e4c
|
62 63 64 65 66 |
/* * Flags to xfs_log_force() * * XFS_LOG_SYNC: Synchronous force in-core log to disk |
1da177e4c
|
67 68 |
*/ #define XFS_LOG_SYNC 0x1 |
1da177e4c
|
69 70 71 72 73 74 75 76 |
#endif /* __KERNEL__ */ /* Log Clients */ #define XFS_TRANSACTION 0x69 #define XFS_VOLUME 0x2 #define XFS_LOG 0xaa |
7e9c63961
|
77 78 |
/* Region types for iovec's i_type */ |
7e9c63961
|
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#define XLOG_REG_TYPE_BFORMAT 1 #define XLOG_REG_TYPE_BCHUNK 2 #define XLOG_REG_TYPE_EFI_FORMAT 3 #define XLOG_REG_TYPE_EFD_FORMAT 4 #define XLOG_REG_TYPE_IFORMAT 5 #define XLOG_REG_TYPE_ICORE 6 #define XLOG_REG_TYPE_IEXT 7 #define XLOG_REG_TYPE_IBROOT 8 #define XLOG_REG_TYPE_ILOCAL 9 #define XLOG_REG_TYPE_IATTR_EXT 10 #define XLOG_REG_TYPE_IATTR_BROOT 11 #define XLOG_REG_TYPE_IATTR_LOCAL 12 #define XLOG_REG_TYPE_QFORMAT 13 #define XLOG_REG_TYPE_DQUOT 14 #define XLOG_REG_TYPE_QUOTAOFF 15 #define XLOG_REG_TYPE_LRHEADER 16 #define XLOG_REG_TYPE_UNMOUNT 17 #define XLOG_REG_TYPE_COMMIT 18 #define XLOG_REG_TYPE_TRANSHDR 19 #define XLOG_REG_TYPE_MAX 19 |
7e9c63961
|
99 |
|
1da177e4c
|
100 |
typedef struct xfs_log_iovec { |
4e0d5f926
|
101 |
void *i_addr; /* beginning address of region */ |
1da177e4c
|
102 |
int i_len; /* length in bytes of region */ |
1259845d3
|
103 |
uint i_type; /* type of region */ |
1da177e4c
|
104 |
} xfs_log_iovec_t; |
55b66332d
|
105 106 107 108 |
struct xfs_log_vec { struct xfs_log_vec *lv_next; /* next lv in build list */ int lv_niovecs; /* number of iovecs in lv */ struct xfs_log_iovec *lv_iovecp; /* iovec array */ |
71e330b59
|
109 110 111 |
struct xfs_log_item *lv_item; /* owner */ char *lv_buf; /* formatted buffer */ int lv_buf_len; /* size of formatted buffer */ |
55b66332d
|
112 |
}; |
1da177e4c
|
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
/* * Structure used to pass callback function and the function's argument * to the log manager. */ typedef struct xfs_log_callback { struct xfs_log_callback *cb_next; void (*cb_func)(void *, int); void *cb_arg; } xfs_log_callback_t; #ifdef __KERNEL__ /* Log manager interfaces */ struct xfs_mount; |
35a8a72f0
|
127 |
struct xlog_in_core; |
cc09c0dc5
|
128 |
struct xlog_ticket; |
43f5efc5b
|
129 130 |
struct xfs_log_item; struct xfs_item_ops; |
955833cf2
|
131 |
struct xfs_trans; |
43f5efc5b
|
132 133 134 135 |
void xfs_log_item_init(struct xfs_mount *mp, struct xfs_log_item *item, int type, |
272e42b21
|
136 |
const struct xfs_item_ops *ops); |
35a8a72f0
|
137 |
|
1da177e4c
|
138 |
xfs_lsn_t xfs_log_done(struct xfs_mount *mp, |
35a8a72f0
|
139 140 |
struct xlog_ticket *ticket, struct xlog_in_core **iclog, |
1da177e4c
|
141 |
uint flags); |
f538d4da8
|
142 |
int _xfs_log_force(struct xfs_mount *mp, |
f538d4da8
|
143 144 |
uint flags, int *log_forced); |
b911ca047
|
145 |
void xfs_log_force(struct xfs_mount *mp, |
b911ca047
|
146 |
uint flags); |
a14a348bf
|
147 148 149 150 151 152 153 |
int _xfs_log_force_lsn(struct xfs_mount *mp, xfs_lsn_t lsn, uint flags, int *log_forced); void xfs_log_force_lsn(struct xfs_mount *mp, xfs_lsn_t lsn, uint flags); |
1da177e4c
|
154 155 156 157 |
int xfs_log_mount(struct xfs_mount *mp, struct xfs_buftarg *log_target, xfs_daddr_t start_block, int num_bblocks); |
4249023a5
|
158 |
int xfs_log_mount_finish(struct xfs_mount *mp); |
1da177e4c
|
159 160 161 |
void xfs_log_move_tail(struct xfs_mount *mp, xfs_lsn_t tail_lsn); int xfs_log_notify(struct xfs_mount *mp, |
35a8a72f0
|
162 |
struct xlog_in_core *iclog, |
1da177e4c
|
163 164 |
xfs_log_callback_t *callback_entry); int xfs_log_release_iclog(struct xfs_mount *mp, |
35a8a72f0
|
165 |
struct xlog_in_core *iclog); |
1da177e4c
|
166 167 168 |
int xfs_log_reserve(struct xfs_mount *mp, int length, int count, |
35a8a72f0
|
169 |
struct xlog_ticket **ticket, |
1da177e4c
|
170 |
__uint8_t clientid, |
7e9c63961
|
171 172 |
uint flags, uint t_type); |
1da177e4c
|
173 |
int xfs_log_unmount_write(struct xfs_mount *mp); |
21b699c89
|
174 |
void xfs_log_unmount(struct xfs_mount *mp); |
1da177e4c
|
175 176 177 178 |
int xfs_log_force_umount(struct xfs_mount *mp, int logerror); int xfs_log_need_covered(struct xfs_mount *mp); void xlog_iodone(struct xfs_buf *); |
71e330b59
|
179 |
struct xlog_ticket *xfs_log_ticket_get(struct xlog_ticket *ticket); |
cc09c0dc5
|
180 |
void xfs_log_ticket_put(struct xlog_ticket *ticket); |
0244b9603
|
181 |
int xfs_log_commit_cil(struct xfs_mount *mp, struct xfs_trans *tp, |
71e330b59
|
182 |
xfs_lsn_t *commit_lsn, int flags); |
ccf7c23fc
|
183 |
bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); |
71e330b59
|
184 |
|
1da177e4c
|
185 |
#endif |
1da177e4c
|
186 |
#endif /* __XFS_LOG_H__ */ |