From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Tue, 28 Aug 2012 16:36:20 +0100 Subject: [Cluster-devel] [PATCH 2/3] libgfs2: Remove exit call from __gfs_inode_get In-Reply-To: <1346168181-7603-1-git-send-email-anprice@redhat.com> References: <1346168181-7603-1-git-send-email-anprice@redhat.com> Message-ID: <1346168181-7603-2-git-send-email-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 Return NULL instead of exiting on a failed calloc() and handle the error at all call points. Also update the names of gfs_inode_{get,read} with the lgfs2_ prefix. Signed-off-by: Andrew Price --- gfs2/convert/gfs2_convert.c | 12 ++++++++++-- gfs2/edit/savemeta.c | 30 +++++++++++++++++------------- gfs2/fsck/metawalk.c | 4 ++-- gfs2/libgfs2/gfs1.c | 7 +++---- gfs2/libgfs2/libgfs2.h | 4 ++-- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index 51ec256..b5d993d 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -895,7 +895,11 @@ static int adjust_inode(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh) struct inode_block *fixdir; int inode_was_gfs1; - inode = gfs_inode_get(sbp, bh); + inode = lgfs2_gfs_inode_get(sbp, bh); + if (inode == NULL) { + log_crit(_("Error reading inode: %s\n"), strerror(errno)); + return -1; + } inode_was_gfs1 = (inode->i_di.di_num.no_formal_ino == inode->i_di.di_num.no_addr); @@ -1591,7 +1595,11 @@ static int init(struct gfs2_sbd *sbp) } /* get gfs1 rindex inode - gfs1's rindex inode ptr became __pad2 */ gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_rindex_di); - sbp->md.riinode = gfs_inode_read(sbp, inum.no_addr); + sbp->md.riinode = lgfs2_gfs_inode_read(sbp, inum.no_addr); + if (sbp->md.riinode == NULL) { + log_crit(_("Could not read resource group index: %s\n"), strerror(errno)); + exit(-1); + } /* get gfs1 jindex inode - gfs1's journal index inode ptr became master */ gfs2_inum_in(&inum, (char *)&raw_gfs1_ondisk_sb.sb_jindex_di); sbp->md.jiinode = lgfs2_inode_read(sbp, inum.no_addr); diff --git a/gfs2/edit/savemeta.c b/gfs2/edit/savemeta.c index 77165a7..f35c35d 100644 --- a/gfs2/edit/savemeta.c +++ b/gfs2/edit/savemeta.c @@ -147,13 +147,13 @@ static int get_gfs_struct_info(struct gfs2_buffer_head *lbh, int *block_type, break; case GFS2_METATYPE_DI: /* 4 (disk inode) */ if (sbd.gfs1) { - inode = gfs_inode_get(&sbd, lbh); + inode = lgfs2_gfs_inode_get(&sbd, lbh); } else { inode = lgfs2_inode_get(&sbd, lbh); - if (inode == NULL) { - fprintf(stderr, "Out of memory\n"); - exit(-1); - } + } + if (inode == NULL) { + perror("Error reading inode"); + exit(-1); } if (S_ISDIR(inode->i_di.di_mode) || (sbd.gfs1 && inode->i_di.__pad1 == GFS_FILE_DIR)) @@ -488,14 +488,14 @@ static void save_inode_data(struct metafd *mfd) for (i = 0; i < GFS2_MAX_META_HEIGHT; i++) osi_list_init(&metalist[i]); metabh = bread(&sbd, block); - if (sbd.gfs1) - inode = gfs_inode_get(&sbd, metabh); - else { + if (sbd.gfs1) { + inode = lgfs2_gfs_inode_get(&sbd, metabh); + } else { inode = lgfs2_inode_get(&sbd, metabh); - if (inode == NULL) { - fprintf(stderr, "Failed to read inode: %s\n", strerror(errno)); - exit(-1); - } + } + if (inode == NULL) { + perror("Failed to read inode"); + exit(-1); } height = inode->i_di.di_height; /* If this is a user inode, we don't follow to the file height. @@ -611,8 +611,12 @@ static void get_journal_inode_blocks(void) struct gfs_jindex ji; char jbuf[sizeof(struct gfs_jindex)]; - j_inode = gfs_inode_read(&sbd, + j_inode = lgfs2_gfs_inode_read(&sbd, sbd1->sb_jindex_di.no_addr); + if (j_inode == NULL) { + fprintf(stderr, "Error reading journal inode: %s\n", strerror(errno)); + return; + } amt = gfs2_readi(j_inode, (void *)&jbuf, journal * sizeof(struct gfs_jindex), sizeof(struct gfs_jindex)); diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c index aa4f0b5..24de901 100644 --- a/gfs2/fsck/metawalk.c +++ b/gfs2/fsck/metawalk.c @@ -226,7 +226,7 @@ struct gfs2_inode *fsck_load_inode(struct gfs2_sbd *sdp, uint64_t block) if (ip) return ip; if (sdp->gfs1) - return gfs_inode_read(sdp, block); + return lgfs2_gfs_inode_read(sdp, block); return lgfs2_inode_read(sdp, block); } @@ -242,7 +242,7 @@ struct gfs2_inode *fsck_inode_get(struct gfs2_sbd *sdp, return sysip; if (sdp->gfs1) - return gfs_inode_get(sdp, bh); + return lgfs2_gfs_inode_get(sdp, bh); return lgfs2_inode_get(sdp, bh); } diff --git a/gfs2/libgfs2/gfs1.c b/gfs2/libgfs2/gfs1.c index d6f8794..06fa98f 100644 --- a/gfs2/libgfs2/gfs1.c +++ b/gfs2/libgfs2/gfs1.c @@ -293,8 +293,7 @@ static struct gfs2_inode *__gfs_inode_get(struct gfs2_sbd *sdp, ip = calloc(1, sizeof(struct gfs2_inode)); if (ip == NULL) { - fprintf(stderr, "Out of memory in %s\n", __FUNCTION__); - exit(-1); + return NULL; } ip->bh_owned = 0; @@ -332,13 +331,13 @@ static struct gfs2_inode *__gfs_inode_get(struct gfs2_sbd *sdp, return ip; } -struct gfs2_inode *gfs_inode_get(struct gfs2_sbd *sdp, +struct gfs2_inode *lgfs2_gfs_inode_get(struct gfs2_sbd *sdp, struct gfs2_buffer_head *bh) { return __gfs_inode_get(sdp, bh, 0); } -struct gfs2_inode *gfs_inode_read(struct gfs2_sbd *sdp, uint64_t di_addr) +struct gfs2_inode *lgfs2_gfs_inode_read(struct gfs2_sbd *sdp, uint64_t di_addr) { return __gfs_inode_get(sdp, NULL, di_addr); } diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h index 9b128ff..74ee2d0 100644 --- a/gfs2/libgfs2/libgfs2.h +++ b/gfs2/libgfs2/libgfs2.h @@ -646,9 +646,9 @@ extern void gfs1_block_map(struct gfs2_inode *ip, uint64_t lblock, int *new, extern int gfs1_writei(struct gfs2_inode *ip, char *buf, uint64_t offset, unsigned int size); extern int gfs1_ri_update(struct gfs2_sbd *sdp, int fd, int *rgcount, int quiet); -extern struct gfs2_inode *gfs_inode_get(struct gfs2_sbd *sdp, +extern struct gfs2_inode *lgfs2_gfs_inode_get(struct gfs2_sbd *sdp, struct gfs2_buffer_head *bh); -extern struct gfs2_inode *gfs_inode_read(struct gfs2_sbd *sdp, +extern struct gfs2_inode *lgfs2_gfs_inode_read(struct gfs2_sbd *sdp, uint64_t di_addr); extern void gfs_jindex_in(struct gfs_jindex *jindex, char *buf); extern void gfs_rgrp_in(struct gfs_rgrp *rg, struct gfs2_buffer_head *bh); -- 1.7.11.4