[Ocfs2-commits] mfasheh commits r2132 - trunk/fs/ocfs2

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Apr 11 19:52:10 CDT 2005


Author: mfasheh
Signed-off-by: manish
Date: 2005-04-11 19:52:08 -0500 (Mon, 11 Apr 2005)
New Revision: 2132

Modified:
   trunk/fs/ocfs2/proc.c
Log:
* actually pass a valid mode with our proc entries

* teach the proc code how to check return values 

* add the ability to create writeable proc entries

Signed-off-by: manish



Modified: trunk/fs/ocfs2/proc.c
===================================================================
--- trunk/fs/ocfs2/proc.c	2005-04-12 00:11:44 UTC (rev 2131)
+++ trunk/fs/ocfs2/proc.c	2005-04-12 00:52:08 UTC (rev 2132)
@@ -63,23 +63,25 @@
 	char *name;
 	char *data;
 	int (*read_proc) (char *, char **, off_t, int, int *, void *);
+	write_proc_t *write_proc;
+	mode_t mode;
 } ocfs_proc_list;
 
 ocfs_proc_list top_dir[] = {
-	{ "version", NULL, ocfs_proc_version },
-	{ "nodename", NULL, ocfs_proc_nodename },
+	{ "version", NULL, ocfs_proc_version, NULL, S_IFREG | S_IRUGO, },
+	{ "nodename", NULL, ocfs_proc_nodename, NULL, S_IFREG | S_IRUGO, },
 	{ NULL }
 };
 
 ocfs_proc_list sub_dir[] = {
-	{ "nodenum", NULL, ocfs_proc_nodenum },
-	{ "mountpoint", NULL, ocfs_proc_mountpoint },
-	{ "slotnum", NULL, ocfs_proc_slotnum },
-	{ "statistics", NULL, ocfs_proc_statistics },
-	{ "device", NULL, ocfs_proc_device },
-	{ "nodes", NULL, ocfs_proc_nodes },
-	{ "allocstat", NULL, ocfs_proc_alloc_stat },
-	{ "label", NULL, ocfs_proc_label },
+	{ "nodenum", NULL, ocfs_proc_nodenum, NULL, S_IFREG | S_IRUGO, },
+	{ "mountpoint", NULL, ocfs_proc_mountpoint, NULL, S_IFREG | S_IRUGO, },
+	{ "slotnum", NULL, ocfs_proc_slotnum, NULL, S_IFREG | S_IRUGO, },
+	{ "statistics", NULL, ocfs_proc_statistics, NULL, S_IFREG | S_IRUGO, },
+	{ "device", NULL, ocfs_proc_device, NULL, S_IFREG | S_IRUGO, },
+	{ "nodes", NULL, ocfs_proc_nodes, NULL, S_IFREG | S_IRUGO, },
+	{ "allocstat", NULL, ocfs_proc_alloc_stat, NULL, S_IFREG | S_IRUGO, },
+	{ "label", NULL, ocfs_proc_label, NULL, S_IFREG | S_IRUGO, },
 	{ NULL }
 };
 
@@ -91,15 +93,24 @@
 {
 	struct proc_dir_entry *parent = NULL;
 	ocfs_proc_list *p;
+	struct proc_dir_entry* entry;
 
 	LOG_ENTRY ();
 
 	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 = top_dir; p->name; p++) {
+			entry = create_proc_read_entry(p->name, p->mode,
+						       parent, p->read_proc,
+						       p->data);
+			if (!entry)
+				return -EINVAL;
+			if (p->write_proc)
+				entry->write_proc = p->write_proc;
+
+			entry->owner = THIS_MODULE;
+		}
 	}
 
 	LOG_EXIT ();
@@ -292,23 +303,36 @@
 {
 	char newdir[20];
 	struct proc_dir_entry *parent = NULL;
+	struct proc_dir_entry* entry;
 	ocfs_proc_list *p;
 
-	LOG_ENTRY ();
+	LOG_ENTRY();
 
-	snprintf (newdir, sizeof(newdir), "%u_%u", MAJOR(osb->sb->s_dev),
-		  MINOR(osb->sb->s_dev));
-	parent = proc_mkdir (newdir, OcfsGlobalCtxt.proc_root_dir);
+	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;
 
-	if (parent) {
-		for (p = sub_dir; p->name; p++)
-			create_proc_read_entry (p->name, 0, parent,
-						p->read_proc, (char *)osb);
+	if (!parent) {
+		LOG_EXIT();
+		return;
 	}
 
-	LOG_EXIT ();
-	return ;
+	for (p = sub_dir; p->name; p++) {
+		/* XXX: What do we do if
+		 * create_proc_read_entry fails?! */
+		entry = create_proc_read_entry(p->name, p->mode,
+					       parent, p->read_proc,
+					       (char *)osb);
+		if (entry) {
+			if (p->write_proc)
+				entry->write_proc = p->write_proc;
+
+			entry->owner = THIS_MODULE;
+		}
+	}
+
+	LOG_EXIT();
 }				/* ocfs_proc_add_volume */
 
 /*
@@ -449,3 +473,4 @@
 	LOG_EXIT_INT (ret);
 	return ret;
 }				/* ocfs_proc_label */
+



More information about the Ocfs2-commits mailing list