diff options
| author | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2014-06-06 13:12:32 -0400 |
|---|---|---|
| committer | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-02-23 08:30:11 -0500 |
| commit | 54519c5f4b398bcfe599f652b4ef4004d5fa63ff (patch) | |
| tree | 85ed11a3ad2ffb502091b415db0a7d41646b59d8 /drivers/md | |
| parent | b97e92574c0bf335db1cd2ec491d8ff5cd5d0b49 (diff) | |
Lock bitmap while joining the cluster
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Diffstat (limited to 'drivers/md')
| -rw-r--r-- | drivers/md/md-cluster.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index 66700e244a40..75c6602f4c75 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c | |||
| @@ -34,6 +34,7 @@ struct md_cluster_info { | |||
| 34 | struct completion completion; | 34 | struct completion completion; |
| 35 | struct dlm_lock_resource *sb_lock; | 35 | struct dlm_lock_resource *sb_lock; |
| 36 | struct mutex sb_mutex; | 36 | struct mutex sb_mutex; |
| 37 | struct dlm_lock_resource *bitmap_lockres; | ||
| 37 | }; | 38 | }; |
| 38 | 39 | ||
| 39 | static void sync_ast(void *arg) | 40 | static void sync_ast(void *arg) |
| @@ -208,6 +209,18 @@ static int join(struct mddev *mddev, int nodes) | |||
| 208 | ret = -ENOMEM; | 209 | ret = -ENOMEM; |
| 209 | goto err; | 210 | goto err; |
| 210 | } | 211 | } |
| 212 | |||
| 213 | pr_info("md-cluster: Joined cluster %s slot %d\n", str, cinfo->slot_number); | ||
| 214 | snprintf(str, 64, "bitmap%04d", cinfo->slot_number - 1); | ||
| 215 | cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1); | ||
| 216 | if (!cinfo->bitmap_lockres) | ||
| 217 | goto err; | ||
| 218 | if (dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW)) { | ||
| 219 | pr_err("Failed to get bitmap lock\n"); | ||
| 220 | ret = -EINVAL; | ||
| 221 | goto err; | ||
| 222 | } | ||
| 223 | |||
| 211 | return 0; | 224 | return 0; |
| 212 | err: | 225 | err: |
| 213 | if (cinfo->lockspace) | 226 | if (cinfo->lockspace) |
| @@ -225,6 +238,7 @@ static int leave(struct mddev *mddev) | |||
| 225 | if (!cinfo) | 238 | if (!cinfo) |
| 226 | return 0; | 239 | return 0; |
| 227 | lockres_free(cinfo->sb_lock); | 240 | lockres_free(cinfo->sb_lock); |
| 241 | lockres_free(cinfo->bitmap_lockres); | ||
| 228 | dlm_release_lockspace(cinfo->lockspace, 2); | 242 | dlm_release_lockspace(cinfo->lockspace, 2); |
| 229 | return 0; | 243 | return 0; |
| 230 | } | 244 | } |
