patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / fs / ext2 / ialloc.c
index a2ea40c..299ea3f 100644 (file)
@@ -18,6 +18,9 @@
 #include <linux/backing-dev.h>
 #include <linux/buffer_head.h>
 #include <linux/random.h>
+#include <linux/vs_base.h>
+#include <linux/vs_dlimit.h>
+
 #include "ext2.h"
 #include "xattr.h"
 #include "acl.h"
@@ -124,6 +127,7 @@ void ext2_free_inode (struct inode * inode)
        if (!is_bad_inode(inode)) {
                /* Quota is already initialized in iput() */
                ext2_xattr_delete_inode(inode);
+               DLIMIT_FREE_INODE(sb, inode->i_xid);
                DQUOT_FREE_INODE(inode);
                DQUOT_DROP(inode);
        }
@@ -465,6 +469,10 @@ struct inode *ext2_new_inode(struct inode *dir, int mode)
        if (!inode)
                return ERR_PTR(-ENOMEM);
 
+       if (DLIMIT_ALLOC_INODE(sb, inode->i_xid)) {
+               err = -ENOSPC;
+               goto fail_dlim;
+       }
        ei = EXT2_I(inode);
        sbi = EXT2_SB(sb);
        es = sbi->s_es;
@@ -621,12 +629,15 @@ got:
        return inode;
 
 fail2:
+       DLIMIT_FREE_INODE(sb, inode->i_xid);    
        inode->i_flags |= S_NOQUOTA;
        inode->i_nlink = 0;
        iput(inode);
        return ERR_PTR(err);
 
 fail:
+       DLIMIT_FREE_INODE(sb, inode->i_xid);    
+fail_dlim:
        make_bad_inode(inode);
        iput(inode);
        return ERR_PTR(err);
@@ -664,7 +675,7 @@ unsigned long ext2_count_free_inodes (struct super_block * sb)
        }
        brelse(bitmap_bh);
        printk("ext2_count_free_inodes: stored = %lu, computed = %lu, %lu\n",
-               percpu_counter_read(EXT2_SB(sb)->s_freeinodes_counter),
+               percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter),
                desc_count, bitmap_count);
        unlock_super(sb);
        return desc_count;
@@ -725,7 +736,7 @@ void ext2_check_inodes_bitmap (struct super_block * sb)
                bitmap_count += x;
        }
        brelse(bitmap_bh);
-       if (percpu_counter_read(EXT2_SB(sb)->s_freeinodes_counter) !=
+       if (percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter) !=
                                bitmap_count)
                ext2_error(sb, "ext2_check_inodes_bitmap",
                            "Wrong free inodes count in super block, "