]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/ext2/ialloc.c
V4L/DVB (10168): sms1xxx: fix inverted gpio for lna control on tiger r2
[linux-2.6-omap-h63xx.git] / fs / ext2 / ialloc.c
index 08f647d8188de4651eb5b50be5dfc793e5e4bc44..c454d5db28a5aef07d2585d3a672bb5310c3fa4b 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);
@@ -539,13 +537,11 @@ got:
                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]--;
@@ -554,7 +550,7 @@ got:
 
        sb->s_dirt = 1;
        mark_buffer_dirty(bh2);
-       inode->i_uid = current->fsuid;
+       inode->i_uid = current_fsuid();
        if (test_opt (sb, GRPID))
                inode->i_gid = dir->i_gid;
        else if (dir->i_mode & S_ISGID) {
@@ -562,7 +558,7 @@ got:
                if (S_ISDIR(mode))
                        mode |= S_ISGID;
        } else
-               inode->i_gid = current->fsgid;
+               inode->i_gid = current_fsgid();
        inode->i_mode = mode;
 
        inode->i_ino = ino;
@@ -589,7 +585,10 @@ got:
        spin_lock(&sbi->s_next_gen_lock);
        inode->i_generation = sbi->s_next_generation++;
        spin_unlock(&sbi->s_next_gen_lock);
-       insert_inode_hash(inode);
+       if (insert_inode_locked(inode) < 0) {
+               err = -EINVAL;
+               goto fail_drop;
+       }
 
        if (DQUOT_ALLOC_INODE(inode)) {
                err = -EDQUOT;
@@ -616,6 +615,7 @@ fail_drop:
        DQUOT_DROP(inode);
        inode->i_flags |= S_NOQUOTA;
        inode->i_nlink = 0;
+       unlock_new_inode(inode);
        iput(inode);
        return ERR_PTR(err);