[Cluster-devel] [PATCH 2/5] libgfs2: Make gfs2_rgrp_out accept char buffers
Andrew Price
anprice at redhat.com
Tue Feb 26 14:04:23 UTC 2013
In order to prepare for handling resource groups separately from buffer
heads in mkfs.gfs2, change gfs2_rgrp_out to copy rgrps to char buffers
instead of buffer heads. Copying to bh's is now done in
gfs2_rgrp_out_bh.
Signed-off-by: Andrew Price <anprice at redhat.com>
---
gfs2/convert/gfs2_convert.c | 10 +++++-----
gfs2/edit/hexedit.c | 4 ++--
gfs2/fsck/initialize.c | 4 ++--
gfs2/fsck/metawalk.c | 4 ++--
gfs2/fsck/pass5.c | 2 +-
gfs2/fsck/rgrepair.c | 4 ++--
gfs2/libgfs2/fs_geometry.c | 4 ++--
gfs2/libgfs2/fs_ops.c | 20 ++++++++++----------
gfs2/libgfs2/gfs1.c | 6 +++---
gfs2/libgfs2/libgfs2.h | 8 +++++---
gfs2/libgfs2/ondisk.c | 32 +++++++++++++++++++++-----------
gfs2/libgfs2/structures.c | 2 +-
gfs2/mkfs/main_jadd.c | 2 +-
13 files changed, 57 insertions(+), 45 deletions(-)
diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c
index 72c974f..235c95c 100644
--- a/gfs2/convert/gfs2_convert.c
+++ b/gfs2/convert/gfs2_convert.c
@@ -237,7 +237,7 @@ static int convert_rgs(struct gfs2_sbd *sbp)
sbp->dinodes_alloced += rgd1->rg_useddi;
convert_bitmaps(sbp, rgd);
/* Write the updated rgrp to the gfs2 buffer */
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
rgs++;
if (rgs % 100 == 0) {
printf(".");
@@ -359,7 +359,7 @@ static void fix_metatree(struct gfs2_sbd *sbp, struct gfs2_inode *ip,
bh = bread(sbp, block);
if (new)
memset(bh->b_data, 0, sbp->bsize);
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
}
hdrsize = blk->height ? sizeof(struct gfs2_meta_header) :
@@ -517,7 +517,7 @@ static void fix_jdatatree(struct gfs2_sbd *sbp, struct gfs2_inode *ip,
if (new)
memset(bh->b_data, 0, sbp->bsize);
if (h < (blk->height - 1))
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
}
if (amount > sbp->bsize - ptramt)
@@ -1855,9 +1855,9 @@ static int journ_space_to_rg(struct gfs2_sbd *sdp)
convert_bitmaps(sdp, rgd);
for (x = 0; x < rgd->ri.ri_length; x++) {
if (x)
- gfs2_meta_header_out(&mh, rgd->bh[x]);
+ gfs2_meta_header_out_bh(&mh, rgd->bh[x]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[x]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[x]);
}
} /* for each journal */
return error;
diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c
index 931b3c3..4856181 100644
--- a/gfs2/edit/hexedit.c
+++ b/gfs2/edit/hexedit.c
@@ -1106,7 +1106,7 @@ static void set_rgrp_flags(int rgnum, uint32_t new_flags, int modify, int full)
if (sbd.gfs1)
gfs_rgrp_out(&rg.rg1, rbh);
else
- gfs2_rgrp_out(&rg.rg2, rbh);
+ gfs2_rgrp_out_bh(&rg.rg2, rbh);
brelse(rbh);
} else {
if (full) {
@@ -2125,7 +2125,7 @@ static void process_field(const char *field, const char *nstr)
gfs2_rgrp_in(&rg, rbh);
if (setval) {
gfs2_rgrp_assignval(&rg, field, newval);
- gfs2_rgrp_out(&rg, rbh);
+ gfs2_rgrp_out_bh(&rg, rbh);
if (!termlines)
gfs2_rgrp_printval(&rg, field);
} else {
diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index e64ab3a..7d64b0a 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -314,7 +314,7 @@ static void check_rgrp_integrity(struct gfs2_sbd *sdp, struct rgrp_tree *rgd,
if (sdp->gfs1)
gfs_rgrp_out((struct gfs_rgrp *)&rgd->rg, rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
*this_rg_cleaned = 1;
log_info( _("The rgrp at %lld (0x%llx) was cleaned of %d "
"free metadata blocks.\n"),
@@ -336,7 +336,7 @@ static void check_rgrp_integrity(struct gfs2_sbd *sdp, struct rgrp_tree *rgd,
gfs_rgrp_out((struct gfs_rgrp *)&rgd->rg,
rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
*this_rg_fixed = 1;
log_err( _("The rgrp was fixed.\n"));
} else
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index d8193c5..5838fba 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -83,14 +83,14 @@ int check_n_fix_bitmap(struct gfs2_sbd *sdp, uint64_t blk,
gfs_rgrp_out((struct gfs_rgrp *)
&rgd->rg, rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
} else if (old_bitmap_state == GFS2_BLKST_FREE) {
rgd->rg.rg_free--;
if (sdp->gfs1)
gfs_rgrp_out((struct gfs_rgrp *)
&rgd->rg, rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
}
log_err( _("The bitmap was fixed.\n"));
} else {
diff --git a/gfs2/fsck/pass5.c b/gfs2/fsck/pass5.c
index 6c08e13..92861a1 100644
--- a/gfs2/fsck/pass5.c
+++ b/gfs2/fsck/pass5.c
@@ -274,7 +274,7 @@ static void update_rgrp(struct gfs2_sbd *sdp, struct rgrp_tree *rgp,
if (sdp->gfs1)
gfs_rgrp_out(gfs1rg, rgp->bh[0]);
else
- gfs2_rgrp_out(&rgp->rg, rgp->bh[0]);
+ gfs2_rgrp_out_bh(&rgp->rg, rgp->bh[0]);
} else
log_err( _("Resource group counts left inconsistent\n"));
}
diff --git a/gfs2/fsck/rgrepair.c b/gfs2/fsck/rgrepair.c
index c3467ba..27368a2 100644
--- a/gfs2/fsck/rgrepair.c
+++ b/gfs2/fsck/rgrepair.c
@@ -684,7 +684,7 @@ static int rewrite_rg_block(struct gfs2_sbd *sdp, struct rgrp_tree *rg,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_RB;
mh.mh_format = GFS2_FORMAT_RB;
- gfs2_meta_header_out(&mh, rg->bh[x]);
+ gfs2_meta_header_out_bh(&mh, rg->bh[x]);
} else {
if (sdp->gfs1)
memset(&rg->rg, 0, sizeof(struct gfs_rgrp));
@@ -698,7 +698,7 @@ static int rewrite_rg_block(struct gfs2_sbd *sdp, struct rgrp_tree *rg,
gfs_rgrp_out((struct gfs_rgrp *)&rg->rg,
rg->bh[x]);
else
- gfs2_rgrp_out(&rg->rg, rg->bh[x]);
+ gfs2_rgrp_out_bh(&rg->rg, rg->bh[x]);
}
brelse(rg->bh[x]);
rg->bh[x] = NULL;
diff --git a/gfs2/libgfs2/fs_geometry.c b/gfs2/libgfs2/fs_geometry.c
index e248f7c..e716127 100644
--- a/gfs2/libgfs2/fs_geometry.c
+++ b/gfs2/libgfs2/fs_geometry.c
@@ -217,9 +217,9 @@ void build_rgrps(struct gfs2_sbd *sdp, int do_write)
for (x = 0; x < bitblocks; x++) {
rl->bh[x] = bget(sdp, rl->start + x);
if (x)
- gfs2_meta_header_out(&mh, rl->bh[x]);
+ gfs2_meta_header_out_bh(&mh, rl->bh[x]);
else
- gfs2_rgrp_out(&rl->rg, rl->bh[x]);
+ gfs2_rgrp_out_bh(&rl->rg, rl->bh[x]);
}
}
diff --git a/gfs2/libgfs2/fs_ops.c b/gfs2/libgfs2/fs_ops.c
index b6c268d..4ea6dd3 100644
--- a/gfs2/libgfs2/fs_ops.c
+++ b/gfs2/libgfs2/fs_ops.c
@@ -182,7 +182,7 @@ found:
if (sdp->gfs1)
gfs_rgrp_out((struct gfs_rgrp *)rg, rl->bh[0]);
else
- gfs2_rgrp_out(rg, rl->bh[0]);
+ gfs2_rgrp_out_bh(rg, rl->bh[0]);
sdp->blks_alloced++;
*blkno = ri->ri_data0 + bn;
@@ -294,7 +294,7 @@ void unstuff_dinode(struct gfs2_inode *ip)
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_JD;
mh.mh_format = GFS2_FORMAT_JD;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
buffer_copy_tail(sdp, bh,
sizeof(struct gfs2_meta_header),
@@ -371,7 +371,7 @@ void build_height(struct gfs2_inode *ip, int height)
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_IN;
mh.mh_format = GFS2_FORMAT_IN;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
buffer_copy_tail(sdp, bh,
sizeof(struct gfs2_meta_header),
ip->i_bh, sizeof(struct gfs2_dinode));
@@ -494,7 +494,7 @@ void block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_IN;
mh.mh_format = GFS2_FORMAT_IN;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
} else {
if (*dblock == ip->i_di.di_num.no_addr)
bh = ip->i_bh;
@@ -688,7 +688,7 @@ int __gfs2_writei(struct gfs2_inode *ip, void *buf,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_JD;
mh.mh_format = GFS2_FORMAT_JD;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
}
} else {
if (dblock == ip->i_di.di_num.no_addr)
@@ -935,7 +935,7 @@ static void dir_split_leaf(struct gfs2_inode *dip, uint32_t lindex,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_LF;
mh.mh_format = GFS2_FORMAT_LF;
- gfs2_meta_header_out(&mh, nbh);
+ gfs2_meta_header_out_bh(&mh, nbh);
buffer_clear_tail(dip->i_sbd, nbh,
sizeof(struct gfs2_meta_header));
}
@@ -1197,7 +1197,7 @@ restart:
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_LF;
mh.mh_format = GFS2_FORMAT_LF;
- gfs2_meta_header_out(&mh, nbh);
+ gfs2_meta_header_out_bh(&mh, nbh);
leaf->lf_next = cpu_to_be64(bn);
@@ -1248,7 +1248,7 @@ static void dir_make_exhash(struct gfs2_inode *dip)
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_LF;
mh.mh_format = GFS2_FORMAT_LF;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
}
leaf = (struct gfs2_leaf *)bh->b_data;
@@ -1821,7 +1821,7 @@ void gfs2_free_block(struct gfs2_sbd *sdp, uint64_t block)
if (sdp->gfs1)
gfs_rgrp_out((struct gfs_rgrp *)&rgd->rg, rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
sdp->blks_alloced--;
}
}
@@ -1892,7 +1892,7 @@ int gfs2_freedi(struct gfs2_sbd *sdp, uint64_t diblock)
if (sdp->gfs1)
gfs_rgrp_out((struct gfs_rgrp *)&rgd->rg, rgd->bh[0]);
else
- gfs2_rgrp_out(&rgd->rg, rgd->bh[0]);
+ gfs2_rgrp_out_bh(&rgd->rg, rgd->bh[0]);
sdp->dinodes_alloced--;
return 0;
}
diff --git a/gfs2/libgfs2/gfs1.c b/gfs2/libgfs2/gfs1.c
index 06fa98f..89fb898 100644
--- a/gfs2/libgfs2/gfs1.c
+++ b/gfs2/libgfs2/gfs1.c
@@ -126,7 +126,7 @@ void gfs1_block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_IN;
mh.mh_format = GFS2_FORMAT_IN;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
} else {
if (*dblock == ip->i_di.di_num.no_addr)
bh = ip->i_bh;
@@ -225,7 +225,7 @@ int gfs1_writei(struct gfs2_inode *ip, char *buf, uint64_t offset,
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_JD;
mh.mh_format = GFS2_FORMAT_JD;
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
}
memcpy(bh->b_data + offset, buf + copied, amount);
@@ -381,7 +381,7 @@ void gfs_rgrp_out(struct gfs_rgrp *rgrp, struct gfs2_buffer_head *rbh)
{
struct gfs_rgrp *str = (struct gfs_rgrp *)rbh->b_data;
- gfs2_meta_header_out(&rgrp->rg_header, rbh);
+ gfs2_meta_header_out_bh(&rgrp->rg_header, rbh);
str->rg_flags = cpu_to_be32(rgrp->rg_flags);
str->rg_free = cpu_to_be32(rgrp->rg_free);
str->rg_useddi = cpu_to_be32(rgrp->rg_useddi);
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index c415745..1475227 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -785,14 +785,16 @@ extern void gfs2_inum_in(struct gfs2_inum *no, char *buf);
extern void gfs2_inum_out(struct gfs2_inum *no, char *buf);
extern void gfs2_meta_header_in(struct gfs2_meta_header *mh,
struct gfs2_buffer_head *bh);
-extern void gfs2_meta_header_out(struct gfs2_meta_header *mh,
- struct gfs2_buffer_head *bh);
+extern void gfs2_meta_header_out(const struct gfs2_meta_header *mh, char *buf);
+extern void gfs2_meta_header_out_bh(const struct gfs2_meta_header *mh,
+ struct gfs2_buffer_head *bh);
extern void gfs2_sb_in(struct gfs2_sb *sb, struct gfs2_buffer_head *bh);
extern void gfs2_sb_out(struct gfs2_sb *sb, struct gfs2_buffer_head *bh);
extern void gfs2_rindex_in(struct gfs2_rindex *ri, char *buf);
extern void gfs2_rindex_out(struct gfs2_rindex *ri, char *buf);
extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh);
-extern void gfs2_rgrp_out(struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh);
+extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, char *buf);
+extern void gfs2_rgrp_out_bh(const struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh);
extern void gfs2_quota_in(struct gfs2_quota *qu, char *buf);
extern void gfs2_quota_out(struct gfs2_quota *qu, char *buf);
extern void gfs2_dinode_in(struct gfs2_dinode *di,
diff --git a/gfs2/libgfs2/ondisk.c b/gfs2/libgfs2/ondisk.c
index 301d92d..4baacc7 100644
--- a/gfs2/libgfs2/ondisk.c
+++ b/gfs2/libgfs2/ondisk.c
@@ -72,16 +72,21 @@ void gfs2_meta_header_in(struct gfs2_meta_header *mh,
CPIN_32(mh, str, mh_format);
}
-void gfs2_meta_header_out(struct gfs2_meta_header *mh,
- struct gfs2_buffer_head *bh)
+void gfs2_meta_header_out(const struct gfs2_meta_header *mh, char *buf)
{
- struct gfs2_meta_header *str = (struct gfs2_meta_header *)bh->b_data;
+ struct gfs2_meta_header *str = (struct gfs2_meta_header *)buf;
CPOUT_32(mh, str, mh_magic);
CPOUT_32(mh, str, mh_type);
CPOUT_32(mh, str, mh_format);
str->__pad0 = 0;
str->__pad1 = 0;
+}
+
+void gfs2_meta_header_out_bh(const struct gfs2_meta_header *mh,
+ struct gfs2_buffer_head *bh)
+{
+ gfs2_meta_header_out(mh, bh->iov.iov_base);
bmodified(bh);
}
@@ -123,7 +128,7 @@ void gfs2_sb_out(struct gfs2_sb *sb, struct gfs2_buffer_head *bh)
{
struct gfs2_sb *str = (struct gfs2_sb *)bh->b_data;
- gfs2_meta_header_out(&sb->sb_header, bh);
+ gfs2_meta_header_out_bh(&sb->sb_header, bh);
CPOUT_32(sb, str, sb_fs_format);
CPOUT_32(sb, str, sb_multihost_format);
@@ -243,16 +248,21 @@ void gfs2_rgrp_in(struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh)
CPIN_08(rg, str, rg_reserved, 80);
}
-void gfs2_rgrp_out(struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh)
+void gfs2_rgrp_out(const struct gfs2_rgrp *rg, char *buf)
{
- struct gfs2_rgrp *str = (struct gfs2_rgrp *)bh->b_data;
+ struct gfs2_rgrp *str = (struct gfs2_rgrp *)buf;
- gfs2_meta_header_out(&rg->rg_header, bh);
+ gfs2_meta_header_out(&rg->rg_header, buf);
CPOUT_32(rg, str, rg_flags);
CPOUT_32(rg, str, rg_free);
CPOUT_32(rg, str, rg_dinodes);
CPOUT_08(rg, str, rg_reserved, 80);
+}
+
+void gfs2_rgrp_out_bh(const struct gfs2_rgrp *rg, struct gfs2_buffer_head *bh)
+{
+ gfs2_rgrp_out(rg, bh->iov.iov_base);
bmodified(bh);
}
@@ -330,7 +340,7 @@ void gfs2_dinode_out(struct gfs2_dinode *di, struct gfs2_buffer_head *bh)
{
struct gfs2_dinode *str = (struct gfs2_dinode *)bh->b_data;
- gfs2_meta_header_out(&di->di_header, bh);
+ gfs2_meta_header_out_bh(&di->di_header, bh);
gfs2_inum_out(&di->di_num, (char *)&str->di_num);
CPOUT_32(di, str, di_mode);
@@ -432,7 +442,7 @@ void gfs2_leaf_out(struct gfs2_leaf *lf, struct gfs2_buffer_head *bh)
{
struct gfs2_leaf *str = (struct gfs2_leaf *)bh->b_data;
- gfs2_meta_header_out(&lf->lf_header, bh);
+ gfs2_meta_header_out_bh(&lf->lf_header, bh);
CPOUT_16(lf, str, lf_depth);
CPOUT_16(lf, str, lf_entries);
CPOUT_32(lf, str, lf_dirent_format);
@@ -497,7 +507,7 @@ void gfs2_log_header_out(struct gfs2_log_header *lh,
{
struct gfs2_log_header *str = (struct gfs2_log_header *)bh->b_data;
- gfs2_meta_header_out(&lh->lh_header, bh);
+ gfs2_meta_header_out_bh(&lh->lh_header, bh);
CPOUT_64(lh, str, lh_sequence);
CPOUT_32(lh, str, lh_flags);
CPOUT_32(lh, str, lh_tail);
@@ -535,7 +545,7 @@ void gfs2_log_descriptor_out(struct gfs2_log_descriptor *ld,
{
struct gfs2_log_descriptor *str = (struct gfs2_log_descriptor *)bh->b_data;
- gfs2_meta_header_out(&ld->ld_header, bh);
+ gfs2_meta_header_out_bh(&ld->ld_header, bh);
CPOUT_32(ld, str, ld_type);
CPOUT_32(ld, str, ld_length);
CPOUT_32(ld, str, ld_data1);
diff --git a/gfs2/libgfs2/structures.c b/gfs2/libgfs2/structures.c
index f9231ca..c60f3e4 100644
--- a/gfs2/libgfs2/structures.c
+++ b/gfs2/libgfs2/structures.c
@@ -256,7 +256,7 @@ static int build_quota_change(struct gfs2_inode *per_node, unsigned int j)
return -1;
memset(bh->b_data, 0, sdp->bsize);
- gfs2_meta_header_out(&mh, bh);
+ gfs2_meta_header_out_bh(&mh, bh);
brelse(bh);
}
diff --git a/gfs2/mkfs/main_jadd.c b/gfs2/mkfs/main_jadd.c
index a4c6ca7..223dce7 100644
--- a/gfs2/mkfs/main_jadd.c
+++ b/gfs2/mkfs/main_jadd.c
@@ -342,7 +342,7 @@ add_qc(struct gfs2_sbd *sdp)
mh.mh_magic = GFS2_MAGIC;
mh.mh_type = GFS2_METATYPE_QC;
mh.mh_format = GFS2_FORMAT_QC;
- gfs2_meta_header_out(&mh, &dummy_bh);
+ gfs2_meta_header_out_bh(&mh, &dummy_bh);
for (x=0; x<blocks; x++) {
if (write(fd, buf, sdp->bsize) != sdp->bsize) {
--
1.8.1.2
More information about the Cluster-devel
mailing list