From 80d5fce7f2e2ee900b79a393dd7e55b6aecc1b7c Mon Sep 17 00:00:00 2001 From: Tao Ma Date: Mon, 28 May 2012 18:20:59 -0400 Subject: [PATCH] --- yaml --- r: 309965 b: refs/heads/master c: 6f2e9f0e7d795214b9cf5a47724a273b705fd113 h: refs/heads/master i: 309963: d3c0d6864dd3fc29c8c0382e62eac5f2875d77a8 v: v3 --- [refs] | 2 +- trunk/fs/ext4/ialloc.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 55f1da67837c..33f207fa09ca 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8563000d3bf3ccfccce335c092a7c43078be8ffd +refs/heads/master: 6f2e9f0e7d795214b9cf5a47724a273b705fd113 diff --git a/trunk/fs/ext4/ialloc.c b/trunk/fs/ext4/ialloc.c index ea32d7e1d6e3..03583ab52e0e 100644 --- a/trunk/fs/ext4/ialloc.c +++ b/trunk/fs/ext4/ialloc.c @@ -797,7 +797,10 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, umode_t mode, ext4_itable_unused_set(sb, gdp, (EXT4_INODES_PER_GROUP(sb) - ino)); up_read(&grp->alloc_sem); + } else { + ext4_lock_group(sb, group); } + ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1); if (S_ISDIR(mode)) { ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1); @@ -811,8 +814,8 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, umode_t mode, ext4_inode_bitmap_csum_set(sb, group, gdp, inode_bitmap_bh, EXT4_INODES_PER_GROUP(sb) / 8); ext4_group_desc_csum_set(sb, group, gdp); - ext4_unlock_group(sb, group); } + ext4_unlock_group(sb, group); BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); err = ext4_handle_dirty_metadata(handle, NULL, inode_bitmap_bh);