vserver 2.0 rc7
[linux-2.6.git] / fs / ext3 / ialloc.c
index 58dbb6e..555c15d 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/random.h>
 #include <linux/bitops.h>
 #include <linux/vs_dlimit.h>
+#include <linux/vserver/xid.h>
 
 #include <asm/byteorder.h>
 
@@ -446,11 +447,7 @@ struct inode *ext3_new_inode(handle_t *handle, struct inode * dir, int mode)
        if (!inode)
                return ERR_PTR(-ENOMEM);
 
-       if (sb->s_flags & MS_TAGXID)
-               inode->i_xid = vx_current_xid();
-       else
-               inode->i_xid = 0;
-
+       inode->i_xid = vx_current_fsxid(sb);
        if (DLIMIT_ALLOC_INODE(sb, inode->i_xid)) {
                err = -ENOSPC;
                goto out;
@@ -472,9 +469,12 @@ struct inode *ext3_new_inode(handle_t *handle, struct inode * dir, int mode)
                goto out;
 
        for (i = 0; i < sbi->s_groups_count; i++) {
+               err = -EIO;
+
                gdp = ext3_get_group_desc(sb, group, &bh2);
+               if (!gdp)
+                       goto fail;
 
-               err = -EIO;
                brelse(bitmap_bh);
                bitmap_bh = read_inode_bitmap(sb, group);
                if (!bitmap_bh)
@@ -486,11 +486,9 @@ repeat_in_this_group:
                ino = ext3_find_next_zero_bit((unsigned long *)
                                bitmap_bh->b_data, EXT3_INODES_PER_GROUP(sb), ino);
                if (ino < EXT3_INODES_PER_GROUP(sb)) {
-                       int credits = 0;
 
                        BUFFER_TRACE(bitmap_bh, "get_write_access");
-                       err = ext3_journal_get_write_access_credits(handle,
-                                                       bitmap_bh, &credits);
+                       err = ext3_journal_get_write_access(handle, bitmap_bh);
                        if (err)
                                goto fail;
 
@@ -506,7 +504,7 @@ repeat_in_this_group:
                                goto got;
                        }
                        /* we lost it */
-                       journal_release_buffer(handle, bitmap_bh, credits);
+                       journal_release_buffer(handle, bitmap_bh);
 
                        if (++ino < EXT3_INODES_PER_GROUP(sb))
                                goto repeat_in_this_group;
@@ -573,8 +571,6 @@ got:
        inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC;
 
        memset(ei->i_data, 0, sizeof(ei->i_data));
-       ei->i_next_alloc_block = 0;
-       ei->i_next_alloc_goal = 0;
        ei->i_dir_start_lookup = 0;
        ei->i_disksize = 0;
 
@@ -593,11 +589,7 @@ got:
        ei->i_file_acl = 0;
        ei->i_dir_acl = 0;
        ei->i_dtime = 0;
-       ei->i_rsv_window.rsv_start = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
-       ei->i_rsv_window.rsv_end = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
-       atomic_set(&ei->i_rsv_window.rsv_goal_size, EXT3_DEFAULT_RESERVE_BLOCKS);
-       atomic_set(&ei->i_rsv_window.rsv_alloc_hit, 0);
-       seqlock_init(&ei->i_rsv_window.rsv_seqlock);
+       ei->i_block_alloc_info = NULL;
        ei->i_block_group = group;
 
        ext3_set_inode_flags(inode);