| From 10974fedd2891664ca8212ff7441e258cdfb0e6c Mon Sep 17 00:00:00 2001 |
| From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> |
| Date: Tue, 25 Aug 2009 22:36:05 -0400 |
| Subject: [PATCH 12/85] ext4: Add missing unlock_new_inode() call in extent migration code |
| |
| (cherry picked from commit a8526e84ac758ac6da45cf273aa1538a6a7aa3de) |
| |
| We need to unlock the new inode before iput. This patch fixes the |
| following warning when calling chattr +e to migrate a file to use |
| extents. It also fixes problems in when e4defrag attempts to |
| defragment an inode. |
| |
| [ 470.400044] ------------[ cut here ]------------ |
| [ 470.400065] WARNING: at fs/inode.c:1210 generic_delete_inode+0x65/0x16a() |
| [ 470.400072] Hardware name: N/A |
| ..... |
| ... |
| [ 470.400353] Pid: 4451, comm: chattr Not tainted 2.6.31-rc7-red-debug #4 |
| [ 470.400359] Call Trace: |
| [ 470.400372] [<ffffffff81037771>] warn_slowpath_common+0x77/0x8f |
| [ 470.400385] [<ffffffff81037798>] warn_slowpath_null+0xf/0x11 |
| [ 470.400395] [<ffffffff810b7f28>] generic_delete_inode+0x65/0x16a |
| [ 470.400405] [<ffffffff810b8044>] generic_drop_inode+0x17/0x1bd |
| [ 470.400413] [<ffffffff810b7083>] iput+0x61/0x65 |
| [ 470.400455] [<ffffffffa003b229>] ext4_ext_migrate+0x5eb/0x66a [ext4] |
| [ 470.400492] [<ffffffffa002b1f8>] ext4_ioctl+0x340/0x756 [ext4] |
| [ 470.400507] [<ffffffff810b1a91>] vfs_ioctl+0x1d/0x82 |
| [ 470.400517] [<ffffffff810b1ff0>] do_vfs_ioctl+0x483/0x4c9 |
| [ 470.400527] [<ffffffff81059c30>] ? trace_hardirqs_on+0xd/0xf |
| [ 470.400537] [<ffffffff810b2087>] sys_ioctl+0x51/0x74 |
| [ 470.400549] [<ffffffff8100ba6b>] system_call_fastpath+0x16/0x1b |
| [ 470.400557] ---[ end trace ab85723542352dac ]--- |
| |
| Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| --- |
| fs/ext4/migrate.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/ext4/migrate.c |
| +++ b/fs/ext4/migrate.c |
| @@ -618,7 +618,7 @@ err_out: |
| tmp_inode->i_nlink = 0; |
| |
| ext4_journal_stop(handle); |
| - |
| + unlock_new_inode(tmp_inode); |
| iput(tmp_inode); |
| |
| return retval; |