]>
Commit | Line | Data |
---|---|---|
1 | // SPDX-License-Identifier: GPL-2.0 | |
2 | /* | |
3 | * Copyright (c) 2000-2005 Silicon Graphics, Inc.All Rights Reserved. | |
4 | */ | |
5 | #ifndef LIBXLOG_H | |
6 | #define LIBXLOG_H | |
7 | ||
8 | /* | |
9 | * define the userlevel xlog_t to be the subset of the kernel's | |
10 | * xlog_t that we actually need to get our work done, avoiding | |
11 | * the need to define any exotic kernel types in userland. | |
12 | */ | |
13 | struct xlog { | |
14 | atomic64_t l_tail_lsn; /* lsn of 1st LR w/ unflush buffers */ | |
15 | atomic64_t l_last_sync_lsn;/* lsn of last LR on disk */ | |
16 | xfs_mount_t *l_mp; /* mount point */ | |
17 | struct xfs_buftarg *l_dev; /* dev_t of log */ | |
18 | xfs_daddr_t l_logBBstart; /* start block of log */ | |
19 | int l_logBBsize; /* size of log in 512 byte chunks */ | |
20 | int l_curr_cycle; /* Cycle number of log writes */ | |
21 | int l_prev_cycle; /* Cycle # b4 last block increment */ | |
22 | int l_curr_block; /* current logical block of log */ | |
23 | int l_prev_block; /* previous logical block of log */ | |
24 | int l_iclog_size; /* size of log in bytes */ | |
25 | int l_iclog_size_log;/* log power size of log */ | |
26 | int l_iclog_bufs; /* number of iclog buffers */ | |
27 | atomic64_t l_grant_reserve_head; | |
28 | atomic64_t l_grant_write_head; | |
29 | uint l_sectbb_log; /* log2 of sector size in bbs */ | |
30 | uint l_sectbb_mask; /* sector size (in BBs) | |
31 | * alignment mask */ | |
32 | int l_sectBBsize; /* size of log sector in 512 byte chunks */ | |
33 | }; | |
34 | ||
35 | #include "xfs_log_recover.h" | |
36 | ||
37 | /* | |
38 | * macros mapping kernel code to user code | |
39 | * | |
40 | * XXX: this is duplicated stuff - should be shared with libxfs. | |
41 | */ | |
42 | #ifndef EFSCORRUPTED | |
43 | #define EFSCORRUPTED 990 | |
44 | #endif | |
45 | #define STATIC static | |
46 | #define XFS_ERROR(e) (e) | |
47 | #ifdef DEBUG | |
48 | #define XFS_ERROR_REPORT(e,l,mp) fprintf(stderr, "ERROR: %s\n", e) | |
49 | #else | |
50 | #define XFS_ERROR_REPORT(e,l,mp) ((void) 0) | |
51 | #endif | |
52 | #define XFS_CORRUPTION_ERROR(e,l,mp,m) ((void) 0) | |
53 | #define XFS_MOUNT_WAS_CLEAN 0x1 | |
54 | #define unlikely(x) (x) | |
55 | #define xfs_alert(mp,fmt,args...) cmn_err(CE_ALERT,fmt, ## args) | |
56 | #define xfs_warn(mp,fmt,args...) cmn_err(CE_WARN,fmt, ## args) | |
57 | #define xfs_hex_dump(d,n) ((void) 0) | |
58 | #define __round_mask(x, y) ((__typeof__(x))((y)-1)) | |
59 | #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) | |
60 | #define round_down(x, y) ((x) & ~__round_mask(x, y)) | |
61 | ||
62 | extern void xlog_warn(char *fmt,...); | |
63 | extern void xlog_exit(char *fmt,...); | |
64 | extern void xlog_panic(char *fmt,...); | |
65 | ||
66 | /* exports */ | |
67 | extern int print_exit; | |
68 | extern int print_skip_uuid; | |
69 | extern int print_record_header; | |
70 | ||
71 | void xlog_init(struct xfs_mount *mp, struct xlog *log); | |
72 | int xlog_is_dirty(struct xfs_mount *mp, struct xlog *log); | |
73 | ||
74 | extern struct xfs_buf *xlog_get_bp(struct xlog *, int); | |
75 | extern int xlog_bread(struct xlog *log, xfs_daddr_t blk_no, int nbblks, | |
76 | struct xfs_buf *bp, char **offset); | |
77 | extern int xlog_bread_noalign(struct xlog *log, xfs_daddr_t blk_no, | |
78 | int nbblks, struct xfs_buf *bp); | |
79 | ||
80 | extern int xlog_find_zeroed(struct xlog *log, xfs_daddr_t *blk_no); | |
81 | extern int xlog_find_cycle_start(struct xlog *log, struct xfs_buf *bp, | |
82 | xfs_daddr_t first_blk, xfs_daddr_t *last_blk, | |
83 | uint cycle); | |
84 | extern int xlog_find_tail(struct xlog *log, xfs_daddr_t *head_blk, | |
85 | xfs_daddr_t *tail_blk); | |
86 | ||
87 | extern int xlog_recover(struct xlog *log, int readonly); | |
88 | extern void xlog_recover_print_data(char *p, int len); | |
89 | extern void xlog_recover_print_logitem(struct xlog_recover_item *item); | |
90 | extern void xlog_recover_print_trans_head(struct xlog_recover *tr); | |
91 | extern int xlog_print_find_oldest(struct xlog *log, xfs_daddr_t *last_blk); | |
92 | ||
93 | /* for transactional view */ | |
94 | extern void xlog_recover_print_trans_head(struct xlog_recover *tr); | |
95 | extern void xlog_recover_print_trans(struct xlog_recover *trans, | |
96 | struct list_head *itemq, int print); | |
97 | extern int xlog_do_recovery_pass(struct xlog *log, xfs_daddr_t head_blk, | |
98 | xfs_daddr_t tail_blk, int pass); | |
99 | extern int xlog_recover_do_trans(struct xlog *log, struct xlog_recover *trans, | |
100 | int pass); | |
101 | extern int xlog_header_check_recover(xfs_mount_t *mp, | |
102 | xlog_rec_header_t *head); | |
103 | extern int xlog_header_check_mount(xfs_mount_t *mp, | |
104 | xlog_rec_header_t *head); | |
105 | ||
106 | #define xlog_assign_atomic_lsn(l,a,b) ((void) 0) | |
107 | #define xlog_assign_grant_head(l,a,b) ((void) 0) | |
108 | #endif /* LIBXLOG_H */ |