[XFS] Add support for hotplug CPUs to the per-CPU superblock counters by
[safe/jmp/linux-2.6] / fs / relayfs / inode.c
index 7f6d2c8..3835230 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 */
@@ -110,7 +109,7 @@ static struct dentry *relayfs_create_entry(const char *name,
        }
 
        parent = dget(parent);
-       down(&parent->d_inode->i_sem);
+       mutex_lock(&parent->d_inode->i_mutex);
        d = lookup_one_len(name, parent, strlen(name));
        if (IS_ERR(d)) {
                d = NULL;
@@ -140,7 +139,7 @@ release_mount:
        simple_release_fs(&relayfs_mount, &relayfs_mount_count);
 
 exit:
-       up(&parent->d_inode->i_sem);
+       mutex_unlock(&parent->d_inode->i_mutex);
        dput(parent);
        return d;
 }
@@ -205,7 +204,7 @@ int relayfs_remove(struct dentry *dentry)
                return -EINVAL;
 
        parent = dget(parent);
-       down(&parent->d_inode->i_sem);
+       mutex_lock(&parent->d_inode->i_mutex);
        if (dentry->d_inode) {
                if (S_ISDIR(dentry->d_inode->i_mode))
                        error = simple_rmdir(parent->d_inode, dentry);
@@ -216,7 +215,7 @@ int relayfs_remove(struct dentry *dentry)
        }
        if (!error)
                dput(dentry);
-       up(&parent->d_inode->i_sem);
+       mutex_unlock(&parent->d_inode->i_mutex);
        dput(parent);
 
        if (!error)
@@ -248,13 +247,13 @@ int relayfs_remove_dir(struct dentry *dentry)
 }
 
 /**
- *     relayfs_open - open file op for relayfs files
+ *     relay_file_open - open file op for relay files
  *     @inode: the inode
  *     @filp: the file
  *
  *     Increments the channel buffer refcount.
  */
-static int relayfs_open(struct inode *inode, struct file *filp)
+static int relay_file_open(struct inode *inode, struct file *filp)
 {
        struct rchan_buf *buf = inode->u.generic_ip;
        kref_get(&buf->kref);
@@ -264,26 +263,26 @@ static int relayfs_open(struct inode *inode, struct file *filp)
 }
 
 /**
- *     relayfs_mmap - mmap file op for relayfs files
+ *     relay_file_mmap - mmap file op for relay files
  *     @filp: the file
  *     @vma: the vma describing what to map
  *
  *     Calls upon relay_mmap_buf to map the file into user space.
  */
-static int relayfs_mmap(struct file *filp, struct vm_area_struct *vma)
+static int relay_file_mmap(struct file *filp, struct vm_area_struct *vma)
 {
        struct rchan_buf *buf = filp->private_data;
        return relay_mmap_buf(buf, vma);
 }
 
 /**
- *     relayfs_poll - poll file op for relayfs files
+ *     relay_file_poll - poll file op for relay files
  *     @filp: the file
  *     @wait: poll table
  *
  *     Poll implemention.
  */
-static unsigned int relayfs_poll(struct file *filp, poll_table *wait)
+static unsigned int relay_file_poll(struct file *filp, poll_table *wait)
 {
        unsigned int mask = 0;
        struct rchan_buf *buf = filp->private_data;
@@ -301,14 +300,14 @@ static unsigned int relayfs_poll(struct file *filp, poll_table *wait)
 }
 
 /**
- *     relayfs_release - release file op for relayfs files
+ *     relay_file_release - release file op for relay files
  *     @inode: the inode
  *     @filp: the file
  *
  *     Decrements the channel refcount, as the filesystem is
  *     no longer using it.
  */
-static int relayfs_release(struct inode *inode, struct file *filp)
+static int relay_file_release(struct inode *inode, struct file *filp)
 {
        struct rchan_buf *buf = filp->private_data;
        kref_put(&buf->kref, relay_remove_buf);
@@ -317,11 +316,11 @@ static int relayfs_release(struct inode *inode, struct file *filp)
 }
 
 /**
- *     relayfs_read_consume - update the consumed count for the buffer
+ *     relay_file_read_consume - update the consumed count for the buffer
  */
