]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/ext2/ialloc.c
ext3: wait on all pending commits in ext3_sync_fs
[linux-2.6-omap-h63xx.git] / fs / ext2 / ialloc.c
index 2cb545bf0f3c42dba436626c2832bed511e1f7fb..f597413467605ab8f6c7a1cef2cc0e1d269c7b9d 100644 (file)
@@ -75,11 +75,9 @@ static void ext2_release_inode(struct super_block *sb, int group, int dir)
        }
 
        spin_lock(sb_bgl_lock(EXT2_SB(sb), group));
-       desc->bg_free_inodes_count =
-               cpu_to_le16(le16_to_cpu(desc->bg_free_inodes_count) + 1);
+       le16_add_cpu(&desc->bg_free_inodes_count, 1);
        if (dir)
-               desc->bg_used_dirs_count =
-                       cpu_to_le16(le16_to_cpu(desc->bg_used_dirs_count) - 1);
+               le16_add_cpu(&desc->bg_used_dirs_count, -1);
        spin_unlock(sb_bgl_lock(EXT2_SB(sb), group));
        if (dir)
                percpu_counter_dec(&EXT2_SB(sb)->s_dirs_counter);
@@ -177,7 +175,6 @@ static void ext2_preread_inode(struct inode *inode)
        unsigned long block_group;
        unsigned long offset;
        unsigned long block;
-       struct buffer_head *bh;
        struct ext2_group_desc * gdp;
        struct backing_dev_info *bdi;
 
@@ -188,7 +185,7 @@ static void ext2_preread_inode(struct inode *inode)
                return;
 
        block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
-       gdp = ext2_get_group_desc(inode->i_sb, block_group, &bh);
+       gdp = ext2_get_group_desc(inode->i_sb, block_group, NULL);
        if (gdp == NULL)
                return;
 
@@ -217,11 +214,10 @@ static int find_group_dir(struct super_block *sb, struct inode *parent)
        int ngroups = EXT2_SB(sb)->s_groups_count;
        int avefreei = ext2_count_free_inodes(sb) / ngroups;
        struct ext2_group_desc *desc, *best_desc = NULL;
-       struct buffer_head *bh, *best_bh = NULL;
        int group, best_group = -1;
 
        for (group = 0; group < ngroups; group++) {
-               desc = ext2_get_group_desc (sb, group, &bh);
+               desc = ext2_get_group_desc (sb, group, NULL);
                if (!desc || !desc->bg_free_inodes_count)
                        continue;
                if (le16_to_cpu(desc->bg_free_inodes_count) < avefreei)
@@ -231,7 +227,6 @@ static int find_group_dir(struct super_block *sb, struct inode *parent)
                     le16_to_cpu(best_desc->bg_free_blocks_count))) {
                        best_group = group;
                        best_desc = desc;
-                       best_bh = bh;
                }
        }
        if (!best_desc)
@@ -256,7 +251,7 @@ static int find_group_dir(struct super_block *sb, struct inode *parent)
  * it has too few free inodes left (min_inodes) or 
  * it has too few free blocks left (min_blocks) or 
  * it's already running too large debt (max_debt). 
- * Parent's group is prefered, if it doesn't satisfy these 
+ * Parent's group is preferred, if it doesn't satisfy these 
  * conditions we search cyclically through the rest. If none 
  * of the groups look good we just look for a group with more 
  * free inodes than average (starting at parent's group). 
@@ -284,7 +279,6 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
        int max_debt, max_dirs, min_blocks, min_inodes;
        int group = -1, i;
        struct ext2_group_desc *desc;
-       struct buffer_head *bh;
 
        freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter);
        avefreei = freei / ngroups;
