Instead of returning a -errno with the inode set via a passed in pointer, return the inode and use errno. This is more consistent and simplifies some calling code.
Signed-off-by: Andrew Price <anpr...@redhat.com> --- gfs2/convert/gfs2_convert.c | 7 +++---- gfs2/edit/hexedit.c | 2 +- gfs2/fsck/fs_recovery.c | 14 ++++++-------- gfs2/fsck/initialize.c | 18 +++++++++--------- gfs2/fsck/pass2.c | 8 ++++---- gfs2/glocktop/glocktop.c | 6 +++--- gfs2/libgfs2/check_fs_ops.c | 18 +++++++----------- gfs2/libgfs2/fs_ops.c | 38 +++++++++++++++++++------------------ gfs2/libgfs2/gfs2l.c | 2 +- gfs2/libgfs2/lang.c | 10 ++++++---- gfs2/libgfs2/libgfs2.h | 3 +-- tests/nukerg.c | 2 +- 12 files changed, 62 insertions(+), 66 deletions(-) diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index e0ca7c71..bf9985ae 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -2139,11 +2139,10 @@ static void copy_quotas(struct lgfs2_sbd *sdp) { struct lgfs2_inum inum; struct lgfs2_inode *oq_ip, *nq_ip; - int err; - err = lgfs2_lookupi(sdp->master_dir, "quota", 5, &nq_ip); - if (err) { - fprintf(stderr, _("Couldn't lookup new quota file: %d\n"), err); + nq_ip = lgfs2_lookupi(sdp->master_dir, "quota", 5); + if (nq_ip == NULL) { + perror(_("Failed to look up new quota file")); exit(1); } diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c index 553b15a5..c779433c 100644 --- a/gfs2/edit/hexedit.c +++ b/gfs2/edit/hexedit.c @@ -925,7 +925,7 @@ static void read_superblock(int fd) if (sbd.master_dir == NULL) { sbd.md.riinode = NULL; } else { - lgfs2_lookupi(sbd.master_dir, "rindex", 6, &sbd.md.riinode); + sbd.md.riinode = lgfs2_lookupi(sbd.master_dir, "rindex", 6); } } lgfs2_brelse(bh); diff --git a/gfs2/fsck/fs_recovery.c b/gfs2/fsck/fs_recovery.c index 8e572523..47433eac 100644 --- a/gfs2/fsck/fs_recovery.c +++ b/gfs2/fsck/fs_recovery.c @@ -789,10 +789,9 @@ int ji_update(struct lgfs2_sbd *sdp) return -1; } else { /* FIXME check snprintf return code */ - snprintf(journal_name, JOURNAL_NAME_SIZE, - "journal%u", i); - lgfs2_lookupi(sdp->md.jiinode, journal_name, - strlen(journal_name), &jip); + int len; + len = snprintf(journal_name, JOURNAL_NAME_SIZE, "journal%u", i); + jip = lgfs2_lookupi(sdp->md.jiinode, journal_name, len); sdp->md.journal[i] = jip; } } @@ -884,7 +883,7 @@ int init_jindex(struct fsck_cx *cx, int allow_ji_rebuild) if (sdp->gfs1) sdp->md.jiinode = lgfs2_inode_read(sdp, sdp->sd_jindex_di.in_addr); else - lgfs2_lookupi(sdp->master_dir, "jindex", 6, &sdp->md.jiinode); + sdp->md.jiinode = lgfs2_lookupi(sdp->master_dir, "jindex", 6); if (!sdp->md.jiinode) { int err; @@ -906,7 +905,7 @@ int init_jindex(struct fsck_cx *cx, int allow_ji_rebuild) log_crit(_("Error %d rebuilding jindex\n"), err); return err; } - lgfs2_lookupi(sdp->master_dir, "jindex", 6, &sdp->md.jiinode); + sdp->md.jiinode = lgfs2_lookupi(sdp->master_dir, "jindex", 6); } /* check for irrelevant entries in jindex. Can't use check_dir because @@ -938,8 +937,7 @@ int init_jindex(struct fsck_cx *cx, int allow_ji_rebuild) "index: Cannot continue.\n")); return error; } - lgfs2_lookupi(sdp->master_dir, "jindex", 6, - &sdp->md.jiinode); + sdp->md.jiinode = lgfs2_lookupi(sdp->master_dir, "jindex", 6); } } diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c index edb0b7fd..e8a8cb8b 100644 --- a/gfs2/fsck/initialize.c +++ b/gfs2/fsck/initialize.c @@ -597,7 +597,7 @@ static void lookup_per_node(struct fsck_cx *cx, int allow_rebuild) if (sdp->md.pinode) return; - lgfs2_lookupi(sdp->master_dir, "per_node", 8, &sdp->md.pinode); + sdp->md.pinode = lgfs2_lookupi(sdp->master_dir, "per_node", 8); if (sdp->md.pinode) return; if (!allow_rebuild) { @@ -618,7 +618,7 @@ static void lookup_per_node(struct fsck_cx *cx, int allow_rebuild) exit(FSCK_ERROR); } } - lgfs2_lookupi(sdp->master_dir, "per_node", 8, &sdp->md.pinode); + sdp->md.pinode = lgfs2_lookupi(sdp->master_dir, "per_node", 8); if (!sdp->md.pinode) { log_err( _("Unable to rebuild per_node; aborting.\n")); exit(FSCK_ERROR); @@ -799,7 +799,7 @@ static int init_system_inodes(struct fsck_cx *cx) *******************************************************************/ if (!sdp->gfs1) { /* Look for "inum" entry in master dinode */ - lgfs2_lookupi(sdp->master_dir, "inum", 4, &sdp->md.inum); + sdp->md.inum = lgfs2_lookupi(sdp->master_dir, "inum", 4); if (!sdp->md.inum) { if (!query(cx, _("The gfs2 system inum inode is missing. " "Okay to rebuild it? (y/n) "))) { @@ -850,7 +850,7 @@ static int init_system_inodes(struct fsck_cx *cx) goto fail; } } else - lgfs2_lookupi(sdp->master_dir, "statfs", 6, &sdp->md.statfs); + sdp->md.statfs = lgfs2_lookupi(sdp->master_dir, "statfs", 6); if (!sdp->gfs1 && !sdp->md.statfs) { if (!query(cx, _("The gfs2 system statfs inode is missing. " "Okay to rebuild it? (y/n) "))) { @@ -907,7 +907,7 @@ static int init_system_inodes(struct fsck_cx *cx) goto fail; } } else - lgfs2_lookupi(sdp->master_dir, "quota", 5, &sdp->md.qinode); + sdp->md.qinode = lgfs2_lookupi(sdp->master_dir, "quota", 5); if (!sdp->gfs1 && !sdp->md.qinode) { if (!query(cx, _("The gfs2 system quota inode is missing. " "Okay to rebuild it? (y/n) "))) { @@ -996,7 +996,7 @@ static void peruse_system_dinode(struct fsck_cx *cx, struct lgfs2_inode *ip) } else if (!sdp->gfs1 && is_dir(ip, sdp->gfs1)) { /* Check for a jindex dir entry. Only one system dir has a jindex: master */ - lgfs2_lookupi(ip, "jindex", 6, &child_ip); + child_ip = lgfs2_lookupi(ip, "jindex", 6); if (child_ip) { if (fix_md.jiinode || is_journal_copy(ip)) { lgfs2_inode_put(&child_ip); @@ -1011,7 +1011,7 @@ static void peruse_system_dinode(struct fsck_cx *cx, struct lgfs2_inode *ip) /* Check for a statfs_change0 dir entry. Only one system dir has a statfs_change: per_node, and its .. will be master. */ - lgfs2_lookupi(ip, "statfs_change0", 14, &child_ip); + child_ip = lgfs2_lookupi(ip, "statfs_change0", 14); if (child_ip) { lgfs2_inode_put(&child_ip); if (fix_md.pinode || is_journal_copy(ip)) @@ -1100,7 +1100,7 @@ static void peruse_user_dinode(struct fsck_cx *cx, struct lgfs2_inode *ip) return; } while (ip) { - lgfs2_lookupi(ip, "..", 2, &parent_ip); + parent_ip = lgfs2_lookupi(ip, "..", 2); if (parent_ip && parent_ip->i_num.in_addr == ip->i_num.in_addr) { log_warn(_("Found the root directory at: 0x%"PRIx64"\n"), ip->i_num.in_addr); @@ -1534,7 +1534,7 @@ static int init_rindex(struct fsck_cx *cx) if (sdp->gfs1) sdp->md.riinode = lgfs2_inode_read(sdp, sdp->sd_rindex_di.in_addr); else - lgfs2_lookupi(sdp->master_dir, "rindex", 6, &sdp->md.riinode); + sdp->md.riinode = lgfs2_lookupi(sdp->master_dir, "rindex", 6); if (sdp->md.riinode) return 0; diff --git a/gfs2/fsck/pass2.c b/gfs2/fsck/pass2.c index 6792f795..0c2e0146 100644 --- a/gfs2/fsck/pass2.c +++ b/gfs2/fsck/pass2.c @@ -1825,8 +1825,8 @@ static int check_pernode_for(struct fsck_cx *cx, int x, struct lgfs2_inode *pern int error, valid_size = 1; log_debug(_("Checking system file %s\n"), fn); - error = lgfs2_lookupi(pernode, fn, strlen(fn), &ip); - if (error) { + ip = lgfs2_lookupi(pernode, fn, strlen(fn)); + if (ip == NULL) { log_err(_("System file %s is missing.\n"), fn); if (!query(cx, _("Rebuild the system file? (y/n) "))) return 0; @@ -1867,8 +1867,8 @@ build_it: log_err(_("Error building %s\n"), fn); return -1; } - error = lgfs2_lookupi(pernode, fn, strlen(fn), &ip); - if (error) { + ip = lgfs2_lookupi(pernode, fn, strlen(fn)); + if (ip == NULL) { log_err(_("Error rebuilding %s.\n"), fn); return -1; } diff --git a/gfs2/glocktop/glocktop.c b/gfs2/glocktop/glocktop.c index f0053853..d35c841f 100644 --- a/gfs2/glocktop/glocktop.c +++ b/gfs2/glocktop/glocktop.c @@ -623,15 +623,15 @@ static const char *show_inode(const char *id, int fd, uint64_t block) if (S_ISDIR(ip->i_mode)) { struct lgfs2_inode *parent; uint64_t dirarray[256]; - int subdepth = 0, error; + int subdepth = 0; inode_type = "directory "; dirarray[0] = block; subdepth++; /* Backtrack the directory to its source */ while (1) { - error = lgfs2_lookupi(ip, "..", 2, &parent); - if (error) + parent = lgfs2_lookupi(ip, "..", 2); + if (parent == NULL) break; /* Stop at the root inode */ if (ip->i_num.in_addr == parent->i_num.in_addr) { diff --git a/gfs2/libgfs2/check_fs_ops.c b/gfs2/libgfs2/check_fs_ops.c index c93e11a4..abe31312 100644 --- a/gfs2/libgfs2/check_fs_ops.c +++ b/gfs2/libgfs2/check_fs_ops.c @@ -91,14 +91,13 @@ START_TEST(test_lookupi_bad_name_size) { struct lgfs2_inode idir; struct lgfs2_inode *ret = NULL; - int e; - e = lgfs2_lookupi(&idir, ".", 0, &ret); - ck_assert(e == -ENAMETOOLONG); + ret = lgfs2_lookupi(&idir, ".", 0); + ck_assert(errno == ENAMETOOLONG); ck_assert(ret == NULL); - e = lgfs2_lookupi(&idir, ".", GFS2_FNAMESIZE + 1, &ret); - ck_assert(e == -ENAMETOOLONG); + ret = lgfs2_lookupi(&idir, ".", GFS2_FNAMESIZE + 1); + ck_assert(errno == ENAMETOOLONG); ck_assert(ret == NULL); } END_TEST @@ -107,11 +106,9 @@ START_TEST(test_lookupi_dot) { struct lgfs2_inode idir; struct lgfs2_inode *ret; - int e; /* The contents of idir shouldn't matter, a "." lookup should just return it */ - e = lgfs2_lookupi(&idir, ".", 1, &ret); - ck_assert(e == 0); + ret = lgfs2_lookupi(&idir, ".", 1); ck_assert(ret == &idir); } END_TEST @@ -133,7 +130,6 @@ START_TEST(test_lookupi_dotdot) }; struct gfs2_dirent *dent = (void *)(buf + sizeof(struct gfs2_dinode)); struct lgfs2_inode *ret; - int e; /* "." */ dent->de_inum.no_addr = cpu_to_be64(42); @@ -153,8 +149,8 @@ START_TEST(test_lookupi_dotdot) *(char *)(dent + 1) = '.'; *((char *)(dent + 1) + 1) = '.'; - e = lgfs2_lookupi(&idir, "..", 2, &ret); - ck_assert(e == 0); + ret = lgfs2_lookupi(&idir, "..", 2); + ck_assert(ret != NULL); ck_assert(ret != &idir); lgfs2_inode_put(&ret); } diff --git a/gfs2/libgfs2/fs_ops.c b/gfs2/libgfs2/fs_ops.c index fb47e4f3..e72871ed 100644 --- a/gfs2/libgfs2/fs_ops.c +++ b/gfs2/libgfs2/fs_ops.c @@ -1509,7 +1509,7 @@ static struct lgfs2_inode *__createi(struct lgfs2_inode *dip, int err = 0; int is_dir; - lgfs2_lookupi(dip, filename, strlen(filename), &ip); + ip = lgfs2_lookupi(dip, filename, strlen(filename)); if (!ip) { struct lgfs2_inum parent = dip->i_num; @@ -1775,7 +1775,7 @@ int lgfs2_dir_search(struct lgfs2_inode *dip, const char *filename, int len, { int error; - if(!S_ISDIR(dip->i_mode) && !lgfs2_is_gfs_dir(dip)) + if (!S_ISDIR(dip->i_mode) && !lgfs2_is_gfs_dir(dip)) return -1; if (dip->i_flags & GFS2_DIF_EXHASH) @@ -1875,33 +1875,35 @@ int lgfs2_dirent_del(struct lgfs2_inode *dip, const char *filename, int len) } /** - * lgfs2_lookupi - Look up a filename in a directory and return its inode + * Look up a filename in a directory and return its inode, which can be the + * the directory inode when "." is looked up. * @dip: The directory to search * @name: The name of the inode to look for - * @ipp: Used to return the found inode if any + * @len: The length of name * - * Returns: 0 on success, -EXXXX on failure + * Returns: The inode on success or NULL on failure with errno set. */ -int lgfs2_lookupi(struct lgfs2_inode *dip, const char *filename, int len, - struct lgfs2_inode **ipp) +struct lgfs2_inode *lgfs2_lookupi(struct lgfs2_inode *dip, const char *filename, int len) { struct lgfs2_sbd *sdp = dip->i_sbd; - int error = 0; struct lgfs2_inum inum; + int error = 0; - *ipp = NULL; + errno = EINVAL; + if (dip == NULL) + return NULL; + errno = ENAMETOOLONG; if (!len || len > GFS2_FNAMESIZE) - return -ENAMETOOLONG; - if (gfs2_filecmp(filename, ".", 1)) { - *ipp = dip; - return 0; - } - error = lgfs2_dir_search(dip, filename, len, NULL, &inum); - if (!error) - *ipp = lgfs2_inode_read(sdp, inum.in_addr); + return NULL; - return error; + if (gfs2_filecmp(filename, ".", 1)) + return dip; + + error = lgfs2_dir_search(dip, filename, len, NULL, &inum); + if (error) + return NULL; + return lgfs2_inode_read(sdp, inum.in_addr); } /** diff --git a/gfs2/libgfs2/gfs2l.c b/gfs2/libgfs2/gfs2l.c index 3694a3d0..42f1b6c8 100644 --- a/gfs2/libgfs2/gfs2l.c +++ b/gfs2/libgfs2/gfs2l.c @@ -139,7 +139,7 @@ static int openfs(const char *path, struct lgfs2_sbd *sdp) } sdp->master_dir = lgfs2_inode_read(sdp, sdp->sd_meta_dir.in_addr); - lgfs2_lookupi(sdp->master_dir, "rindex", 6, &sdp->md.riinode); + sdp->md.riinode = lgfs2_lookupi(sdp->master_dir, "rindex", 6); sdp->fssize = sdp->device.length; if (sdp->md.riinode) { lgfs2_rindex_read(sdp, &count, &ok); diff --git a/gfs2/libgfs2/lang.c b/gfs2/libgfs2/lang.c index 96ba0146..1b959671 100644 --- a/gfs2/libgfs2/lang.c +++ b/gfs2/libgfs2/lang.c @@ -150,7 +150,6 @@ static void ast_string_unescape(char *str) static uint64_t ast_lookup_path(char *path, struct lgfs2_sbd *sbd) { - int err = 0; char *c = NULL; struct lgfs2_inode *ip, *iptmp; char *segment; @@ -160,16 +159,19 @@ static uint64_t ast_lookup_path(char *path, struct lgfs2_sbd *sbd) ip = lgfs2_inode_read(sbd, sbd->sd_root_dir.in_addr); while (ip != NULL) { + int err = 0; + if (segment == NULL) { // No more segments bn = ip->i_num.in_addr; lgfs2_inode_put(&ip); return bn; } ast_string_unescape(segment); - err = lgfs2_lookupi(ip, segment, strlen(segment), &iptmp); + iptmp = lgfs2_lookupi(ip, segment, strlen(segment)); + err = errno; lgfs2_inode_put(&ip); - if (err != 0) { - errno = -err; + if (iptmp == NULL) { + errno = err; break; } ip = iptmp; diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h index 6f8afe0d..bcbc5e47 100644 --- a/gfs2/libgfs2/libgfs2.h +++ b/gfs2/libgfs2/libgfs2.h @@ -522,8 +522,7 @@ extern void lgfs2_dirent2_del(struct lgfs2_inode *dip, struct lgfs2_buffer_head struct gfs2_dirent *prev, struct gfs2_dirent *cur); extern int lgfs2_dir_search(struct lgfs2_inode *dip, const char *filename, int len, unsigned int *type, struct lgfs2_inum *inum); -extern int lgfs2_lookupi(struct lgfs2_inode *dip, const char *filename, int len, - struct lgfs2_inode **ipp); +extern struct lgfs2_inode *lgfs2_lookupi(struct lgfs2_inode *dip, const char *filename, int len); extern int lgfs2_dir_add(struct lgfs2_inode *dip, const char *filename, int len, struct lgfs2_inum *inum, unsigned int type); extern int lgfs2_dirent_del(struct lgfs2_inode *dip, const char *filename, int name_len); diff --git a/tests/nukerg.c b/tests/nukerg.c index a4c25a81..09b6dfd7 100644 --- a/tests/nukerg.c +++ b/tests/nukerg.c @@ -250,7 +250,7 @@ static lgfs2_rgrps_t read_rindex(struct lgfs2_sbd *sdp) unsigned rgcount; unsigned i; - lgfs2_lookupi(sdp->master_dir, "rindex", 6, &sdp->md.riinode); + sdp->md.riinode = lgfs2_lookupi(sdp->master_dir, "rindex", 6); if (sdp->md.riinode == NULL) { perror("Failed to look up rindex"); return NULL; -- 2.39.0