public inbox for cluster-cvs@sourceware.org help / color / mirror / Atom feed
From: Andrew Price <andyp@fedoraproject.org> To: cluster-cvs-relay@redhat.com Subject: cluster: STABLE3 - libgfs2: Remove 'die' calls from __get_sysfs Date: Thu, 19 Mar 2009 18:14:00 -0000 [thread overview] Message-ID: <20090319181358.DA19D120272@lists.fedorahosted.org> (raw) Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=b4fdfead0d853edbf37dfdb5b96649caa6dc33be Commit: b4fdfead0d853edbf37dfdb5b96649caa6dc33be Parent: fb37e5ab6be596f09bef22cdf28f68e4154c1d82 Author: Andrew Price <andy@andrewprice.me.uk> AuthorDate: Thu Mar 19 16:11:28 2009 +0000 Committer: Andrew Price <andy@andrewprice.me.uk> CommitterDate: Thu Mar 19 18:12:41 2009 +0000 libgfs2: Remove 'die' calls from __get_sysfs This patch removes the calls to die from __get_sysfs and adds error handling to it and its callers. To enable this, the prototype of get_sysfs_uint had to be changed so that error status can be returned. Callers to get_sysfs and get_sysfs_uint are also updated to handle error cases where appropriate. Signed-off-by: Andrew Price <andy@andrewprice.me.uk> --- gfs2/libgfs2/libgfs2.h | 2 +- gfs2/libgfs2/misc.c | 43 +++++++++++++++++++++++++++++++++---------- gfs2/tool/df.c | 44 +++++++++++++++++++++++++++++++------------- gfs2/tool/tune.c | 10 ++++++++-- 4 files changed, 73 insertions(+), 26 deletions(-) diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h index 2e79ad4..d8faf45 100644 --- a/gfs2/libgfs2/libgfs2.h +++ b/gfs2/libgfs2/libgfs2.h @@ -634,7 +634,7 @@ extern char *find_debugfs_mount(void); extern char *mp2fsname(char *mp); extern char *mp2fsname2(char *devname); extern char *get_sysfs(char *fsname, char *filename); -extern unsigned int get_sysfs_uint(char *fsname, char *filename); +extern int get_sysfs_uint(char *fsname, char *filename, unsigned int *val); extern int set_sysfs(char *fsname, char *filename, char *val); extern int is_fsname(char *name); diff --git a/gfs2/libgfs2/misc.c b/gfs2/libgfs2/misc.c index 320ce84..60b2d4f 100644 --- a/gfs2/libgfs2/misc.c +++ b/gfs2/libgfs2/misc.c @@ -216,10 +216,12 @@ static char *__get_sysfs(char *fsname, char *filename) fd = open(path, O_RDONLY); if (fd < 0) - die("can't open %s: %s\n", path, strerror(errno)); + return NULL; rv = read(fd, sysfs_buf, PAGE_SIZE); - if (rv < 0) - die("can't read from %s: %s\n", path, strerror(errno)); + if (rv < 0) { + close(fd); + return NULL; + } close(fd); return sysfs_buf; @@ -227,17 +229,30 @@ static char *__get_sysfs(char *fsname, char *filename) char *get_sysfs(char *fsname, char *filename) { - char *p = strchr(__get_sysfs(fsname, filename), '\n'); + char *s; + char *p; + + s = __get_sysfs(fsname, filename); + if (!s) + return NULL; + p = strchr(s, '\n'); if (p) *p = '\0'; return sysfs_buf; } -unsigned int get_sysfs_uint(char *fsname, char *filename) +int get_sysfs_uint(char *fsname, char *filename, unsigned int *val) { - unsigned int x; - sscanf(__get_sysfs(fsname, filename), "%u", &x); - return x; + char *s = __get_sysfs(fsname, filename); + int ret; + if (!s) + return -1; + ret = sscanf(s, "%u", val); + if (1 != ret) { + errno = ENOMSG; + return -1; + } + return 0; } int set_sysfs(char *fsname, char *filename, char *val) @@ -313,6 +328,7 @@ mp2fsname2(char *mp) char buffer[PATH_MAX], device_name[PATH_MAX]; int fsdump, fspass, ret, found = 0; char fspath[PATH_MAX], fsoptions[PATH_MAX], fstype[80]; + char *id; /* Take care of trailing '/' */ if (mp[strlen(mp) - 1] == '/') @@ -361,7 +377,10 @@ mp2fsname2(char *mp) if (de->d_name[0] == '.') continue; - if (strcmp(get_sysfs(de->d_name, "id"), device_id) == 0) { + id = get_sysfs(de->d_name, "id"); + if (!id) + continue; + if (strcmp(id, device_id) == 0) { fsname = strdup(de->d_name); break; } @@ -399,6 +418,7 @@ char *mp2fsname(char *mp) struct stat statbuf; DIR *d; struct dirent *de; + char *id; if (stat(mp, &statbuf)) return NULL; @@ -415,7 +435,10 @@ char *mp2fsname(char *mp) if (de->d_name[0] == '.') continue; - if (strcmp(get_sysfs(de->d_name, "id"), device_id) == 0) { + id = get_sysfs(de->d_name, "id"); + if (!id) + continue; + if (strcmp(id, device_id) == 0) { fsname = strdup(de->d_name); break; } diff --git a/gfs2/tool/df.c b/gfs2/tool/df.c index 7d2875d..c817813 100644 --- a/gfs2/tool/df.c +++ b/gfs2/tool/df.c @@ -147,22 +147,40 @@ do_df_one(char *path) printf(" Block size = %u\n", sbd.sd_sb.sb_bsize); printf(" Journals = %u\n", journals); printf(" Resource Groups = %"PRIu64"\n", rgrps); - printf(" Mounted lock proto = \"%s\"\n", - ((value = get_sysfs(fs, "args/lockproto"))[0]) - ? value : sbd.sd_sb.sb_lockproto); - printf(" Mounted lock table = \"%s\"\n", - ((value = get_sysfs(fs, "args/locktable"))[0]) - ? value : sbd.sd_sb.sb_locktable); + value = get_sysfs(fs, "args/lockproto"); + if (value) + printf(" Mounted lock proto = \"%s\"\n", + value[0] ? value : sbd.sd_sb.sb_lockproto); + else + printf(" Mounted lock proto = (Not found: %s)\n", + strerror(errno)); + + value = get_sysfs(fs, "args/locktable"); + if (value) + printf(" Mounted lock table = \"%s\"\n", + value[0] ? value : sbd.sd_sb.sb_locktable); + else + printf(" Mounted lock table = (Not found: %s)\n", + strerror(errno)); + printf(" Mounted host data = \"%s\"\n", get_sysfs(fs, "args/hostdata")); printf(" Journal number = %s\n", get_sysfs(fs, "lockstruct/jid")); - flags = get_sysfs_uint(fs, "lockstruct/flags"); - printf(" Lock module flags = %x", flags); - printf("\n"); - printf(" Local flocks = %s\n", - (get_sysfs_uint(fs, "args/localflocks")) ? "TRUE" : "FALSE"); - printf(" Local caching = %s\n", - (get_sysfs_uint(fs, "args/localcaching")) ? "TRUE" : "FALSE"); + + if (get_sysfs_uint(fs, "lockstruct/flags", &flags)) + printf(" Lock module flags = (Not found: %s)\n", strerror(errno)); + else + printf(" Lock module flags = %x\n", flags); + + if (get_sysfs_uint(fs, "args/localflocks", &flags)) + printf(" Lock flocks = (Not found: %s)\n", strerror(errno)); + else + printf(" Local flocks = %s\n", flags ? "TRUE" : "FALSE"); + + if (get_sysfs_uint(fs, "args/localcaching", &flags)) + printf(" Lock caching = (Not found: %s)\n", strerror(errno)); + else + printf(" Local caching = %s\n", flags ? "TRUE" : "FALSE"); /* Read the master statfs file */ if (mount_gfs2_meta(&sbd)) { diff --git a/gfs2/tool/tune.c b/gfs2/tool/tune.c index b4b24d8..29c529b 100644 --- a/gfs2/tool/tune.c +++ b/gfs2/tool/tune.c @@ -39,6 +39,7 @@ get_tune(int argc, char **argv) double ratio; unsigned int num, den; struct gfs2_sbd sbd; + char *value; if (optind == argc) die("Usage: gfs2_tool gettune <mountpoint>\n"); @@ -65,8 +66,13 @@ get_tune(int argc, char **argv) continue; snprintf(path, PATH_MAX - 1, "tune/%s", de->d_name); if (strcmp(de->d_name, "quota_scale") == 0) { - sscanf(get_sysfs(fs, "tune/quota_scale"), "%u %u", - &num, &den); + value = get_sysfs(fs, "tune/quota_scale"); + if (!value) { + printf("quota_scale = (Not found: %s)\n", + strerror(errno)); + continue; + } + sscanf(value, "%u %u", &num, &den); ratio = (double)num / den; printf("quota_scale = %.4f (%u, %u)\n", ratio, num, den);
reply other threads:[~2009-03-19 18:14 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20090319181358.DA19D120272@lists.fedorahosted.org \ --to=andyp@fedoraproject.org \ --cc=cluster-cvs-relay@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).