@@ -295,7 +289,6 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
        if ((parent == sb->s_root->d_inode) ||
            (EXT2_I(parent)->i_flags & EXT2_TOPDIR_FL)) {
                struct ext2_group_desc *best_desc = NULL;
-               struct buffer_head *best_bh = NULL;
                int best_ndir = inodes_per_group;
                int best_group = -1;
 
@@ -303,7 +296,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
                parent_group = (unsigned)group % ngroups;
                for (i = 0; i < ngroups; i++) {
                        group = (parent_group + i) % ngroups;
-                       desc = ext2_get_group_desc (sb, group, &bh);
+                       desc = ext2_get_group_desc (sb, group, NULL);
                        if (!desc || !desc->bg_free_inodes_count)
                                continue;
                        if (le16_to_cpu(desc->bg_used_dirs_count) >= best_ndir)
@@ -315,11 +308,9 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
                        best_group = group;
                        best_ndir = le16_to_cpu(desc->bg_used_dirs_count);
                        best_desc = desc;
-                       best_bh = bh;
                }
                if (best_group >= 0) {
                        desc = best_desc;
-                       bh = best_bh;
                        group = best_group;
                        goto found;
                }
@@ -345,7 +336,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
 
        for (i = 0; i < ngroups; i++) {
                group = (parent_group + i) % ngroups;
-               desc = ext2_get_group_desc (sb, group, &bh);
+               desc = ext2_get_group_desc (sb, group, NULL);
                if (!desc || !desc->bg_free_inodes_count)
                        continue;
                if (sbi->s_debts[group] >= max_debt)
@@ -362,7 +353,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
 fallback:
        for (i = 0; i < ngroups; i++) {
                group = (parent_group + i) % ngroups;
-               desc = ext2_get_group_desc (sb, group, &bh);
+               desc = ext2_get_group_desc (sb, group, NULL);
                if (!desc || !desc->bg_free_inodes_count)
                        continue;
                if (le16_to_cpu(desc->bg_free_inodes_count) >= avefreei)
@@ -389,14 +380,13 @@ static int find_group_other(struct super_block *sb, struct inode *parent)
        int parent_group = EXT2_I(parent)->i_block_group;
        int ngroups = EXT2_SB(sb)->s_groups_count;
        struct ext2_group_desc *desc;
-       struct buffer_head *bh;
        int group, i;
 
        /*
         * Try to place the inode in its parent directory
         */
        group = parent_group;
-       desc = ext2_get_group_desc (sb, group, &bh);
+       desc = ext2_get_group_desc (sb, group, NULL);
        if (desc && le16_to_cpu(desc->bg_free_inodes_count) &&
                        le16_to_cpu(desc->bg_free_blocks_count))
                goto found;
@@ -420,7 +410,7 @@ static int find_group_other(struct super_block *sb, struct inode *parent)
                group += i;
                if (group >= ngroups)
                        group -= ngroups;
-               desc = ext2_get_group_desc (sb, group, &bh);
+               desc = ext2_get_group_desc (sb, group, NULL);
                if (desc && le16_to_cpu(desc->bg_free_inodes_count) &&
                                le16_to_cpu(desc->bg_free_blocks_count))
                        goto found;
@@ -434,7 +424,7 @@ static int find_group_other(struct super_block *sb, struct inode *parent)
        for (i = 0; i < ngroups; i++) {
                if (++group >= ngroups)
                        group = 0;
-               desc = ext2_get_group_desc (sb, group, &bh);
+               desc = ext2_get_group_desc (sb, group, NULL);
                if (desc && le16_to_cpu(desc->bg_free_inodes_count))
                        goto found;
        }
@@ -542,18 +532,16 @@ got:
                goto fail;
        }
 
-       percpu_counter_mod(&sbi->s_freeinodes_counter, -1);
+       percpu_counter_add(&sbi->s_freeinodes_counter, -1);
        if (S_ISDIR(mode))
                percpu_counter_inc(&sbi->s_dirs_counter);
 
        spin_lock(sb_bgl_lock(sbi, group));
-       gdp->bg_free_inodes_count =
-                cpu_to_le16(le16_to_cpu(gdp->bg_free_inodes_count) - 1);
+       le16_add_cpu(&gdp->bg_free_inodes_count, -1);
        if (S_ISDIR(mode)) {
                if (sbi->s_debts[group] < 255)
                        sbi->s_debts[group]++;
-               gdp->bg_used_dirs_count =
-                       cpu_to_le16(le16_to_cpu(gdp->bg_used_dirs_count) + 1);
+               le16_add_cpu(&gdp->bg_used_dirs_count, 1);
        } else {
                if (sbi->s_debts[group])
                        sbi->s_debts[group]--;
@@ -589,11 +577,8 @@ got:
        ei->i_file_acl = 0;
        ei->i_dir_acl = 0;
        ei->i_dtime = 0;
+       ei->i_block_alloc_info = NULL;
        ei->i_block_group = group;
-       ei->i_next_alloc_block = 0;
-       ei->i_next_alloc_goal = 0;
-       ei->i_prealloc_block = 0;
-       ei->i_prealloc_count = 0;
        ei->i_dir_start_lookup = 0;
        ei->i_state = EXT2_STATE_NEW;
        ext2_set_inode_flags(inode);