Hi, Looks good to me,
Steve. On Thu, 2009-03-12 at 16:08 +0000, Andrew Price wrote: > This patch removes the calls to 'die' from mount_gfs2_meta and adds > error reporting: It now returns -1 with errno set. All callers of this > function are updated to check for errors. > > The static function lock_for_admin gets similar treatment as > mount_gfs2_meta is its only caller. > > Signed-off-by: Andrew Price <[email protected]> > --- > gfs2/libgfs2/libgfs2.h | 2 +- > gfs2/libgfs2/misc.c | 20 ++++++++++---------- > gfs2/mkfs/main_grow.c | 6 +++++- > gfs2/mkfs/main_jadd.c | 6 +++++- > gfs2/quota/check.c | 12 ++++++++++-- > gfs2/quota/main.c | 24 ++++++++++++++++++++---- > gfs2/tool/df.c | 6 +++++- > gfs2/tool/misc.c | 7 ++++++- > 8 files changed, 62 insertions(+), 21 deletions(-) > > diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h > index a25cf7b..a4ccf60 100644 > --- a/gfs2/libgfs2/libgfs2.h > +++ b/gfs2/libgfs2/libgfs2.h > @@ -628,7 +628,7 @@ extern void compute_constants(struct gfs2_sbd *sdp); > extern int find_gfs2_meta(struct gfs2_sbd *sdp); > extern int dir_exists(const char *dir); > extern int check_for_gfs2(struct gfs2_sbd *sdp); > -extern void mount_gfs2_meta(struct gfs2_sbd *sdp); > +extern int mount_gfs2_meta(struct gfs2_sbd *sdp); > extern void cleanup_metafs(struct gfs2_sbd *sdp); > extern char *find_debugfs_mount(void); > extern char *mp2fsname(char *mp); > diff --git a/gfs2/libgfs2/misc.c b/gfs2/libgfs2/misc.c > index 21329f3..7a1c157 100644 > --- a/gfs2/libgfs2/misc.c > +++ b/gfs2/libgfs2/misc.c > @@ -148,7 +148,7 @@ int check_for_gfs2(struct gfs2_sbd *sdp) > return -1; > } > > -static void lock_for_admin(struct gfs2_sbd *sdp) > +static int lock_for_admin(struct gfs2_sbd *sdp) > { > int error; > > @@ -157,18 +157,18 @@ static void lock_for_admin(struct gfs2_sbd *sdp) > > sdp->metafs_fd = open(sdp->metafs_path, O_RDONLY | O_NOFOLLOW); > if (sdp->metafs_fd < 0) > - die("can't open %s: %s\n", > - sdp->metafs_path, strerror(errno)); > + return -1; > > error = flock(sdp->metafs_fd, LOCK_EX); > if (error) > - die("can't flock %s: %s\n", sdp->metafs_path, strerror(errno)); > + return -1; > if (sdp->debug) > printf("Got it.\n"); > + return 0; > } > > > -void mount_gfs2_meta(struct gfs2_sbd *sdp) > +int mount_gfs2_meta(struct gfs2_sbd *sdp) > { > int ret; > > @@ -176,16 +176,16 @@ void mount_gfs2_meta(struct gfs2_sbd *sdp) > snprintf(sdp->metafs_path, PATH_MAX - 1, "/tmp/.gfs2meta.XXXXXX"); > > if(!mkdtemp(sdp->metafs_path)) > - die("Couldn't create %s : %s\n", sdp->metafs_path, > - strerror(errno)); > + return -1; > > ret = mount(sdp->path_name, sdp->metafs_path, "gfs2meta", 0, NULL); > if (ret) { > rmdir(sdp->metafs_path); > - die("Couldn't mount %s : %s\n", sdp->metafs_path, > - strerror(errno)); > + return -1; > } > - lock_for_admin(sdp); > + if (lock_for_admin(sdp)) > + return -1; > + return 0; > } > > void cleanup_metafs(struct gfs2_sbd *sdp) > diff --git a/gfs2/mkfs/main_grow.c b/gfs2/mkfs/main_grow.c > index bb2a587..0e18d1a 100644 > --- a/gfs2/mkfs/main_grow.c > +++ b/gfs2/mkfs/main_grow.c > @@ -295,7 +295,11 @@ main_grow(int argc, char *argv[]) > die("gfs: Error reading superblock.\n"); > > fix_device_geometry(sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > sprintf(rindex_name, "%s/rindex", sdp->metafs_path); > rindex_fd = open(rindex_name, (test ? O_RDONLY : O_RDWR)); > diff --git a/gfs2/mkfs/main_jadd.c b/gfs2/mkfs/main_jadd.c > index 8d96886..3f574de 100644 > --- a/gfs2/mkfs/main_jadd.c > +++ b/gfs2/mkfs/main_jadd.c > @@ -507,7 +507,11 @@ main_jadd(int argc, char *argv[]) > > gather_info(sdp); > > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > compute_constants(sdp); > find_current_journals(sdp); > diff --git a/gfs2/quota/check.c b/gfs2/quota/check.c > index 1c577b1..0352fa9 100644 > --- a/gfs2/quota/check.c > +++ b/gfs2/quota/check.c > @@ -188,7 +188,11 @@ read_quota_file(struct gfs2_sbd *sdp, commandline_t > *comline, > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > @@ -467,7 +471,11 @@ set_list(struct gfs2_sbd *sdp, commandline_t *comline, > int user, > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > diff --git a/gfs2/quota/main.c b/gfs2/quota/main.c > index 5cdf118..374b5ea 100644 > --- a/gfs2/quota/main.c > +++ b/gfs2/quota/main.c > @@ -515,7 +515,11 @@ do_reset(struct gfs2_sbd *sdp, commandline_t *comline) > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > @@ -579,7 +583,11 @@ do_list(struct gfs2_sbd *sdp, commandline_t *comline) > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > @@ -673,7 +681,11 @@ do_get_one(struct gfs2_sbd *sdp, commandline_t *comline, > char *filesystem) > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > @@ -845,7 +857,11 @@ do_set(struct gfs2_sbd *sdp, commandline_t *comline) > exit(-1); > } > read_superblock(&sdp->sd_sb, sdp); > - mount_gfs2_meta(sdp); > + if (mount_gfs2_meta(sdp)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > strcpy(quota_file, sdp->metafs_path); > strcat(quota_file, "/quota"); > diff --git a/gfs2/tool/df.c b/gfs2/tool/df.c > index 207fac7..7d2875d 100644 > --- a/gfs2/tool/df.c > +++ b/gfs2/tool/df.c > @@ -165,7 +165,11 @@ do_df_one(char *path) > (get_sysfs_uint(fs, "args/localcaching")) ? "TRUE" : "FALSE"); > > /* Read the master statfs file */ > - mount_gfs2_meta(&sbd); > + if (mount_gfs2_meta(&sbd)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > sprintf(statfs_fn, "%s/statfs", sbd.metafs_path); > statfs_fd = open(statfs_fn, O_RDONLY); > diff --git a/gfs2/tool/misc.c b/gfs2/tool/misc.c > index f23ec82..7d3a510 100644 > --- a/gfs2/tool/misc.c > +++ b/gfs2/tool/misc.c > @@ -328,7 +328,12 @@ print_journals(int argc, char **argv) > if (sbd.device_fd < 0) > die("can't open device %s: %s\n", > sbd.device_name, strerror(errno)); > - mount_gfs2_meta(&sbd); > + > + if (mount_gfs2_meta(&sbd)) { > + fprintf(stderr, "Error mounting GFS2 metafs: %s\n", > + strerror(errno)); > + exit(-1); > + } > > sprintf(jindex_name, "%s/jindex", sbd.metafs_path); > jindex = opendir(jindex_name);
