[Cluster-devel] cluster/gfs2 man/gfs2_tool.8 tool/df.c tool/main.c
rpeterso at sourceware.org
rpeterso at sourceware.org
Wed Nov 14 17:18:40 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL5
Changes by: rpeterso at sourceware.org 2007-11-14 17:18:39
Modified files:
gfs2/man : gfs2_tool.8
gfs2/tool : df.c main.c
Log message:
Resolves: bz 352841: GFS2: Evaluate and implement missing gfs2_tool
features
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/man/gfs2_tool.8.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/tool/df.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.1&r2=1.7.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/tool/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.3&r2=1.4.2.4
--- cluster/gfs2/man/gfs2_tool.8 2007/11/07 21:15:13 1.3.2.3
+++ cluster/gfs2/man/gfs2_tool.8 2007/11/14 17:18:39 1.3.2.4
@@ -21,10 +21,10 @@
\fBcounters\fP \fIMountPoint\fR [-c]
Print out statistics about a filesystem. If -c is used, gfs2_tool continues
to run printing out the stats once a second.
-.\".TP
-.\"\fBdf\fP \fIMountPoint\fR
-.\"Print out a space usage summary of a given filesystem. The information
-.\"printed is more detailed than a standard "df".
+.TP
+\fBdf\fP \fIMountPoint\fR
+Print out a space usage summary of a given filesystem. The information
+printed is more detailed than a standard "df".
.\".TP
.\"\fBflush\fP \fIFile\fR
.\"Sync out any dirty data for a file and drop its lock.
--- cluster/gfs2/tool/df.c 2007/10/25 14:14:47 1.7.2.1
+++ cluster/gfs2/tool/df.c 2007/11/14 17:18:39 1.7.2.2
@@ -31,9 +31,6 @@
#include "gfs2_tool.h"
#include "libgfs2.h"
-#define SIZE (65536)
-
-#if GFS2_TOOL_FEATURE_IMPLEMENTED
/**
* do_df_one - print out information about one filesystem
* @path: the path to the filesystem
@@ -43,98 +40,68 @@
static void
do_df_one(char *path)
{
- struct gfs2_ioctl gi;
- /* char stat_gfs2[SIZE]; */
- /* unsigned int percentage; */
- struct gfs2_sb sb;
- struct gfs2_dinode ji, ri;
- unsigned int journals = 0;
+ unsigned int percentage;
+ unsigned int journals;
uint64_t rgrps;
unsigned int flags;
- char *fs, *value;
- int error;
+ char *value, *fs;
+ int x, statfs_fd;
struct gfs2_sbd sbd;
+ char buf[GFS2_DEFAULT_BSIZE], statfs_fn[PATH_MAX];
+ struct gfs2_statfs_change sc;
+ memset(&sbd, 0, sizeof(struct gfs2_sbd));
sbd.path_name = path;
check_for_gfs2(&sbd);
+ fs = mp2fsname(sbd.path_name);
- sbd.device_fd = open(path, O_RDONLY);
+ sbd.device_fd = open(sbd.device_name, O_RDONLY);
if (sbd.device_fd < 0)
die("can't open %s: %s\n", path, strerror(errno));
- fs = mp2fsname(path);
-
- /*
- strncpy(stat_gfs2, __get_sysfs(fs, "statfs"), SIZE);
- stat_gfs2[SIZE - 1] = '\0';
- */
-
- {
- char *argv[] = { "get_super" };
+ sbd.bsize = GFS2_DEFAULT_BSIZE;
+ sbd.jsize = GFS2_DEFAULT_JSIZE;
+ sbd.rgsize = GFS2_DEFAULT_RGSIZE;
+ sbd.utsize = GFS2_DEFAULT_UTSIZE;
+ sbd.qcsize = GFS2_DEFAULT_QCSIZE;
+ osi_list_init(&sbd.rglist);
+ osi_list_init(&sbd.buf_list);
+ for (x = 0; x < BUF_HASH_SIZE; x++)
+ osi_list_init(&sbd.buf_hash[x]);
+ do_lseek(sbd.device_fd, 0x10 * sbd.bsize);
+ do_read(sbd.device_fd, buf, sbd.bsize); /* read in the superblock */
- gi.gi_argc = 1;
- gi.gi_argv = argv;
- gi.gi_data = (char *)&sb;
- gi.gi_size = sizeof(struct gfs2_sb);
-
- error = ioctl(sbd.device_fd, GFS2_IOCTL_SUPER, &gi);
- if (error != gi.gi_size)
- die("error doing get_super (%d): %s\n",
- error, strerror(errno));
- }
- {
- char *argv[] = { "get_hfile_stat",
- "jindex" };
+ compute_constants(&sbd);
+ gfs2_sb_in(&sbd.sd_sb, buf); /* parse it out into the sb structure */
- gi.gi_argc = 2;
- gi.gi_argv = argv;
- gi.gi_data = (char *)&ji;
- gi.gi_size = sizeof(struct gfs2_dinode);
-
- error = ioctl(sbd.device_fd, GFS2_IOCTL_SUPER, &gi);
- if (error != gi.gi_size)
- die("error doing get_hfile_stat for jindex (%d): %s\n",
- error, strerror(errno));
- }
- {
- char *argv[] = { "get_hfile_stat",
- "rindex" };
-
- gi.gi_argc = 2;
- gi.gi_argv = argv;
- gi.gi_data = (char *)&ri;
- gi.gi_size = sizeof(struct gfs2_dinode);
-
- error = ioctl(sbd.device_fd, GFS2_IOCTL_SUPER, &gi);
- if (error != gi.gi_size)
- die("error doing get_hfile_stat for rindex (%d): %s\n",
- error, strerror(errno));
- }
+ sbd.master_dir = gfs2_load_inode(&sbd,
+ sbd.sd_sb.sb_master_dir.no_addr);
+ gfs2_lookupi(sbd.master_dir, "rindex", 6, &sbd.md.riinode);
+ gfs2_lookupi(sbd.master_dir, "jindex", 6, &sbd.md.jiinode);
close(sbd.device_fd);
- journals = ji.di_entries - 2;
+ journals = sbd.md.jiinode->i_di.di_entries - 2;
- rgrps = ri.di_size;
+ rgrps = sbd.md.riinode->i_di.di_size;
if (rgrps % sizeof(struct gfs2_rindex))
die("bad rindex size\n");
rgrps /= sizeof(struct gfs2_rindex);
-
printf("%s:\n", path);
- printf(" SB lock proto = \"%s\"\n", sb.sb_lockproto);
- printf(" SB lock table = \"%s\"\n", sb.sb_locktable);
- printf(" SB ondisk format = %u\n", sb.sb_fs_format);
- printf(" SB multihost format = %u\n", sb.sb_multihost_format);
- printf(" Block size = %u\n", sb.sb_bsize);
+ printf(" SB lock proto = \"%s\"\n", sbd.sd_sb.sb_lockproto);
+ printf(" SB lock table = \"%s\"\n", sbd.sd_sb.sb_locktable);
+ printf(" SB ondisk format = %u\n", sbd.sd_sb.sb_fs_format);
+ printf(" SB multihost format = %u\n", sbd.sd_sb.sb_multihost_format);
+ 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 :
- sb.sb_lockproto);
+ ((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 :
- sb.sb_locktable);
+ ((value = get_sysfs(fs, "args/locktable"))[0])
+ ? value : sbd.sd_sb.sb_locktable);
printf(" Mounted host data = \"%s\"\n",
get_sysfs(fs, "args/hostdata"));
printf(" Journal number = %s\n", get_sysfs(fs, "lockstruct/jid"));
@@ -145,31 +112,36 @@
(get_sysfs_uint(fs, "args/localflocks")) ? "TRUE" : "FALSE");
printf(" Local caching = %s\n",
(get_sysfs_uint(fs, "args/localcaching")) ? "TRUE" : "FALSE");
-#if 0
+
+ /* Read the master statfs file */
+ if (!find_gfs2_meta(&sbd))
+ mount_gfs2_meta(&sbd);
+ lock_for_admin(&sbd);
+
+ sprintf(statfs_fn, "%s/statfs", sbd.metafs_path);
+ statfs_fd = open(statfs_fn, O_RDONLY);
+ do_read(statfs_fd, buf, sizeof(struct gfs2_statfs_change));
+ gfs2_statfs_change_in(&sc, (char *)&buf);
+
+ close(statfs_fd);
+
+ cleanup_metafs(&sbd);
+
printf("\n");
printf(" %-15s%-15s%-15s%-15s%-15s\n", "Type", "Total", "Used", "Free", "use%");
printf(" ------------------------------------------------------------------------\n");
- percentage = (name2u64(stat_gfs2, "total")) ?
- (100.0 * (name2u64(stat_gfs2, "total") - name2u64(stat_gfs2, "free")) /
- name2u64(stat_gfs2, "total") + 0.5) : 0;
- printf(" %-15s%-15"PRIu64"%-15"PRIu64"%-15"PRIu64"%u%%\n",
- "data",
- name2u64(stat_gfs2, "total"),
- name2u64(stat_gfs2, "total") - name2u64(stat_gfs2, "free"),
- name2u64(stat_gfs2, "free"),
- percentage);
-
- percentage = (name2u64(stat_gfs2, "dinodes") + name2u64(stat_gfs2, "free")) ?
- (100.0 * name2u64(stat_gfs2, "dinodes") /
- (name2u64(stat_gfs2, "dinodes") + name2u64(stat_gfs2, "free")) + 0.5) : 0;
- printf(" %-15s%-15"PRIu64"%-15"PRIu64"%-15"PRIu64"%u%%\n",
- "inodes",
- name2u64(stat_gfs2, "dinodes") + name2u64(stat_gfs2, "free"),
- name2u64(stat_gfs2, "dinodes"),
- name2u64(stat_gfs2, "free"),
- percentage);
-#endif
+ percentage = sc.sc_total ?
+ (100.0 * (sc.sc_total - sc.sc_free)) / sc.sc_total + 0.5 : 0;
+ printf(" %-15s%-15llu%-15llu%-15llu%u%%\n", "data",
+ sc.sc_total, sc.sc_total - sc.sc_free, sc.sc_free, percentage);
+
+ percentage = (sc.sc_dinodes + sc.sc_free) ?
+ (100.0 * sc.sc_dinodes / (sc.sc_dinodes + sc.sc_free)) + 0.5 :
+ 0;
+ printf(" %-15s%-15llu%-15llu%-15llu%u%%\n", "inodes",
+ sc.sc_dinodes + sc.sc_free, sc.sc_dinodes,
+ sc.sc_free, percentage);
}
@@ -220,4 +192,3 @@
fclose(file);
}
}
-#endif /* #if GFS2_TOOL_FEATURE_IMPLEMENTED */
--- cluster/gfs2/tool/main.c 2007/11/13 17:06:33 1.4.2.3
+++ cluster/gfs2/tool/main.c 2007/11/14 17:18:39 1.4.2.4
@@ -45,6 +45,9 @@
"Print the counters for a filesystem\n",
" gfs2_tool counters <mountpoint>\n",
"\n",
+ "Do a GFS2 specific \"df\":\n",
+ " gfs2_tool df <mountpoint>\n",
+ "\n",
"Freeze a GFS2 cluster:\n",
" gfs2_tool freeze <mountpoint>\n",
"\n",
@@ -92,9 +95,6 @@
" gfs2_tool withdraw <mountpoint>\n",
#if GFS2_TOOL_FEATURE_IMPLEMENTED
"\n",
- "Do a GFS2 specific \"df\"\n",
- " gfs2_tool df <mountpoint>\n",
- "\n",
"Force files from a machine's cache\n",
" gfs2_tool flush <filenames>\n",
"\n",
@@ -233,6 +233,8 @@
set_flag(argc, argv);
else if (strcmp(action, "counters") == 0)
print_counters(argc, argv);
+ else if (strcmp(action, "df") == 0)
+ print_df(argc, argv);
else if (strcmp(action, "freeze") == 0)
do_freeze(argc, argv);
else if (strcmp(action, "getargs") == 0)
@@ -266,8 +268,6 @@
do_file_flush(argc, argv);
else if (strcmp(action, "getsb") == 0)
print_sb(argc, argv);
- else if (strcmp(action, "df") == 0)
- print_df(argc, argv);
else if (strcmp(action, "jindex") == 0)
print_jindex(argc, argv);
else if (strcmp(action, "layout") == 0)
More information about the Cluster-devel
mailing list