]> err.no Git - linux-2.6/blobdiff - fs/relayfs/inode.c
[PATCH] relayfs: add support for global relay buffers
[linux-2.6] / fs / relayfs / inode.c
index b2f50655736bf7cfa42efca7806c6cb1f4cdb8d5..b4c3e0466e987f0d9a5ae060bcdc25bb67d49e12 100644 (file)
@@ -26,7 +26,6 @@
 
 static struct vfsmount *               relayfs_mount;
 static int                             relayfs_mount_count;
-static kmem_cache_t *                  relayfs_inode_cachep;
 
 static struct backing_dev_info         relayfs_backing_dev_info = {
        .ra_pages       = 0,    /* No readahead */
@@ -54,7 +53,8 @@ static struct inode *relayfs_get_inode(struct super_block *sb,
        switch (mode & S_IFMT) {
        case S_IFREG:
                inode->i_fop = fops;
-               RELAYFS_I(inode)->data = data;
+               if (data)
+                       inode->u.generic_ip = data;
                break;
        case S_IFDIR:
                inode->i_op = &simple_dir_inode_operations;
@@ -255,8 +255,9 @@ int relayfs_remove_dir(struct dentry *dentry)
  */
 static int relayfs_open(struct inode *inode, struct file *filp)
 {
-       struct rchan_buf *buf = RELAYFS_I(inode)->data;
+       struct rchan_buf *buf = inode->u.generic_ip;
        kref_get(&buf->kref);
+       filp->private_data = buf;
 
        return 0;
 }
@@ -270,8 +271,8 @@ static int relayfs_open(struct inode *inode, struct file *filp)
  */
 static int relayfs_mmap(struct file *filp, struct vm_area_struct *vma)
 {
-       struct inode *inode = filp->f_dentry->d_inode;
-       return relay_mmap_buf(RELAYFS_I(inode)->data, vma);
+       struct rchan_buf *buf = filp->private_data;
+       return relay_mmap_buf(buf, vma);
 }
 
 /**
@@ -284,8 +285,7 @@ static int relayfs_mmap(struct file *filp, struct vm_area_struct *vma)
 static unsigned int relayfs_poll(struct file *filp, poll_table *wait)
 {
        unsigned int mask = 0;
-       struct inode *inode = filp->f_dentry->d_inode;
-       struct rchan_buf *buf = RELAYFS_I(inode)->data;
+       struct rchan_buf *buf = filp->private_data;
 
        if (buf->finalized)
                return POLLERR;
@@ -309,7 +309,7 @@ static unsigned int relayfs_poll(struct file *filp, poll_table *wait)
  */
 static int relayfs_release(struct inode *inode, struct file *filp)
 {
-       struct rchan_buf *buf = RELAYFS_I(inode)->data;
+       struct rchan_buf *buf = filp->private_data;
        kref_put(&buf->kref, relay_remove_buf);
 
        return 0;
@@ -470,8 +470,8 @@ static ssize_t relayfs_read(struct file *filp,
                            size_t count,
                            loff_t *ppos)
 {
+       struct rchan_buf *buf = filp->private_data;
        struct inode *inode = filp->f_dentry->d_inode;
-       struct rchan_buf *buf = RELAYFS_I(inode)->data;
        size_t read_start, avail;
        ssize_t ret = 0;
        void *from;
@@ -498,34 +498,6 @@ out:
        return ret;
 }
 
-/**
- *     relayfs alloc_inode() implementation
- */
-static struct inode *relayfs_alloc_inode(struct super_block *sb)
-{
-       struct relayfs_inode_info *p = kmem_cache_alloc(relayfs_inode_cachep, SLAB_KERNEL);
-       if (!p)
-               return NULL;
-       p->data = NULL;
-
-       return &p->vfs_inode;
-}
-
-/**
- *     relayfs destroy_inode() implementation
- */
-static void relayfs_destroy_inode(struct inode *inode)
-{
-       kmem_cache_free(relayfs_inode_cachep, RELAYFS_I(inode));
-}
-
-static void init_once(void *p, kmem_cache_t *cachep, unsigned long flags)
-{
-       struct relayfs_inode_info *i = p;
-       if ((flags & (SLAB_CTOR_VERIFY | SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR)
-               inode_init_once(&i->vfs_inode);
-}
-
 struct file_operations relayfs_file_operations = {
        .open           = relayfs_open,
        .poll           = relayfs_poll,
@@ -538,8 +510,6 @@ struct file_operations relayfs_file_operations = {
 static struct super_operations relayfs_ops = {
        .statfs         = simple_statfs,
        .drop_inode     = generic_delete_inode,
-       .alloc_inode    = relayfs_alloc_inode,
-       .destroy_inode  = relayfs_destroy_inode,
 };
 
 static int relayfs_fill_super(struct super_block * sb, void * data, int silent)
@@ -583,25 +553,12 @@ static struct file_system_type relayfs_fs_type = {
 
 static int __init init_relayfs_fs(void)
 {
-       int err;
-
-       relayfs_inode_cachep = kmem_cache_create("relayfs_inode_cache",
-                               sizeof(struct relayfs_inode_info), 0,
-                               0, init_once, NULL);
-       if (!relayfs_inode_cachep)
-               return -ENOMEM;
-
-       err = register_filesystem(&relayfs_fs_type);
-       if (err)
-               kmem_cache_destroy(relayfs_inode_cachep);
-
-       return err;
+       return register_filesystem(&relayfs_fs_type);
 }
 
 static void __exit exit_relayfs_fs(void)
 {
        unregister_filesystem(&relayfs_fs_type);
-       kmem_cache_destroy(relayfs_inode_cachep);
 }
 
 module_init(init_relayfs_fs)