summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/gfs2/rgrp.c41
-rw-r--r--fs/gfs2/util.c3
2 files changed, 39 insertions, 5 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 1ad3256b9cbc..44a4cbc043dd 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -1103,12 +1103,35 @@ static int gfs2_rgrp_lvb_valid(struct gfs2_rgrpd *rgd)
1103{ 1103{
1104 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; 1104 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl;
1105 struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data; 1105 struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data;
1106 int valid = 1;
1106 1107
1107 if (rgl->rl_flags != str->rg_flags || rgl->rl_free != str->rg_free || 1108 if (rgl->rl_flags != str->rg_flags) {
1108 rgl->rl_dinodes != str->rg_dinodes || 1109 printk(KERN_WARNING "GFS2: rgd: %llu lvb flag mismatch %u/%u",
1109 rgl->rl_igeneration != str->rg_igeneration) 1110 (unsigned long long)rgd->rd_addr,
1110 return 0; 1111 be32_to_cpu(rgl->rl_flags), be32_to_cpu(str->rg_flags));
1111 return 1; 1112 valid = 0;
1113 }
1114 if (rgl->rl_free != str->rg_free) {
1115 printk(KERN_WARNING "GFS2: rgd: %llu lvb free mismatch %u/%u",
1116 (unsigned long long)rgd->rd_addr,
1117 be32_to_cpu(rgl->rl_free), be32_to_cpu(str->rg_free));
1118 valid = 0;
1119 }
1120 if (rgl->rl_dinodes != str->rg_dinodes) {
1121 printk(KERN_WARNING "GFS2: rgd: %llu lvb dinode mismatch %u/%u",
1122 (unsigned long long)rgd->rd_addr,
1123 be32_to_cpu(rgl->rl_dinodes),
1124 be32_to_cpu(str->rg_dinodes));
1125 valid = 0;
1126 }
1127 if (rgl->rl_igeneration != str->rg_igeneration) {
1128 printk(KERN_WARNING "GFS2: rgd: %llu lvb igen mismatch "
1129 "%llu/%llu", (unsigned long long)rgd->rd_addr,
1130 (unsigned long long)be64_to_cpu(rgl->rl_igeneration),
1131 (unsigned long long)be64_to_cpu(str->rg_igeneration));
1132 valid = 0;
1133 }
1134 return valid;
1112} 1135}
1113 1136
1114static u32 count_unlinked(struct gfs2_rgrpd *rgd) 1137static u32 count_unlinked(struct gfs2_rgrpd *rgd)
@@ -2244,6 +2267,14 @@ void gfs2_rgrp_dump(struct seq_file *seq, const struct gfs2_glock *gl)
2244 (unsigned long long)rgd->rd_addr, rgd->rd_flags, 2267 (unsigned long long)rgd->rd_addr, rgd->rd_flags,
2245 rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes, 2268 rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes,
2246 rgd->rd_reserved, rgd->rd_extfail_pt); 2269 rgd->rd_reserved, rgd->rd_extfail_pt);
2270 if (rgd->rd_sbd->sd_args.ar_rgrplvb) {
2271 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl;
2272
2273 gfs2_print_dbg(seq, " L: f:%02x b:%u i:%u\n",
2274 be32_to_cpu(rgl->rl_flags),
2275 be32_to_cpu(rgl->rl_free),
2276 be32_to_cpu(rgl->rl_dinodes));
2277 }
2247 spin_lock(&rgd->rd_rsspin); 2278 spin_lock(&rgd->rd_rsspin);
2248 for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) { 2279 for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) {
2249 trs = rb_entry(n, struct gfs2_blkreserv, rs_node); 2280 trs = rb_entry(n, struct gfs2_blkreserv, rs_node);
diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c
index 59c811de0dc7..b072b10fb635 100644
--- a/fs/gfs2/util.c
+++ b/fs/gfs2/util.c
@@ -19,6 +19,7 @@
19#include "gfs2.h" 19#include "gfs2.h"
20#include "incore.h" 20#include "incore.h"
21#include "glock.h" 21#include "glock.h"
22#include "rgrp.h"
22#include "util.h" 23#include "util.h"
23 24
24struct kmem_cache *gfs2_glock_cachep __read_mostly; 25struct kmem_cache *gfs2_glock_cachep __read_mostly;
@@ -181,6 +182,8 @@ int gfs2_consist_rgrpd_i(struct gfs2_rgrpd *rgd, int cluster_wide,
181{ 182{
182 struct gfs2_sbd *sdp = rgd->rd_sbd; 183 struct gfs2_sbd *sdp = rgd->rd_sbd;
183 int rv; 184 int rv;
185
186 gfs2_rgrp_dump(NULL, rgd->rd_gl);
184 rv = gfs2_lm_withdraw(sdp, 187 rv = gfs2_lm_withdraw(sdp,
185 "fatal: filesystem consistency error\n" 188 "fatal: filesystem consistency error\n"
186 " RG = %llu\n" 189 " RG = %llu\n"