1
2
3
4
5
6
7
8
9
10#ifndef _LINUX_DM_DIRTY_LOG
11#define _LINUX_DM_DIRTY_LOG
12
13#ifdef __KERNEL__
14
15#include <linux/types.h>
16#include <linux/device-mapper.h>
17
18typedef sector_t region_t;
19
20struct dm_dirty_log_type;
21
22struct dm_dirty_log {
23 struct dm_dirty_log_type *type;
24 int (*flush_callback_fn)(struct dm_target *ti);
25 void *context;
26};
27
28struct dm_dirty_log_type {
29 const char *name;
30 struct module *module;
31
32
33 struct list_head list;
34
35 int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti,
36 unsigned argc, char **argv);
37 void (*dtr)(struct dm_dirty_log *log);
38
39
40
41
42
43 int (*presuspend)(struct dm_dirty_log *log);
44 int (*postsuspend)(struct dm_dirty_log *log);
45 int (*resume)(struct dm_dirty_log *log);
46
47
48
49
50
51 uint32_t (*get_region_size)(struct dm_dirty_log *log);
52
53
54
55
56
57 int (*is_clean)(struct dm_dirty_log *log, region_t region);
58
59
60
61
62
63
64
65
66
67
68
69
70 int (*in_sync)(struct dm_dirty_log *log, region_t region,
71 int can_block);
72
73
74
75
76
77 int (*flush)(struct dm_dirty_log *log);
78
79
80
81
82
83
84
85 void (*mark_region)(struct dm_dirty_log *log, region_t region);
86 void (*clear_region)(struct dm_dirty_log *log, region_t region);
87
88
89
90
91
92
93
94
95
96
97
98
99
100 int (*get_resync_work)(struct dm_dirty_log *log, region_t *region);
101
102
103
104
105
106
107 void (*set_region_sync)(struct dm_dirty_log *log,
108 region_t region, int in_sync);
109
110
111
112
113 region_t (*get_sync_count)(struct dm_dirty_log *log);
114
115
116
117
118 int (*status)(struct dm_dirty_log *log, status_type_t status_type,
119 char *result, unsigned maxlen);
120
121
122
123
124
125
126
127
128
129 int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region);
130};
131
132int dm_dirty_log_type_register(struct dm_dirty_log_type *type);
133int dm_dirty_log_type_unregister(struct dm_dirty_log_type *type);
134
135
136
137
138
139struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
140 struct dm_target *ti,
141 int (*flush_callback_fn)(struct dm_target *ti),
142 unsigned argc, char **argv);
143void dm_dirty_log_destroy(struct dm_dirty_log *log);
144
145#endif
146#endif
147