From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Wed, 12 Jan 2022 19:26:40 +0000 Subject: [Cluster-devel] [PATCH 08/18] libgfs2: Return the inode from build_inum() In-Reply-To: <20220112192650.1426415-1-anprice@redhat.com> References: <20220112192650.1426415-1-anprice@redhat.com> Message-ID: <20220112192650.1426415-9-anprice@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit This allows the caller to call inode_put() when it's convenient and also allows the debug message printing to be moved out of the function. fsck.gfs2 passes the function by reference so it needs a shim until the other builder functions can be given the same signature. Signed-off-by: Andrew Price --- gfs2/convert/gfs2_convert.c | 5 ++--- gfs2/fsck/initialize.c | 25 ++++++++++++------------- gfs2/fsck/pass1.c | 11 ++++++++++- gfs2/libgfs2/libgfs2.h | 2 +- gfs2/libgfs2/structures.c | 14 ++------------ gfs2/mkfs/main_mkfs.c | 9 ++++++--- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index 0953d2a7..210528c9 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -2343,13 +2343,12 @@ int main(int argc, char **argv) exit(-1); } /* Create the empty inode number file */ - error = build_inum(&sb2); /* Does not do inode_put */ - if (error) { + sb2.md.inum = build_inum(&sb2); /* Does not do inode_put */ + if (sb2.md.inum == NULL) { log_crit(_("Error building inum inode: %s\n"), strerror(error)); exit(-1); } - gfs2_lookupi(sb2.master_dir, "inum", 4, &sb2.md.inum); /* Create the statfs file */ error = build_statfs(&sb2); /* Does not do inode_put */ if (error) { diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c index b9db79b0..a46d3ecb 100644 --- a/gfs2/fsck/initialize.c +++ b/gfs2/fsck/initialize.c @@ -504,12 +504,14 @@ static int rebuild_master(struct gfs2_sbd *sdp) exit(FSCK_ERROR); } } else { - err = build_inum(sdp); - if (err) { - log_crit(_("Error %d building inum inode\n"), err); + sdp->md.inum = build_inum(sdp); + if (sdp->md.inum == NULL) { + log_crit(_("Error building inum inode: %s\n"), strerror(errno)); exit(FSCK_ERROR); } - gfs2_lookupi(sdp->master_dir, "inum", 4, &sdp->md.inum); + /* Write the inode but don't free it, to avoid doing an extra lookup */ + lgfs2_dinode_out(sdp->md.inum, sdp->md.inum->i_bh->b_data); + bwrite(sdp->md.inum->i_bh); } if (fix_md.statfs) { @@ -798,17 +800,14 @@ static int init_system_inodes(struct gfs2_sbd *sdp) "a valid inum file; aborting.\n")); goto fail; } - err = build_inum(sdp); - if (err) { - log_crit(_("Error %d rebuilding inum inode\n"), - err); + sdp->md.inum = build_inum(sdp); + if (sdp->md.inum == NULL) { + log_crit(_("Error rebuilding inum inode: %s\n"), strerror(errno)); exit(FSCK_ERROR); } - gfs2_lookupi(sdp->master_dir, "inum", 4, - &sdp->md.inum); - if (!sdp->md.inum) { - log_crit(_("System inum inode was not rebuilt." - " Aborting.\n")); + lgfs2_dinode_out(sdp->md.inum, sdp->md.inum->i_bh->b_data); + if (bwrite(sdp->md.inum->i_bh) != 0) { + log_crit(_("System inum inode was not rebuilt. Aborting.\n")); goto fail; } } diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c index a016f2a4..acd9929f 100644 --- a/gfs2/fsck/pass1.c +++ b/gfs2/fsck/pass1.c @@ -1619,6 +1619,15 @@ int build_per_node(struct gfs2_sbd *sdp) return 0; } +static int fsck_build_inum(struct gfs2_sbd *sdp) +{ + struct gfs2_inode *ip = build_inum(sdp); + if (ip == NULL) + return -1; + inode_put(&ip); + return 0; +} + static int check_system_inodes(struct gfs2_sbd *sdp) { int journal_count; @@ -1648,7 +1657,7 @@ static int check_system_inodes(struct gfs2_sbd *sdp) return -1; } if (!sdp->gfs1 && - check_system_inode(sdp, &sdp->md.inum, "inum", build_inum, 0, + check_system_inode(sdp, &sdp->md.inum, "inum", fsck_build_inum, 0, sdp->master_dir, 1)) { stack; return -1; diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h index a928e1ab..aea2b676 100644 --- a/gfs2/libgfs2/libgfs2.h +++ b/gfs2/libgfs2/libgfs2.h @@ -777,7 +777,7 @@ extern int lgfs2_sb_write(const struct gfs2_sbd *sdp, int fd); extern int build_journal(struct gfs2_sbd *sdp, int j, struct gfs2_inode *jindex); extern struct gfs2_inode *lgfs2_build_jindex(struct gfs2_inode *metafs, struct lgfs2_inum *jnls, size_t nmemb); -extern int build_inum(struct gfs2_sbd *sdp); +extern struct gfs2_inode *build_inum(struct gfs2_sbd *sdp); extern int build_statfs(struct gfs2_sbd *sdp); extern int build_rindex(struct gfs2_sbd *sdp); extern int build_quota(struct gfs2_sbd *sdp); diff --git a/gfs2/libgfs2/structures.c b/gfs2/libgfs2/structures.c index 1d4635ab..69cce676 100644 --- a/gfs2/libgfs2/structures.c +++ b/gfs2/libgfs2/structures.c @@ -350,23 +350,13 @@ struct gfs2_inode *build_quota_change(struct gfs2_inode *per_node, unsigned int return ip; } -int build_inum(struct gfs2_sbd *sdp) +struct gfs2_inode *build_inum(struct gfs2_sbd *sdp) { struct gfs2_inode *ip; ip = createi(sdp->master_dir, "inum", S_IFREG | 0600, GFS2_DIF_SYSTEM | GFS2_DIF_JDATA); - if (ip == NULL) { - return errno; - } - - if (cfg_debug) { - printf("\nInum Inode:\n"); - lgfs2_dinode_print(ip->i_bh->b_data); - } - - inode_put(&ip); - return 0; + return ip; } int build_statfs(struct gfs2_sbd *sdp) diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c index c4415ee3..0aff266f 100644 --- a/gfs2/mkfs/main_mkfs.c +++ b/gfs2/mkfs/main_mkfs.c @@ -1296,12 +1296,15 @@ int main(int argc, char *argv[]) if (error != 0) exit(1); - error = build_inum(&sbd); - if (error) { + sbd.md.inum = build_inum(&sbd); + if (sbd.md.inum == NULL) { fprintf(stderr, _("Error building '%s': %s\n"), "inum", strerror(errno)); exit(EXIT_FAILURE); } - gfs2_lookupi(sbd.master_dir, "inum", 4, &sbd.md.inum); + if (opts.debug) { + printf("\nInum Inode:\n"); + lgfs2_dinode_print(sbd.md.inum->i_bh->b_data); + } error = build_statfs(&sbd); if (error) { fprintf(stderr, _("Error building '%s': %s\n"), "statfs", strerror(errno)); -- 2.34.1