diff options
author | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2014-03-29 11:20:02 -0400 |
---|---|---|
committer | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-02-23 08:28:42 -0500 |
commit | c4ce867fdad200dfd8aa8cbe1eabc26c14c51635 (patch) | |
tree | 529e265c90fbc91a3d4fe8a327f9d7ff9a284890 /drivers/md/bitmap.c | |
parent | edb39c9deda87da5aad9c090e2e8eaf8470c852c (diff) |
Introduce md_cluster_info
md_cluster_info stores the cluster information in the MD device.
The join() is called when mddev detects it is a clustered device.
The main responsibilities are:
1. Setup a DLM lockspace
2. Setup all initial locks such as super block locks and bitmap lock (will come later)
The leave() clears up the lockspace and all the locks held.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Diffstat (limited to 'drivers/md/bitmap.c')
-rw-r--r-- | drivers/md/bitmap.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 3a5767968ba0..e2aacca46911 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c | |||
@@ -433,6 +433,7 @@ void bitmap_update_sb(struct bitmap *bitmap) | |||
433 | /* This might have been changed by a reshape */ | 433 | /* This might have been changed by a reshape */ |
434 | sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); | 434 | sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); |
435 | sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize); | 435 | sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize); |
436 | sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes); | ||
436 | sb->sectors_reserved = cpu_to_le32(bitmap->mddev-> | 437 | sb->sectors_reserved = cpu_to_le32(bitmap->mddev-> |
437 | bitmap_info.space); | 438 | bitmap_info.space); |
438 | kunmap_atomic(sb); | 439 | kunmap_atomic(sb); |
@@ -544,6 +545,7 @@ static int bitmap_read_sb(struct bitmap *bitmap) | |||
544 | bitmap_super_t *sb; | 545 | bitmap_super_t *sb; |
545 | unsigned long chunksize, daemon_sleep, write_behind; | 546 | unsigned long chunksize, daemon_sleep, write_behind; |
546 | unsigned long long events; | 547 | unsigned long long events; |
548 | int nodes = 0; | ||
547 | unsigned long sectors_reserved = 0; | 549 | unsigned long sectors_reserved = 0; |
548 | int err = -EINVAL; | 550 | int err = -EINVAL; |
549 | struct page *sb_page; | 551 | struct page *sb_page; |
@@ -583,6 +585,7 @@ static int bitmap_read_sb(struct bitmap *bitmap) | |||
583 | daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ; | 585 | daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ; |
584 | write_behind = le32_to_cpu(sb->write_behind); | 586 | write_behind = le32_to_cpu(sb->write_behind); |
585 | sectors_reserved = le32_to_cpu(sb->sectors_reserved); | 587 | sectors_reserved = le32_to_cpu(sb->sectors_reserved); |
588 | nodes = le32_to_cpu(sb->nodes); | ||
586 | 589 | ||
587 | /* verify that the bitmap-specific fields are valid */ | 590 | /* verify that the bitmap-specific fields are valid */ |
588 | if (sb->magic != cpu_to_le32(BITMAP_MAGIC)) | 591 | if (sb->magic != cpu_to_le32(BITMAP_MAGIC)) |
@@ -643,6 +646,7 @@ out_no_sb: | |||
643 | bitmap->mddev->bitmap_info.chunksize = chunksize; | 646 | bitmap->mddev->bitmap_info.chunksize = chunksize; |
644 | bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; | 647 | bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; |
645 | bitmap->mddev->bitmap_info.max_write_behind = write_behind; | 648 | bitmap->mddev->bitmap_info.max_write_behind = write_behind; |
649 | bitmap->mddev->bitmap_info.nodes = nodes; | ||
646 | if (bitmap->mddev->bitmap_info.space == 0 || | 650 | if (bitmap->mddev->bitmap_info.space == 0 || |
647 | bitmap->mddev->bitmap_info.space > sectors_reserved) | 651 | bitmap->mddev->bitmap_info.space > sectors_reserved) |
648 | bitmap->mddev->bitmap_info.space = sectors_reserved; | 652 | bitmap->mddev->bitmap_info.space = sectors_reserved; |
@@ -2186,6 +2190,8 @@ __ATTR(chunksize, S_IRUGO|S_IWUSR, chunksize_show, chunksize_store); | |||
2186 | 2190 | ||
2187 | static ssize_t metadata_show(struct mddev *mddev, char *page) | 2191 | static ssize_t metadata_show(struct mddev *mddev, char *page) |
2188 | { | 2192 | { |
2193 | if (mddev_is_clustered(mddev)) | ||
2194 | return sprintf(page, "clustered\n"); | ||
2189 | return sprintf(page, "%s\n", (mddev->bitmap_info.external | 2195 | return sprintf(page, "%s\n", (mddev->bitmap_info.external |
2190 | ? "external" : "internal")); | 2196 | ? "external" : "internal")); |
2191 | } | 2197 | } |
@@ -2198,7 +2204,8 @@ static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len) | |||
2198 | return -EBUSY; | 2204 | return -EBUSY; |
2199 | if (strncmp(buf, "external", 8) == 0) | 2205 | if (strncmp(buf, "external", 8) == 0) |
2200 | mddev->bitmap_info.external = 1; | 2206 | mddev->bitmap_info.external = 1; |
2201 | else if (strncmp(buf, "internal", 8) == 0) | 2207 | else if ((strncmp(buf, "internal", 8) == 0) || |
2208 | (strncmp(buf, "clustered", 9) == 0)) | ||
2202 | mddev->bitmap_info.external = 0; | 2209 | mddev->bitmap_info.external = 0; |
2203 | else | 2210 | else |
2204 | return -EINVAL; | 2211 | return -EINVAL; |