diff options
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/incore.h | 12 | ||||
-rw-r--r-- | fs/gfs2/rgrp.c | 20 | ||||
-rw-r--r-- | fs/gfs2/super.c | 2 |
3 files changed, 13 insertions, 21 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index f8d977362515..9e3b613d0bac 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
@@ -68,10 +68,6 @@ struct gfs2_bitmap { | |||
68 | u32 bi_len; | 68 | u32 bi_len; |
69 | }; | 69 | }; |
70 | 70 | ||
71 | struct gfs2_rgrp_host { | ||
72 | u32 rg_dinodes; | ||
73 | }; | ||
74 | |||
75 | struct gfs2_rgrpd { | 71 | struct gfs2_rgrpd { |
76 | struct list_head rd_list; /* Link with superblock */ | 72 | struct list_head rd_list; /* Link with superblock */ |
77 | struct list_head rd_list_mru; | 73 | struct list_head rd_list_mru; |
@@ -82,15 +78,15 @@ struct gfs2_rgrpd { | |||
82 | u32 rd_data; /* num of data blocks in rgrp */ | 78 | u32 rd_data; /* num of data blocks in rgrp */ |
83 | u32 rd_bitbytes; /* number of bytes in data bitmaps */ | 79 | u32 rd_bitbytes; /* number of bytes in data bitmaps */ |
84 | u32 rd_free; | 80 | u32 rd_free; |
85 | struct gfs2_rgrp_host rd_rg; | 81 | u32 rd_free_clone; |
82 | u32 rd_dinodes; | ||
86 | u64 rd_igeneration; | 83 | u64 rd_igeneration; |
87 | struct gfs2_bitmap *rd_bits; | 84 | struct gfs2_bitmap *rd_bits; |
88 | unsigned int rd_bh_count; | ||
89 | struct mutex rd_mutex; | 85 | struct mutex rd_mutex; |
90 | u32 rd_free_clone; | ||
91 | struct gfs2_log_element rd_le; | 86 | struct gfs2_log_element rd_le; |
92 | u32 rd_last_alloc; | ||
93 | struct gfs2_sbd *rd_sbd; | 87 | struct gfs2_sbd *rd_sbd; |
88 | unsigned int rd_bh_count; | ||
89 | u32 rd_last_alloc; | ||
94 | unsigned char rd_flags; | 90 | unsigned char rd_flags; |
95 | #define GFS2_RDF_CHECK 0x01 /* Need to check for unlinked inodes */ | 91 | #define GFS2_RDF_CHECK 0x01 /* Need to check for unlinked inodes */ |
96 | #define GFS2_RDF_NOALLOC 0x02 /* rg prohibits allocation */ | 92 | #define GFS2_RDF_NOALLOC 0x02 /* rg prohibits allocation */ |
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index bab9cfab34c7..8b01c635d925 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -276,9 +276,7 @@ void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd) | |||
276 | return; | 276 | return; |
277 | } | 277 | } |
278 | 278 | ||
279 | tmp = rgd->rd_data - | 279 | tmp = rgd->rd_data - rgd->rd_free - rgd->rd_dinodes; |
280 | rgd->rd_free - | ||
281 | rgd->rd_rg.rg_dinodes; | ||
282 | if (count[1] + count[2] != tmp) { | 280 | if (count[1] + count[2] != tmp) { |
283 | if (gfs2_consist_rgrpd(rgd)) | 281 | if (gfs2_consist_rgrpd(rgd)) |
284 | fs_err(sdp, "used data mismatch: %u != %u\n", | 282 | fs_err(sdp, "used data mismatch: %u != %u\n", |
@@ -286,10 +284,10 @@ void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd) | |||
286 | return; | 284 | return; |
287 | } | 285 | } |
288 | 286 | ||
289 | if (count[3] != rgd->rd_rg.rg_dinodes) { | 287 | if (count[3] != rgd->rd_dinodes) { |
290 | if (gfs2_consist_rgrpd(rgd)) | 288 | if (gfs2_consist_rgrpd(rgd)) |
291 | fs_err(sdp, "used metadata mismatch: %u != %u\n", | 289 | fs_err(sdp, "used metadata mismatch: %u != %u\n", |
292 | count[3], rgd->rd_rg.rg_dinodes); | 290 | count[3], rgd->rd_dinodes); |
293 | return; | 291 | return; |
294 | } | 292 | } |
295 | 293 | ||
@@ -692,7 +690,6 @@ int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh) | |||
692 | static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) | 690 | static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) |
693 | { | 691 | { |
694 | const struct gfs2_rgrp *str = buf; | 692 | const struct gfs2_rgrp *str = buf; |
695 | struct gfs2_rgrp_host *rg = &rgd->rd_rg; | ||
696 | u32 rg_flags; | 693 | u32 rg_flags; |
697 | 694 | ||
698 | rg_flags = be32_to_cpu(str->rg_flags); | 695 | rg_flags = be32_to_cpu(str->rg_flags); |
@@ -701,21 +698,20 @@ static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) | |||
701 | else | 698 | else |
702 | rgd->rd_flags &= ~GFS2_RDF_NOALLOC; | 699 | rgd->rd_flags &= ~GFS2_RDF_NOALLOC; |
703 | rgd->rd_free = be32_to_cpu(str->rg_free); | 700 | rgd->rd_free = be32_to_cpu(str->rg_free); |
704 | rg->rg_dinodes = be32_to_cpu(str->rg_dinodes); | 701 | rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes); |
705 | rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration); | 702 | rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration); |
706 | } | 703 | } |
707 | 704 | ||
708 | static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) | 705 | static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) |
709 | { | 706 | { |
710 | struct gfs2_rgrp *str = buf; | 707 | struct gfs2_rgrp *str = buf; |
711 | struct gfs2_rgrp_host *rg = &rgd->rd_rg; | ||
712 | u32 rg_flags = 0; | 708 | u32 rg_flags = 0; |
713 | 709 | ||
714 | if (rgd->rd_flags & GFS2_RDF_NOALLOC) | 710 | if (rgd->rd_flags & GFS2_RDF_NOALLOC) |
715 | rg_flags |= GFS2_RGF_NOALLOC; | 711 | rg_flags |= GFS2_RGF_NOALLOC; |
716 | str->rg_flags = cpu_to_be32(rg_flags); | 712 | str->rg_flags = cpu_to_be32(rg_flags); |
717 | str->rg_free = cpu_to_be32(rgd->rd_free); | 713 | str->rg_free = cpu_to_be32(rgd->rd_free); |
718 | str->rg_dinodes = cpu_to_be32(rg->rg_dinodes); | 714 | str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes); |
719 | str->__pad = cpu_to_be32(0); | 715 | str->__pad = cpu_to_be32(0); |
720 | str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration); | 716 | str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration); |
721 | memset(&str->rg_reserved, 0, sizeof(str->rg_reserved)); | 717 | memset(&str->rg_reserved, 0, sizeof(str->rg_reserved)); |
@@ -1447,7 +1443,7 @@ u64 gfs2_alloc_di(struct gfs2_inode *dip, u64 *generation) | |||
1447 | 1443 | ||
1448 | gfs2_assert_withdraw(sdp, rgd->rd_free); | 1444 | gfs2_assert_withdraw(sdp, rgd->rd_free); |
1449 | rgd->rd_free--; | 1445 | rgd->rd_free--; |
1450 | rgd->rd_rg.rg_dinodes++; | 1446 | rgd->rd_dinodes++; |
1451 | *generation = rgd->rd_igeneration++; | 1447 | *generation = rgd->rd_igeneration++; |
1452 | gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); | 1448 | gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); |
1453 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); | 1449 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); |
@@ -1546,9 +1542,9 @@ static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno) | |||
1546 | return; | 1542 | return; |
1547 | gfs2_assert_withdraw(sdp, rgd == tmp_rgd); | 1543 | gfs2_assert_withdraw(sdp, rgd == tmp_rgd); |
1548 | 1544 | ||
1549 | if (!rgd->rd_rg.rg_dinodes) | 1545 | if (!rgd->rd_dinodes) |
1550 | gfs2_consist_rgrpd(rgd); | 1546 | gfs2_consist_rgrpd(rgd); |
1551 | rgd->rd_rg.rg_dinodes--; | 1547 | rgd->rd_dinodes--; |
1552 | rgd->rd_free++; | 1548 | rgd->rd_free++; |
1553 | 1549 | ||
1554 | gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); | 1550 | gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index e76907691ad9..b85877062a48 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -469,7 +469,7 @@ static int statfs_slow_fill(struct gfs2_rgrpd *rgd, | |||
469 | gfs2_rgrp_verify(rgd); | 469 | gfs2_rgrp_verify(rgd); |
470 | sc->sc_total += rgd->rd_data; | 470 | sc->sc_total += rgd->rd_data; |
471 | sc->sc_free += rgd->rd_free; | 471 | sc->sc_free += rgd->rd_free; |
472 | sc->sc_dinodes += rgd->rd_rg.rg_dinodes; | 472 | sc->sc_dinodes += rgd->rd_dinodes; |
473 | return 0; | 473 | return 0; |
474 | } | 474 | } |
475 | 475 | ||