[Cluster-devel] [fsck.gfs2 v2 PATCH 16/40] fsck: make pass1 call bitmap reconciliation AKA pass5

Bob Peterson rpeterso at redhat.com
Fri May 6 17:39:09 UTC 2016


This patch makes pass1 call what used to be pass5. That enables
pass1 to pass its private blockmap in as a private variable.

Signed-off-by: Bob Peterson <rpeterso at redhat.com>
---
 gfs2/fsck/main.c  | 34 ----------------------------------
 gfs2/fsck/pass1.c |  5 +++++
 gfs2/fsck/util.c  | 29 +++++++++++++++++++++++++++++
 gfs2/fsck/util.h  |  6 ++++++
 4 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index 8f2c733..2cedb30 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -229,14 +229,8 @@ static int check_statfs(struct gfs2_sbd *sdp)
 	return 0;
 }
 
-struct fsck_pass {
-	const char *name;
-	int (*f)(struct gfs2_sbd *sdp);
-};
-
 static const struct fsck_pass passes[] = {
 	{ .name = "pass1",  .f = pass1 },
-	{ .name = "reconcile_bitmaps",  .f = pass5 },
 	{ .name = "pass1b", .f = pass1b },
 	{ .name = "pass2",  .f = pass2 },
 	{ .name = "pass3",  .f = pass3 },
@@ -245,34 +239,6 @@ static const struct fsck_pass passes[] = {
 	{ .name = NULL, }
 };
 
-static void print_pass_duration(const char *name, struct timeval *start)
-{
-	char duration[17] = ""; /* strlen("XXdXXhXXmXX.XXXs") + 1 */
-	struct timeval end, diff;
-	unsigned d, h, m, s;
-	char *p = duration;
-
-	gettimeofday(&end, NULL);
-	timersub(&end, start, &diff);
-
-	s = diff.tv_sec % 60;
-	diff.tv_sec /= 60;
-	m = diff.tv_sec % 60;
-	diff.tv_sec /= 60;
-	h = diff.tv_sec % 24;
-	d = diff.tv_sec / 24;
-
-	if (d)
-		p += snprintf(p, 4, "%ud", d > 99 ? 99U : d);
-	if (h)
-		p += snprintf(p, 4, "%uh", h);
-	if (m)
-		p += snprintf(p, 4, "%um", m);
-
-	snprintf(p, 8, "%u.%03lus", s, diff.tv_usec / 1000);
-	log_notice(_("%s completed in %s\n"), name, duration);
-}
-
 static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
 {
 	int ret;
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index ca6f25f..876e565 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1991,6 +1991,7 @@ int pass1(struct gfs2_sbd *sdp)
 	uint64_t i;
 	uint64_t rg_count = 0;
 	int ret;
+	struct timeval timer;
 
 	osi_list_init(&gfs1_rindex_blks.list);
 
@@ -2040,6 +2041,10 @@ int pass1(struct gfs2_sbd *sdp)
 			return ret;
 
 	}
+	log_notice(_("Reconciling bitmaps.\n"));
+	gettimeofday(&timer, NULL);
+	pass5(sdp);
+	print_pass_duration("reconcile_bitmaps", &timer);
 	gfs2_special_free(&gfs1_rindex_blks);
 	return FSCK_OK;
 }
diff --git a/gfs2/fsck/util.c b/gfs2/fsck/util.c
index 7ca7b91..d6d664a 100644
--- a/gfs2/fsck/util.c
+++ b/gfs2/fsck/util.c
@@ -707,3 +707,32 @@ void delete_all_dups(struct gfs2_inode *ip)
 		}
 	}
 }
+
+void print_pass_duration(const char *name, struct timeval *start)
+{
+	char duration[17] = ""; /* strlen("XXdXXhXXmXX.XXXs") + 1 */
+	struct timeval end, diff;
+	unsigned d, h, m, s;
+	char *p = duration;
+
+	gettimeofday(&end, NULL);
+	timersub(&end, start, &diff);
+
+	s = diff.tv_sec % 60;
+	diff.tv_sec /= 60;
+	m = diff.tv_sec % 60;
+	diff.tv_sec /= 60;
+	h = diff.tv_sec % 24;
+	d = diff.tv_sec / 24;
+
+	if (d)
+		p += snprintf(p, 4, "%ud", d > 99 ? 99U : d);
+	if (h)
+		p += snprintf(p, 4, "%uh", h);
+	if (m)
+		p += snprintf(p, 4, "%um", m);
+
+	snprintf(p, 8, "%u.%03lus", s, diff.tv_usec / 1000);
+	log_notice(_("%s completed in %s\n"), name, duration);
+}
+
diff --git a/gfs2/fsck/util.h b/gfs2/fsck/util.h
index 7753daf..50a3c8d 100644
--- a/gfs2/fsck/util.h
+++ b/gfs2/fsck/util.h
@@ -27,6 +27,11 @@ extern const char *reftypes[ref_types + 1];
 #define BLOCKMAP_BYTE_OFFSET2(x) ((x & 0x0000000000000003) << 1)
 #define BLOCKMAP_MASK2 (0x3)
 
+struct fsck_pass {
+	const char *name;
+	int (*f)(struct gfs2_sbd *sdp);
+};
+
 static inline int block_type(uint64_t bblock)
 {
 	static unsigned char *byte;
@@ -106,6 +111,7 @@ extern char gfs2_getch(void);
 extern uint64_t find_free_blk(struct gfs2_sbd *sdp);
 extern uint64_t *get_dir_hash(struct gfs2_inode *ip);
 extern void delete_all_dups(struct gfs2_inode *ip);
+extern void print_pass_duration(const char *name, struct timeval *start);
 
 #define stack log_debug("<backtrace> - %s()\n", __func__)
 
-- 
2.5.5




More information about the Cluster-devel mailing list