[Ocfs2-commits] smushran commits r1475 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Thu Sep 16 16:50:44 CDT 2004
Author: smushran
Date: 2004-09-16 16:50:42 -0500 (Thu, 16 Sep 2004)
New Revision: 1475
Modified:
trunk/src/ocfs.h
trunk/src/proc.c
Log:
proc changes
mounts now show up as /proc/fs/ocfs2/<maj_min>
guid and label also available
Modified: trunk/src/ocfs.h
===================================================================
--- trunk/src/ocfs.h 2004-09-14 01:39:44 UTC (rev 1474)
+++ trunk/src/ocfs.h 2004-09-16 21:50:42 UTC (rev 1475)
@@ -581,6 +581,7 @@
int s_clustersize;
int s_clustersize_bits;
int needs_flush;
+ struct proc_dir_entry *proc_sub_dir; /* points to /proc/fs/ocfs2/<maj_min> */
ocfs_alloc_bm cluster_bitmap;
atomic_t vol_state;
@@ -652,6 +653,7 @@
__u64 comm_seq_num; /* local node seq num used in ipcdlm */
ocfs_dlm_stats net_reqst_stats; /* stats of netdlm vote requests */
ocfs_dlm_stats net_reply_stats; /* stats of netdlm vote reponses */
+ struct proc_dir_entry *proc_root_dir; /* points to /proc/fs/ocfs2 */
}
ocfs_global_ctxt;
Modified: trunk/src/proc.c
===================================================================
--- trunk/src/proc.c 2004-09-14 01:39:44 UTC (rev 1474)
+++ trunk/src/proc.c 2004-09-16 21:50:42 UTC (rev 1475)
@@ -48,50 +48,69 @@
/* Tracing */
#define OCFS_DEBUG_CONTEXT OCFS_DEBUG_CONTEXT_PROC
-#define OCFS2_PROC_BASENAME "fs/ocfs2"
+#define OCFS2_PROC_BASENAME "fs/ocfs2"
static int ocfs_proc_globalctxt(char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_dlm_stats(char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_version (char *page, char **start, off_t off, int count, int *eof, void *data);
+static int ocfs_proc_nodenum (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_nodename (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_mountpoint (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_statistics (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_device (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_nodes (char *page, char **start, off_t off, int count, int *eof, void *data);
static int ocfs_proc_net_vote_obj (char *page, char **start, off_t off, int count, int *eof, void *data);
-static int ocfs_proc_alloc_stat(char *page, char **start, off_t off,
- int count, int *eof, void *data);
+static int ocfs_proc_alloc_stat(char *page, char **start, off_t off, int count, int *eof, void *data);
+static int ocfs_proc_guid (char *page, char **start, off_t off, int count, int *eof, void *data);
+static int ocfs_proc_label (char *page, char **start, off_t off, int count, int *eof, void *data);
+typedef struct _ocfs_proc_list
+{
+ char *name;
+ char *data;
+ int (*read_proc) (char *, char **, off_t, int, int *, void *);
+} ocfs_proc_list;
+
+ocfs_proc_list top_dir[] = {
+ { "version", NULL, ocfs_proc_version },
+ { "nodename", NULL, ocfs_proc_nodename },
+ { "globalctxt", NULL, ocfs_proc_globalctxt },
+ { "lockstat", NULL, ocfs_proc_dlm_stats },
+ { NULL } };
+
+ocfs_proc_list sub_dir[] = {
+ { "nodenum", NULL, ocfs_proc_nodenum },
+ { "mountpoint", NULL, ocfs_proc_mountpoint },
+ { "statistics", NULL, ocfs_proc_statistics },
+ { "lockstat", NULL, ocfs_proc_dlm_stats },
+ { "device", NULL, ocfs_proc_device },
+ { "nodes", NULL, ocfs_proc_nodes },
+ { "sent-votes", NULL, ocfs_proc_net_vote_obj },
+ { "allocstat", NULL, ocfs_proc_alloc_stat },
+ { "guid", NULL, ocfs_proc_guid },
+ { "label", NULL, ocfs_proc_label },
+ { NULL } };
+
/*
* ocfs_proc_init()
*
*/
int ocfs_proc_init (void)
{
- static struct
- {
- char *name;
- char *data;
- int (*read_proc) (char *, char **, off_t, int, int *, void *);
- }
- *p, ProcList[] =
- {
- { OCFS2_PROC_BASENAME "/version", NULL, ocfs_proc_version },
- { OCFS2_PROC_BASENAME "/nodename", NULL, ocfs_proc_nodename },
- { OCFS2_PROC_BASENAME "/globalctxt", NULL, ocfs_proc_globalctxt },
- { OCFS2_PROC_BASENAME "/lockstat", NULL, ocfs_proc_dlm_stats },
- { NULL, }
- };
+ struct proc_dir_entry *parent = NULL;
+ ocfs_proc_list *p;
LOG_ENTRY ();
- proc_mkdir (OCFS2_PROC_BASENAME, 0);
+ parent = proc_mkdir (OCFS2_PROC_BASENAME, 0);
+ if (parent) {
+ OcfsGlobalCtxt.proc_root_dir = parent;
+ for (p = top_dir; p->name; p++)
+ create_proc_read_entry (p->name, 0, parent,
+ p->read_proc, p->data);
+ }
- for (p = ProcList; p->name; p++)
- create_proc_read_entry (p->name, 0, NULL, p->read_proc,
- p->data);
-
- LOG_EXIT_INT (0);
+ LOG_EXIT ();
return 0;
} /* ocfs_proc_init */
@@ -101,16 +120,19 @@
*/
void ocfs_proc_deinit (void)
{
+ struct proc_dir_entry *parent = OcfsGlobalCtxt.proc_root_dir;
+ ocfs_proc_list *p;
+
LOG_ENTRY ();
- remove_proc_entry (OCFS2_PROC_BASENAME "/version", NULL);
- remove_proc_entry (OCFS2_PROC_BASENAME "/nodename", NULL);
- remove_proc_entry (OCFS2_PROC_BASENAME "/globalctxt", NULL);
- remove_proc_entry (OCFS2_PROC_BASENAME "/lockstat", NULL);
- remove_proc_entry (OCFS2_PROC_BASENAME, NULL);
+ if (parent) {
+ for (p = top_dir; p->name; p++)
+ remove_proc_entry (p->name, parent);
+ remove_proc_entry (OCFS2_PROC_BASENAME, 0);
+ }
LOG_EXIT ();
- return;
+ return ;
} /* ocfs_proc_deinit */
/*
@@ -332,71 +354,31 @@
return ret;
} /* ocfs_proc_nodename */
-typedef struct _ocfs_proc_list
-{
- char *name;
- char *data;
- int (*read_proc) (char *, char **, off_t, int, int *, void *);
-} ocfs_proc_list;
-
-static ocfs_proc_list ProcList[] =
-{
- { "nodenum", NULL, ocfs_proc_nodenum },
- { "mountpoint", NULL, ocfs_proc_mountpoint },
- { "statistics", NULL, ocfs_proc_statistics },
- { "lockstat", NULL, ocfs_proc_dlm_stats },
- { "device", NULL, ocfs_proc_device },
- { "nodes", NULL, ocfs_proc_nodes },
- { "sent-votes", NULL, ocfs_proc_net_vote_obj },
- { "allocstat", NULL, ocfs_proc_alloc_stat },
- { NULL, }
-};
-
/*
* ocfs_proc_add_volume()
*
*/
void ocfs_proc_add_volume (ocfs_super * osb)
{
- char *newdir = NULL;
- char *tmp = NULL;
+ char newdir[20];
+ struct proc_dir_entry *parent = NULL;
ocfs_proc_list *p;
LOG_ENTRY ();
- newdir = ocfs_malloc (32);
- tmp = ocfs_malloc (100);
- if (!newdir || !tmp) {
- LOG_ERROR_STATUS (-ENOMEM);
- goto bail;
- }
+ snprintf (newdir, sizeof(newdir), "%u_%u", MAJOR(osb->sb->s_dev),
+ MINOR(osb->sb->s_dev));
+ parent = proc_mkdir (newdir, OcfsGlobalCtxt.proc_root_dir);
+ osb->proc_sub_dir = parent;
- ProcList[0].data = (char *) osb;
-#warning fix proc mountpoint
- ProcList[1].data = "unknown";
- ProcList[2].data = (char *) osb;
- ProcList[3].data = (char *) osb;
- ProcList[4].data = (char *) osb;
- ProcList[5].data = (char *) osb;
- ProcList[6].data = (char *) osb;
- ProcList[7].data = (char *) osb;
- ProcList[8].data = (char *) osb;
-
- sprintf (newdir, OCFS2_PROC_BASENAME "/%-d", osb->osb_id);
- proc_mkdir (newdir, 0);
-
- for (p = ProcList; p->name; p++) {
- sprintf (tmp, "%s/%s", newdir, p->name);
- create_proc_read_entry (tmp, 0, NULL, p->read_proc, p->data);
+ if (parent) {
+ for (p = sub_dir; p->name; p++)
+ create_proc_read_entry (p->name, 0, parent,
+ p->read_proc, (char *)osb);
}
-bail:
- if (tmp)
- kfree(tmp);
- if (newdir)
- kfree(newdir);
LOG_EXIT ();
- return;
+ return ;
} /* ocfs_proc_add_volume */
/*
@@ -405,28 +387,20 @@
*/
void ocfs_proc_remove_volume (ocfs_super * osb)
{
- char *tmp = NULL;
ocfs_proc_list *p;
+ char dir[20];
LOG_ENTRY ();
- tmp = ocfs_malloc (100);
- if (!tmp) {
- LOG_ERROR_STATUS (-ENOMEM);
- goto bail;
+ if (osb->proc_sub_dir) {
+ for (p = sub_dir; p->name; p++)
+ remove_proc_entry (p->name, osb->proc_sub_dir);
+
+ snprintf (dir, sizeof(dir), "%u_%u", MAJOR(osb->sb->s_dev),
+ MINOR(osb->sb->s_dev));
+ remove_proc_entry (dir, OcfsGlobalCtxt.proc_root_dir);
}
-
- for (p = ProcList; p->name; p++) {
- sprintf (tmp, OCFS2_PROC_BASENAME "/%-d/%s", osb->osb_id, p->name);
- remove_proc_entry (tmp, NULL);
- }
- sprintf (tmp, OCFS2_PROC_BASENAME "/%-d", osb->osb_id);
- remove_proc_entry (tmp, NULL);
-
-bail:
- if (tmp)
- kfree(tmp);
LOG_EXIT ();
return;
} /* ocfs_proc_remove_volume */
@@ -443,9 +417,7 @@
LOG_ENTRY ();
- strcpy (page, data);
- strcat (page, "\n");
- len = strlen (page);
+ len = sprintf (page, "%s\n", "unknown");
ret = ocfs_proc_calc_metrics (page, start, off, count, eof, len);
@@ -607,3 +579,56 @@
return ret;
} /* ocfs_proc_net_vote_obj */
+/*
+ * ocfs_proc_guid()
+ *
+ */
+static int ocfs_proc_guid (char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ int len;
+ int ret;
+ ocfs_super *osb;
+ char *p;
+ int i;
+
+ LOG_ENTRY ();
+
+ osb = (ocfs_super *) data;
+
+ for (i = 0, p = page; i < MAX_VOL_ID_LENGTH; i++, p += 2)
+ sprintf(p, "%02X", osb->uuid[i]);
+ *p = '\n'; ++p; *p = '\0';
+
+ len = strlen (page);
+
+ ret = ocfs_proc_calc_metrics (page, start, off, count, eof, len);
+
+ LOG_EXIT_INT (ret);
+ return ret;
+} /* ocfs_proc_guid */
+
+
+/*
+ * ocfs_proc_label()
+ *
+ */
+static int ocfs_proc_label (char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ int len;
+ int ret;
+ ocfs_super *osb;
+
+ LOG_ENTRY ();
+
+ osb = (ocfs_super *) data;
+
+ len = sprintf (page, "%s\n", osb->vol_label);
+
+ ret = ocfs_proc_calc_metrics (page, start, off, count, eof, len);
+
+ LOG_EXIT_INT (ret);
+ return ret;
+} /* ocfs_proc_label */
+
More information about the Ocfs2-commits
mailing list