summaryrefslogtreecommitdiffstats
path: root/include/linux/dm-dirty-log.h
diff options
context:
space:
mode:
authorJonathan Brassow <jbrassow@redhat.com>2009-04-02 19:55:30 +0100
committerAlasdair G Kergon <agk@redhat.com>2009-04-02 19:55:30 +0100
commit7513c2a761d69d2a93f17146b3563527d3618ba0 (patch)
tree375a14998a60a47b83962d5a497139112ec6e8e4 /include/linux/dm-dirty-log.h
parentb2a114652940ccf7e9668ad447ca78bf16a31139 (diff)
downloadlinux-stable-7513c2a761d69d2a93f17146b3563527d3618ba0.tar.gz
linux-stable-7513c2a761d69d2a93f17146b3563527d3618ba0.tar.bz2
linux-stable-7513c2a761d69d2a93f17146b3563527d3618ba0.zip
dm raid1: add is_remote_recovering hook for clusters
The logging API needs an extra function to make cluster mirroring possible. This new function allows us to check whether a mirror region is being recovered on another machine in the cluster. This helps us prevent simultaneous recovery I/O and process I/O to the same locations on disk. Cluster-aware log modules will implement this function. Single machine log modules will not. So, there is no performance penalty for single machine mirrors. Signed-off-by: Jonathan Brassow <jbrassow@redhat.com> Acked-by: Heinz Mauelshagen <heinzm@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'include/linux/dm-dirty-log.h')
-rw-r--r--include/linux/dm-dirty-log.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/dm-dirty-log.h b/include/linux/dm-dirty-log.h
index 727602b686d4..5e8b11d88f6f 100644
--- a/include/linux/dm-dirty-log.h
+++ b/include/linux/dm-dirty-log.h
@@ -116,6 +116,16 @@ struct dm_dirty_log_type {
*/
int (*status)(struct dm_dirty_log *log, status_type_t status_type,
char *result, unsigned maxlen);
+
+ /*
+ * is_remote_recovering is necessary for cluster mirroring. It provides
+ * a way to detect recovery on another node, so we aren't writing
+ * concurrently. This function is likely to block (when a cluster log
+ * is used).
+ *
+ * Returns: 0, 1
+ */
+ int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region);
};
int dm_dirty_log_type_register(struct dm_dirty_log_type *type);