Allocate inode (CKRM RCFS rewrite)

Consolidate generic functions to allocate/get an inode allocation into inode.c

Signed-off-by: Shailabh Nagar <[EMAIL PROTECTED]>

 fs/rcfs/inode.c      |  102 ++++++++++++++++++++++++++++++---------------------
 fs/rcfs/super.c      |   22 -----------
 include/linux/rcfs.h |    3 -
 3 files changed, 62 insertions(+), 65 deletions(-)

Index: linux-2.6.12/fs/rcfs/inode.c
===================================================================
--- linux-2.6.12.orig/fs/rcfs/inode.c	2005-08-09 15:30:30.957194512 -0400
+++ linux-2.6.12/fs/rcfs/inode.c	2005-08-09 15:30:31.030183416 -0400
@@ -98,49 +98,17 @@ struct inode_operations rcfs_dir_inode_o
 	.rename		= rcfs_rename_noperm,
 };
 
+struct inode_operations rcfs_file_inode_ops = {
+	.getattr = simple_getattr,
+};
+
+
 /*
  * Address of variable used as flag to indicate a magic file,
  * value unimportant
  */
 int RCFS_IS_MAGIC;
 
-struct inode *rcfs_get_inode(struct super_block *sb, int mode, dev_t dev)
-{
-	struct inode *inode = new_inode(sb);
-
-	if (inode) {
-		inode->i_mode = mode;
-		inode->i_uid = current->fsuid;
-		inode->i_gid = current->fsgid;
-		inode->i_blksize = PAGE_CACHE_SIZE;
-		inode->i_blocks = 0;
-		inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-		switch (mode & S_IFMT) {
-		default:
-			init_special_inode(inode, mode, dev);
-			break;
-		case S_IFREG:
-			/* Treat as default assignment */
-			inode->i_op = &rcfs_file_inode_operations;
-			break;
-		case S_IFDIR:
-			inode->i_op = &rcfs_rootdir_inode_operations;
-			inode->i_fop = &simple_dir_operations;
-
-			/*
-			 * directory inodes start off with i_nlink == 2
-			 *  (for "." entry)
-			 */
-			inode->i_nlink++;
-			break;
-		case S_IFLNK:
-			inode->i_op = &page_symlink_inode_operations;
-			break;
-		}
-	}
-	return inode;
-}
-
 int rcfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
 {
 	struct inode *inode;
@@ -221,10 +189,6 @@ int rcfs_delete_internal(struct dentry *
 	return 0;
 }
 
-struct inode_operations rcfs_file_inode_operations = {
-	.getattr = simple_getattr,
-};
-
 /******************************
  *
  * Generic inode/dentry helpers
@@ -261,6 +225,62 @@ void rcfs_destroy_inodecache(void)
 		info("inode cache not freed\n");
 }
 
+static struct inode *rcfs_alloc_inode(struct super_block *sb)
+{
+	struct rcfs_inode_info *ri;
+	ri = kmem_cache_alloc(rcfs_inode_cachep, SLAB_KERNEL);
+	return ri ? &ri->vfs_inode : NULL;
+}
+
+static void rcfs_destroy_inode(struct inode *inode)
+{
+	struct rcfs_inode_info *ri = rcfs_get_inode_info(inode);
+
+	kmem_cache_free(rcfs_inode_cachep, ri);
+}
+
+static struct inode *rcfs_get_inode(struct super_block *sb, int mode, dev_t dev)
+{
+	struct inode *inode;
+	int modefmt = mode & S_IFMT;
+
+	if (!S_ISLNK(mode) &&  !S_ISDIR(mode) && !S_ISREG(mode))
+		return NULL;
+
+	inode = new_inode(sb);
+	if (!inode)
+		return NULL;
+
+	inode->i_mode = mode;
+	inode->i_uid = current->fsuid;
+	inode->i_gid = current->fsgid;
+	inode->i_blksize = PAGE_CACHE_SIZE;
+	inode->i_blocks = 0;
+	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+
+	switch (modefmt) {
+	case S_IFREG:
+		inode->i_op = &rcfs_file_inode_ops;
+		break;
+	case S_IFDIR:
+		/* Deny all inode ops by default */
+		inode->i_op = &rcfs_dir_inode_ops_noperm;
+		inode->i_fop = &simple_dir_operations;
+		/*
+		 * directory inodes start off with i_nlink == 2
+		 *  (for "." entry)
+		 */
+		inode->i_nlink++;
+		break;
+	case S_IFLNK:
+		inode->i_op = &page_symlink_inode_operations;
+		break;
+	default:
+		err("Unexpected mode format %d", modefmt);
+	}
+
+	return inode;
+}
 
 static struct file_system_type rcfs_fs_type = {
 	.owner =	THIS_MODULE,
Index: linux-2.6.12/fs/rcfs/super.c
===================================================================
--- linux-2.6.12.orig/fs/rcfs/super.c	2005-08-09 15:30:30.957194512 -0400
+++ linux-2.6.12/fs/rcfs/super.c	2005-08-09 15:30:31.031183264 -0400
@@ -32,28 +32,6 @@
 #include <linux/ckrm_ce.h>
 #include <asm/uaccess.h>
 
-static kmem_cache_t *rcfs_inode_cachep;
-
-
-static struct inode *rcfs_alloc_inode(struct super_block *sb)
-{
-	struct rcfs_inode_info *ri;
-	ri = (struct rcfs_inode_info *)kmem_cache_alloc(rcfs_inode_cachep,
-							SLAB_KERNEL);
-	if (!ri)
-		return NULL;
-	ri->name = NULL;
-	return &ri->vfs_inode;
-}
-
-static void rcfs_destroy_inode(struct inode *inode)
-{
-	struct rcfs_inode_info *ri = rcfs_get_inode_info(inode);
-
-	kfree(ri->name);
-	kmem_cache_free(rcfs_inode_cachep, ri);
-}
-
 struct super_operations rcfs_super_ops = {
 	.alloc_inode = rcfs_alloc_inode,
 	.destroy_inode = rcfs_destroy_inode,
Index: linux-2.6.12/include/linux/rcfs.h
===================================================================
--- linux-2.6.12.orig/include/linux/rcfs.h	2005-08-09 15:30:30.957194512 -0400
+++ linux-2.6.12/include/linux/rcfs.h	2005-08-09 15:30:31.031183264 -0400
@@ -57,7 +57,6 @@ struct rcfs_mfdesc {
 
 extern struct rcfs_mfdesc *genmfdesc[];
 
-struct inode *rcfs_get_inode(struct super_block *, int, dev_t);
 int rcfs_mknod(struct inode *, struct dentry *, int, dev_t);
 struct dentry *rcfs_set_magf_byname(char *, void *);
 struct dentry *rcfs_create_internal(struct dentry *, struct rcfs_magf *, int);
@@ -69,7 +68,7 @@ extern struct super_operations rcfs_supe
 extern struct address_space_operations rcfs_aops;
 
 extern struct inode_operations rcfs_dir_inode_ops_noperm;
-extern struct inode_operations rcfs_file_inode_operations;
+extern struct inode_operations rcfs_file_inode_ops;
 
 extern struct file_operations shares_fileops;
 extern struct file_operations stats_fileops;

Reply via email to