aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/bitmap.c
diff options
context:
space:
mode:
authorGoldwyn Rodrigues <rgoldwyn@suse.com>2014-03-29 11:20:02 -0400
committerGoldwyn Rodrigues <rgoldwyn@suse.com>2015-02-23 08:28:42 -0500
commitc4ce867fdad200dfd8aa8cbe1eabc26c14c51635 (patch)
tree529e265c90fbc91a3d4fe8a327f9d7ff9a284890 /drivers/md/bitmap.c
parentedb39c9deda87da5aad9c090e2e8eaf8470c852c (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.c9
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
2187static ssize_t metadata_show(struct mddev *mddev, char *page) 2191static 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;