[Ocfs2-tools-devel] [PATCH 1/2] fsck: fix the first group desc in chain 0 when globalbitmap has only one chain
piaojun
piaojun at huawei.com
Sat Sep 9 20:15:14 PDT 2017
fsck can't fix the first group desc in chain 0 when global_bitmap has
only one chain, because we will get error when reading gd in
maybe_fix_clusters_per_group(). so we need fix the corrupted gd in the
following steps.
Signed-off-by: Jun Piao <piaojun at huawei.com>
---
fsck.ocfs2/pass0.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/fsck.ocfs2/pass0.c b/fsck.ocfs2/pass0.c
index 148877c..bfd11fb 100644
--- a/fsck.ocfs2/pass0.c
+++ b/fsck.ocfs2/pass0.c
@@ -635,7 +635,15 @@ static errcode_t maybe_fix_clusters_per_group(o2fsck_state *ost,
blkno = cl->cl_recs[0].c_blkno;
ret = ocfs2_read_group_desc(ost->ost_fs, blkno, (char *)gd);
- if (ret) {
+ if ((ret == OCFS2_ET_BAD_GROUP_DESC_MAGIC) ||
+ (!ret && gd->bg_generation != ost->ost_fs_generation)) {
+ if (prompt(ost, PY, PR_GROUP_EXPECTED_DESC,
+ "Group descriptor at block %"PRIu64" is corrupted. "
+ "Go fixing it in the following steps?", blkno)) {
+ ret = 0;
+ }
+ goto out;
+ } else if (ret) {
com_err(whoami, ret, "while reading group descriptor "
"at block %"PRIu64" to fix cl_cpg", blkno);
goto out;
@@ -1219,8 +1227,8 @@ static errcode_t verify_bitmap_descs(o2fsck_state *ost,
* its values.. we only preserve the bitmap if the signature
* and generation match this volume */
ret = ocfs2_read_group_desc(ost->ost_fs, blkno, (char *)bg);
- if (ret == OCFS2_ET_BAD_GROUP_DESC_MAGIC ||
- bg->bg_generation != ost->ost_fs_generation) {
+ if ((ret == OCFS2_ET_BAD_GROUP_DESC_MAGIC) ||
+ (!ret && bg->bg_generation != ost->ost_fs_generation)) {
memset(bg, 0, ost->ost_fs->fs_blocksize);
ocfs2_init_group_desc(ost->ost_fs, bg, blkno,
ost->ost_fs_generation,
--
More information about the Ocfs2-tools-devel
mailing list