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;