fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / fs / ocfs2 / dlm / dlmfs.c
index dd2d24d..0249fc0 100644 (file)
@@ -44,6 +44,7 @@
 #include <linux/string.h>
 #include <linux/smp_lock.h>
 #include <linux/backing-dev.h>
+#include <linux/vs_tag.h>
 
 #include <asm/uaccess.h>
 
@@ -66,7 +67,7 @@ static struct file_operations dlmfs_file_operations;
 static struct inode_operations dlmfs_dir_inode_operations;
 static struct inode_operations dlmfs_root_inode_operations;
 static struct inode_operations dlmfs_file_inode_operations;
-static kmem_cache_t *dlmfs_inode_cache;
+static struct kmem_cache *dlmfs_inode_cache;
 
 struct workqueue_struct *user_dlm_worker;
 
@@ -116,7 +117,7 @@ static int dlmfs_file_open(struct inode *inode,
         * doesn't make sense for LVB writes. */
        file->f_flags &= ~O_APPEND;
 
-       fp = kmalloc(sizeof(*fp), GFP_KERNEL);
+       fp = kmalloc(sizeof(*fp), GFP_NOFS);
        if (!fp) {
                status = -ENOMEM;
                goto bail;
@@ -176,7 +177,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
        int bytes_left;
        ssize_t readlen;
        char *lvb_buf;
-       struct inode *inode = filp->f_dentry->d_inode;
+       struct inode *inode = filp->f_path.dentry->d_inode;
 
        mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
                inode->i_ino, count, *ppos);
@@ -196,7 +197,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
        else
                readlen = count - *ppos;
 
-       lvb_buf = kmalloc(readlen, GFP_KERNEL);
+       lvb_buf = kmalloc(readlen, GFP_NOFS);
        if (!lvb_buf)
                return -ENOMEM;
 
@@ -220,7 +221,7 @@ static ssize_t dlmfs_file_write(struct file *filp,
        int bytes_left;
        ssize_t writelen;
        char *lvb_buf;
-       struct inode *inode = filp->f_dentry->d_inode;
+       struct inode *inode = filp->f_path.dentry->d_inode;
 
        mlog(0, "inode %lu, count = %zu, *ppos = %llu\n",
                inode->i_ino, count, *ppos);
@@ -240,7 +241,7 @@ static ssize_t dlmfs_file_write(struct file *filp,
        else
                writelen = count - *ppos;
 
-       lvb_buf = kmalloc(writelen, GFP_KERNEL);
+       lvb_buf = kmalloc(writelen, GFP_NOFS);
        if (!lvb_buf)
                return -ENOMEM;
 
@@ -257,7 +258,7 @@ static ssize_t dlmfs_file_write(struct file *filp,
 }
 
 static void dlmfs_init_once(void *foo,
-                           kmem_cache_t *cachep,
+                           struct kmem_cache *cachep,
                            unsigned long flags)
 {
        struct dlmfs_inode_private *ip =
@@ -276,7 +277,7 @@ static struct inode *dlmfs_alloc_inode(struct super_block *sb)
 {
        struct dlmfs_inode_private *ip;
 
-       ip = kmem_cache_alloc(dlmfs_inode_cache, SLAB_NOFS);
+       ip = kmem_cache_alloc(dlmfs_inode_cache, GFP_NOFS);
        if (!ip)
                return NULL;
 
@@ -335,11 +336,11 @@ static struct inode *dlmfs_get_root_inode(struct super_block *sb)
                inode->i_mode = mode;
                inode->i_uid = current->fsuid;
                inode->i_gid = current->fsgid;
-               inode->i_blksize = PAGE_CACHE_SIZE;
+               inode->i_tag = dx_current_fstag(sb);
                inode->i_blocks = 0;
                inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info;
                inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-               inode->i_nlink++;
+               inc_nlink(inode);
 
                inode->i_fop = &simple_dir_operations;
                inode->i_op = &dlmfs_root_inode_operations;
@@ -362,7 +363,7 @@ static struct inode *dlmfs_get_inode(struct inode *parent,
        inode->i_mode = mode;
        inode->i_uid = current->fsuid;
        inode->i_gid = current->fsgid;
-       inode->i_blksize = PAGE_CACHE_SIZE;
+       inode->i_tag = dx_current_fstag(sb);
        inode->i_blocks = 0;
        inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info;
        inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
@@ -397,7 +398,7 @@ static struct inode *dlmfs_get_inode(struct inode *parent,
 
                /* directory inodes start off with i_nlink ==
                 * 2 (for "." entry) */
-               inode->i_nlink++;
+               inc_nlink(inode);
                break;
        }
 
@@ -451,7 +452,7 @@ static int dlmfs_mkdir(struct inode * dir,
        }
        ip->ip_dlm = dlm;
 
-       dir->i_nlink++;
+       inc_nlink(dir);
        d_instantiate(dentry, inode);
        dget(dentry);   /* Extra count - pin the dentry in core */
 
@@ -574,10 +575,10 @@ static struct inode_operations dlmfs_file_inode_operations = {
        .getattr        = simple_getattr,
 };
 
-static struct super_block *dlmfs_get_sb(struct file_system_type *fs_type,
-       int flags, const char *dev_name, void *data)
+static int dlmfs_get_sb(struct file_system_type *fs_type,
+       int flags, const char *dev_name, void *data, struct vfsmount *mnt)
 {
-       return get_sb_nodev(fs_type, flags, data, dlmfs_fill_super);
+       return get_sb_nodev(fs_type, flags, data, dlmfs_fill_super, mnt);
 }
 
 static struct file_system_type dlmfs_fs_type = {
@@ -596,7 +597,8 @@ static int __init init_dlmfs_fs(void)
 
        dlmfs_inode_cache = kmem_cache_create("dlmfs_inode_cache",
                                sizeof(struct dlmfs_inode_private),
-                               0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                               0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
+                                       SLAB_MEM_SPREAD),
                                dlmfs_init_once, NULL);
        if (!dlmfs_inode_cache)
                return -ENOMEM;
@@ -628,9 +630,7 @@ static void __exit exit_dlmfs_fs(void)
        flush_workqueue(user_dlm_worker);
        destroy_workqueue(user_dlm_worker);
 
-       if (kmem_cache_destroy(dlmfs_inode_cache))
-               printk(KERN_INFO "dlmfs_inode_cache: not all structures "
-                      "were freed\n");
+       kmem_cache_destroy(dlmfs_inode_cache);
 }
 
 MODULE_AUTHOR("Oracle");