[Cluster-devel] [PATCH 2/3] libgfs2: Remove exit call from __gfs_inode_get
Andrew Price
anprice at redhat.com
Tue Aug 28 15:36:20 UTC 2012
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 <anprice at redhat.com>
---
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
More information about the Cluster-devel
mailing list