Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=7cf39e6f197... Commit: 7cf39e6f1979e6902c7c54a6b510e2ef30c46f40 Parent: 915fb43e43cc1e3d8f8ba2c7295a0aaa10368882 Author: Andrew Price anprice@redhat.com AuthorDate: Thu Feb 21 20:25:52 2013 +0000 Committer: Andrew Price anprice@redhat.com CommitterDate: Fri Feb 22 15:17:03 2013 +0000
libgfs2: Make gfs2_rgrp_out accept char buffers
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@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) {