All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Fix wrong bitmap output for cluster raid
@ 2016-03-07  9:31 Guoqing Jiang
  2016-03-07  9:31 ` [PATCH 2/2] Remove dead code about LKF_CONVERT flag Guoqing Jiang
  2016-03-07 20:53 ` [PATCH 1/2] Fix wrong bitmap output for cluster raid Jes Sorensen
  0 siblings, 2 replies; 5+ messages in thread
From: Guoqing Jiang @ 2016-03-07  9:31 UTC (permalink / raw)
  To: Jes.Sorensen; +Cc: linux-raid, rgoldwyn, neilb, Guoqing Jiang

For cluster raid, we need to displays bitmap related
contents from different bitmaps which are based on node
num. So bitmap_file_open and locate_bitmap are changed a
little bit for the purpose.

Reported-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Fixes: b98043a2f8 ("Show all bitmaps while examining bitmap")
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
---
 bitmap.c | 18 +++++++++---------
 mdadm.h  |  2 +-
 super0.c |  2 +-
 super1.c | 12 ++++++------
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/bitmap.c b/bitmap.c
index dab674b..5ad7401 100644
--- a/bitmap.c
+++ b/bitmap.c
@@ -194,7 +194,7 @@ out:
 	return info;
 }
 
-int bitmap_file_open(char *filename, struct supertype **stp)
+int bitmap_file_open(char *filename, struct supertype **stp, int node_num)
 {
 	int fd;
 	struct stat stb;
@@ -222,7 +222,7 @@ int bitmap_file_open(char *filename, struct supertype **stp)
 				st->ss->name);
 			return -1;
 		} else {
-			if (st->ss->locate_bitmap(st, fd)) {
+			if (st->ss->locate_bitmap(st, fd, node_num)) {
 				pr_err("%s doesn't have bitmap\n", filename);
 				fd = -1;
 			}
@@ -267,7 +267,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
 	int fd, i;
 	__u32 uuid32[4];
 
-	fd = bitmap_file_open(filename, &st);
+	fd = bitmap_file_open(filename, &st, 0);
 	if (fd < 0)
 		return rv;
 
@@ -348,11 +348,11 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
 		printf("   Cluster nodes : %d\n", sb->nodes);
 		printf("    Cluster name : %-64s\n", sb->cluster_name);
 		for (i = 0; i < (int)sb->nodes; i++) {
-			if (i) {
-				free(info);
-				info = bitmap_fd_read(fd, brief);
-				sb = &info->sb;
-			}
+			st = NULL;
+			free(info);
+			fd = bitmap_file_open(filename, &st, i);
+			info = bitmap_fd_read(fd, brief);
+			sb = &info->sb;
 			if (sb->magic != BITMAP_MAGIC)
 				pr_err("invalid bitmap magic 0x%x, the bitmap file appears to be corrupted\n", sb->magic);
 
@@ -367,7 +367,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st)
 			printf("          Bitmap : %llu bits (chunks), %llu dirty (%2.1f%%)\n",
 			       info->total_bits, info->dirty_bits,
 			       100.0 * info->dirty_bits / (info->total_bits?:1));
-
+			 close(fd);
 		}
 	}
 
diff --git a/mdadm.h b/mdadm.h
index 72888e2..355c455 100755
--- a/mdadm.h
+++ b/mdadm.h
@@ -904,7 +904,7 @@ extern struct superswitch {
 	/* Seek 'fd' to start of write-intent-bitmap.  Must be an
 	 * md-native format bitmap
 	 */
-	int (*locate_bitmap)(struct supertype *st, int fd);
+	int (*locate_bitmap)(struct supertype *st, int fd, int node_num);
 	/* if add_internal_bitmap succeeded for existing array, this
 	 * writes it out.
 	 */
diff --git a/super0.c b/super0.c
index 59a6a03..6fc1ac4 100644
--- a/super0.c
+++ b/super0.c
@@ -1156,7 +1156,7 @@ static int add_internal_bitmap0(struct supertype *st, int *chunkp,
 	return 1;
 }
 
-static int locate_bitmap0(struct supertype *st, int fd)
+static int locate_bitmap0(struct supertype *st, int fd, int node_num)
 {
 	unsigned long long dsize;
 	unsigned long long offset;
diff --git a/super1.c b/super1.c
index 9b877e5..f8a35ac 100644
--- a/super1.c
+++ b/super1.c
@@ -1548,7 +1548,7 @@ static int add_to_super1(struct supertype *st, mdu_disk_info_t *dk,
 }
 #endif
 
-static int locate_bitmap1(struct supertype *st, int fd);
+static int locate_bitmap1(struct supertype *st, int fd, int node_num);
 
 static int store_super1(struct supertype *st, int fd)
 {
@@ -1622,7 +1622,7 @@ static int store_super1(struct supertype *st, int fd)
 		struct bitmap_super_s *bm = (struct bitmap_super_s*)
 			(((char*)sb)+MAX_SB_SIZE);
 		if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC) {
-			locate_bitmap1(st, fd);
+			locate_bitmap1(st, fd, 0);
 			if (awrite(&afd, bm, sizeof(*bm)) != sizeof(*bm))
 				return 5;
 		}
@@ -2062,7 +2062,7 @@ static int load_super1(struct supertype *st, int fd, char *devname)
 	 * valid.  If it doesn't clear the bit.  An --assemble --force
 	 * should get that written out.
 	 */
-	locate_bitmap1(st, fd);
+	locate_bitmap1(st, fd, 0);
 	if (aread(&afd, bsb, 512) != 512)
 		goto no_bitmap;
 
@@ -2334,7 +2334,7 @@ add_internal_bitmap1(struct supertype *st,
 	return 1;
 }
 
-static int locate_bitmap1(struct supertype *st, int fd)
+static int locate_bitmap1(struct supertype *st, int fd, int node_num)
 {
 	unsigned long long offset;
 	struct mdp_superblock_1 *sb;
@@ -2353,7 +2353,7 @@ static int locate_bitmap1(struct supertype *st, int fd)
 	else
 		ret = -1;
 	offset = __le64_to_cpu(sb->super_offset);
-	offset += (int32_t) __le32_to_cpu(sb->bitmap_offset);
+	offset += (int32_t) __le32_to_cpu(sb->bitmap_offset) * (node_num + 1);
 	if (mustfree)
 		free(sb);
 	lseek64(fd, offset<<9, 0);
@@ -2408,7 +2408,7 @@ static int write_bitmap1(struct supertype *st, int fd, enum bitmap_update update
 
 	init_afd(&afd, fd);
 
-	locate_bitmap1(st, fd);
+	locate_bitmap1(st, fd, 0);
 
 	if (posix_memalign(&buf, 4096, 4096))
 		return -ENOMEM;
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-03-08  1:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-07  9:31 [PATCH 1/2] Fix wrong bitmap output for cluster raid Guoqing Jiang
2016-03-07  9:31 ` [PATCH 2/2] Remove dead code about LKF_CONVERT flag Guoqing Jiang
2016-03-07 20:54   ` Jes Sorensen
2016-03-08  1:28     ` Guoqing Jiang
2016-03-07 20:53 ` [PATCH 1/2] Fix wrong bitmap output for cluster raid Jes Sorensen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.