mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
dm log: add flush callback fn
Introduce a callback pointer from the log to dm-raid1 layer. Before some region is set as "in-sync", we need to flush hardware cache on all the disks. But the log module doesn't have access to the mirror_set structure. So it will use this callback. So far the callback is unused, it will be used in further patches. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
5adc78d0d2
commit
87a8f240e9
3 changed files with 9 additions and 5 deletions
|
@ -145,8 +145,9 @@ int dm_dirty_log_type_unregister(struct dm_dirty_log_type *type)
|
||||||
EXPORT_SYMBOL(dm_dirty_log_type_unregister);
|
EXPORT_SYMBOL(dm_dirty_log_type_unregister);
|
||||||
|
|
||||||
struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
|
struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
|
||||||
struct dm_target *ti,
|
struct dm_target *ti,
|
||||||
unsigned int argc, char **argv)
|
int (*flush_callback_fn)(struct dm_target *ti),
|
||||||
|
unsigned int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct dm_dirty_log_type *type;
|
struct dm_dirty_log_type *type;
|
||||||
struct dm_dirty_log *log;
|
struct dm_dirty_log *log;
|
||||||
|
@ -161,6 +162,7 @@ struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log->flush_callback_fn = flush_callback_fn;
|
||||||
log->type = type;
|
log->type = type;
|
||||||
if (type->ctr(log, ti, argc, argv)) {
|
if (type->ctr(log, ti, argc, argv)) {
|
||||||
kfree(log);
|
kfree(log);
|
||||||
|
|
|
@ -896,7 +896,7 @@ static struct dm_dirty_log *create_dirty_log(struct dm_target *ti,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl = dm_dirty_log_create(argv[0], ti, param_count, argv + 2);
|
dl = dm_dirty_log_create(argv[0], ti, NULL, param_count, argv + 2);
|
||||||
if (!dl) {
|
if (!dl) {
|
||||||
ti->error = "Error creating mirror dirty log";
|
ti->error = "Error creating mirror dirty log";
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -21,6 +21,7 @@ struct dm_dirty_log_type;
|
||||||
|
|
||||||
struct dm_dirty_log {
|
struct dm_dirty_log {
|
||||||
struct dm_dirty_log_type *type;
|
struct dm_dirty_log_type *type;
|
||||||
|
int (*flush_callback_fn)(struct dm_target *ti);
|
||||||
void *context;
|
void *context;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -136,8 +137,9 @@ int dm_dirty_log_type_unregister(struct dm_dirty_log_type *type);
|
||||||
* type->constructor/destructor() directly.
|
* type->constructor/destructor() directly.
|
||||||
*/
|
*/
|
||||||
struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
|
struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
|
||||||
struct dm_target *ti,
|
struct dm_target *ti,
|
||||||
unsigned argc, char **argv);
|
int (*flush_callback_fn)(struct dm_target *ti),
|
||||||
|
unsigned argc, char **argv);
|
||||||
void dm_dirty_log_destroy(struct dm_dirty_log *log);
|
void dm_dirty_log_destroy(struct dm_dirty_log *log);
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
Loading…
Reference in a new issue