-static void relayfs_read_consume(struct rchan_buf *buf,
-                                size_t read_pos,
-                                size_t bytes_consumed)
+static void relay_file_read_consume(struct rchan_buf *buf,
+                                   size_t read_pos,
+                                   size_t bytes_consumed)
 {
        size_t subbuf_size = buf->chan->subbuf_size;
        size_t n_subbufs = buf->chan->n_subbufs;
@@ -344,9 +343,9 @@ static void relayfs_read_consume(struct rchan_buf *buf,
 }
 
 /**
- *     relayfs_read_avail - boolean, are there unconsumed bytes available?
+ *     relay_file_read_avail - boolean, are there unconsumed bytes available?
  */
-static int relayfs_read_avail(struct rchan_buf *buf, size_t read_pos)
+static int relay_file_read_avail(struct rchan_buf *buf, size_t read_pos)
 {
        size_t bytes_produced, bytes_consumed, write_offset;
        size_t subbuf_size = buf->chan->subbuf_size;
@@ -377,16 +376,16 @@ static int relayfs_read_avail(struct rchan_buf *buf, size_t read_pos)
        if (bytes_produced == bytes_consumed)
                return 0;
 
-       relayfs_read_consume(buf, read_pos, 0);
+       relay_file_read_consume(buf, read_pos, 0);
 
        return 1;
 }
 
 /**
- *     relayfs_read_subbuf_avail - return bytes available in sub-buffer
+ *     relay_file_read_subbuf_avail - return bytes available in sub-buffer
  */
-static size_t relayfs_read_subbuf_avail(size_t read_pos,
-                                       struct rchan_buf *buf)
+static size_t relay_file_read_subbuf_avail(size_t read_pos,
+                                          struct rchan_buf *buf)
 {
        size_t padding, avail = 0;
        size_t read_subbuf, read_offset, write_subbuf, write_offset;
@@ -408,14 +407,14 @@ static size_t relayfs_read_subbuf_avail(size_t read_pos,
 }
 
 /**
- *     relayfs_read_start_pos - find the first available byte to read
+ *     relay_file_read_start_pos - find the first available byte to read
  *
  *     If the read_pos is in the middle of padding, return the
  *     position of the first actually available byte, otherwise
  *     return the original value.
  */
-static size_t relayfs_read_start_pos(size_t read_pos,
-                                    struct rchan_buf *buf)
+static size_t relay_file_read_start_pos(size_t read_pos,
+                                       struct rchan_buf *buf)
 {
        size_t read_subbuf, padding, padding_start, padding_end;
        size_t subbuf_size = buf->chan->subbuf_size;
@@ -434,11 +433,11 @@ static size_t relayfs_read_start_pos(size_t read_pos,
 }
 
 /**
- *     relayfs_read_end_pos - return the new read position
+ *     relay_file_read_end_pos - return the new read position
  */
-static size_t relayfs_read_end_pos(struct rchan_buf *buf,
-                                  size_t read_pos,
-                                  size_t count)
+static size_t relay_file_read_end_pos(struct rchan_buf *buf,
+                                     size_t read_pos,
+                                     size_t count)
 {
        size_t read_subbuf, padding, end_pos;
        size_t subbuf_size = buf->chan->subbuf_size;
@@ -457,7 +456,7 @@ static size_t relayfs_read_end_pos(struct rchan_buf *buf,
 }
 
 /**
- *     relayfs_read - read file op for relayfs files
+ *     relay_file_read - read file op for relay files
  *     @filp: the file
  *     @buffer: the userspace buffer
  *     @count: number of bytes to read
@@ -466,10 +465,10 @@ static size_t relayfs_read_end_pos(struct rchan_buf *buf,
  *     Reads count bytes or the number of bytes available in the
  *     current sub-buffer being read, whichever is smaller.
  */
-static ssize_t relayfs_read(struct file *filp,
-                           char __user *buffer,
-                           size_t count,
-                           loff_t *ppos)
+static ssize_t relay_file_read(struct file *filp,
+                              char __user *buffer,
+                              size_t count,
+                              loff_t *ppos)
 {
        struct rchan_buf *buf = filp->private_data;
        struct inode *inode = filp->f_dentry->d_inode;
@@ -477,12 +476,12 @@ static ssize_t relayfs_read(struct file *filp,
        ssize_t ret = 0;
        void *from;
 
-       down(&inode->i_sem);
-       if(!relayfs_read_avail(buf, *ppos))
+       mutex_lock(&inode->i_mutex);
+       if(!relay_file_read_avail(buf, *ppos))
                goto out;
 
-       read_start = relayfs_read_start_pos(*ppos, buf);
-       avail = relayfs_read_subbuf_avail(read_start, buf);
+       read_start = relay_file_read_start_pos(*ppos, buf);
+       avail = relay_file_read_subbuf_avail(read_start, buf);
        if (!avail)
                goto out;
 
@@ -492,55 +491,25 @@ static ssize_t relayfs_read(struct file *filp,
                ret = -EFAULT;
                goto out;
        }
-       relayfs_read_consume(buf, read_start, count);
-       *ppos = relayfs_read_end_pos(buf, read_start, count);
+       relay_file_read_consume(buf, read_start, count);
+       *ppos = relay_file_read_end_pos(buf, read_start, count);
 out:
-       up(&inode->i_sem);
+       mutex_unlock(&inode->i_mutex);
        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,
-       .mmap           = relayfs_mmap,
-       .read           = relayfs_read,
+struct file_operations relay_file_operations = {
+       .open           = relay_file_open,
+       .poll           = relay_file_poll,
+       .mmap           = relay_file_mmap,
+       .read           = relay_file_read,
        .llseek         = no_llseek,
-       .release        = relayfs_release,
+       .release        = relay_file_release,
 };
 
 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)
@@ -584,31 +553,23 @@ 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)
 module_exit(exit_relayfs_fs)
 
-EXPORT_SYMBOL_GPL(relayfs_file_operations);
+EXPORT_SYMBOL_GPL(relay_file_operations);
 EXPORT_SYMBOL_GPL(relayfs_create_dir);
 EXPORT_SYMBOL_GPL(relayfs_remove_dir);
 EXPORT_SYMBOL_GPL(relayfs_create_file);