projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
326ba50
)
nilfs2: fix preempt count underflow in nilfs_btnode_prepare_change_key
author
Ryusuke Konishi
<
[email protected]
>
Sat, 29 Aug 2009 19:21:41 +0000
(
04:21
+0900)
committer
Ryusuke Konishi
<
[email protected]
>
Mon, 31 Aug 2009 03:03:06 +0000
(12:03 +0900)
This will fix the following preempt count underflow reported from
users with the title "[NILFS users] segctord problem" (Message-ID:
<
[email protected]
> and Message-ID:
<
[email protected]
>):
WARNING: at kernel/sched.c:4890 sub_preempt_count+0x95/0xa0()
Hardware name: HP Compaq 6530b (KR980UT#ABC)
Modules linked in: bridge stp llc bnep rfcomm l2cap xfs exportfs nilfs2 cowloop loop vboxnetadp vboxnetflt vboxdrv btusb bluetooth uvcvideo videodev v4l1_compat v4l2_compat_ioctl32 arc4 snd_hda_codec_analog ecb iwlagn iwlcore rfkill lib80211 mac80211 snd_hda_intel snd_hda_codec ehci_hcd uhci_hcd usbcore snd_hwdep snd_pcm tg3 cfg80211 psmouse snd_timer joydev libphy ohci1394 snd_page_alloc hp_accel lis3lv02d ieee1394 led_class i915 drm i2c_algo_bit video backlight output i2c_core dm_crypt dm_mod
Pid: 4197, comm: segctord Not tainted 2.6.30-gentoo-r4-64 #7
Call Trace:
[<
ffffffff8023fa05
>] ? sub_preempt_count+0x95/0xa0
[<
ffffffff802470f8
>] warn_slowpath_common+0x78/0xd0
[<
ffffffff8024715f
>] warn_slowpath_null+0xf/0x20
[<
ffffffff8023fa05
>] sub_preempt_count+0x95/0xa0
[<
ffffffffa04ce4db
>] nilfs_btnode_prepare_change_key+0x11b/0x190 [nilfs2]
[<
ffffffffa04d01ad
>] nilfs_btree_assign_p+0x19d/0x1e0 [nilfs2]
[<
ffffffffa04d10ad
>] nilfs_btree_assign+0xbd/0x130 [nilfs2]
[<
ffffffffa04cead7
>] nilfs_bmap_assign+0x47/0x70 [nilfs2]
[<
ffffffffa04d9bc6
>] nilfs_segctor_do_construct+0x956/0x20f0 [nilfs2]
[<
ffffffff805ac8e2
>] ? _spin_unlock_irqrestore+0x12/0x40
[<
ffffffff803c06e0
>] ? __up_write+0xe0/0x150
[<
ffffffff80262959
>] ? up_write+0x9/0x10
[<
ffffffffa04ce9f3
>] ? nilfs_bmap_test_and_clear_dirty+0x43/0x60 [nilfs2]
[<
ffffffffa04cd627
>] ? nilfs_mdt_fetch_dirty+0x27/0x60 [nilfs2]
[<
ffffffffa04db5fc
>] nilfs_segctor_construct+0x8c/0xd0 [nilfs2]
[<
ffffffffa04dc3dc
>] nilfs_segctor_thread+0x15c/0x3a0 [nilfs2]
[<
ffffffffa04dbe20
>] ? nilfs_construction_timeout+0x0/0x10 [nilfs2]
[<
ffffffff80252633
>] ? add_timer+0x13/0x20
[<
ffffffff802370da
>] ? __wake_up_common+0x5a/0x90
[<
ffffffff8025e960
>] ? autoremove_wake_function+0x0/0x40
[<
ffffffffa04dc280
>] ? nilfs_segctor_thread+0x0/0x3a0 [nilfs2]
[<
ffffffffa04dc280
>] ? nilfs_segctor_thread+0x0/0x3a0 [nilfs2]
[<
ffffffff8025e556
>] kthread+0x56/0x90
[<
ffffffff8020cdea
>] child_rip+0xa/0x20
[<
ffffffff8025e500
>] ? kthread+0x0/0x90
[<
ffffffff8020cde0
>] ? child_rip+0x0/0x20
This problem was caused due to a missing radix_tree_preload() call in
the retry path of nilfs_btnode_prepare_change_key() function.
Reported-by: Eric A <
[email protected]
>
Reported-by: Jerome Poulin <
[email protected]
>
Signed-off-by: Ryusuke Konishi <
[email protected]
>
Tested-by: Jerome Poulin <
[email protected]
>
Cc:
[email protected]
fs/nilfs2/btnode.c
patch
|
blob
|
history
diff --git
a/fs/nilfs2/btnode.c
b/fs/nilfs2/btnode.c
index 7e0b61be212e8a18476518db9507d2d018f7fed6..c668bca579c1baca6c25fc345462d881b227edb4 100644
(file)
--- a/
fs/nilfs2/btnode.c
+++ b/
fs/nilfs2/btnode.c
@@
-209,6
+209,7
@@
int nilfs_btnode_prepare_change_key(struct address_space *btnc,
* We cannot call radix_tree_preload for the kernels older
* than 2.6.23, because it is not exported for modules.
*/
+retry:
err = radix_tree_preload(GFP_NOFS & ~__GFP_HIGHMEM);
if (err)
goto failed_unlock;
@@
-219,7
+220,6
@@
int nilfs_btnode_prepare_change_key(struct address_space *btnc,
(unsigned long long)oldkey,
(unsigned long long)newkey);
-retry:
spin_lock_irq(&btnc->tree_lock);
err = radix_tree_insert(&btnc->page_tree, newkey, obh->b_page);
spin_unlock_irq(&btnc->tree_lock);