Hello,
while testing FhGFS I got a stack trace that seems to point out that
bdi_congested() tries to call an uninitialized bdi->congested_fn().
So I checked where ->congested_fn() is initialized - with exception of
btrfs I do not find a file system that does that at all. But then
bdi_init(), which is called by most file systems for initialization also
does *not* initialize it. So either I'm missing something, or almost all
bdi users have a bug?
Thanks,
Bernd
[ 351.110903] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC
[...]
[ 351.112022] Call Trace:
[ 351.112022] [<ffffffff8139a86d>] ? _raw_spin_lock_irq+0x1d/0x60
[ 351.112022] [<ffffffff8139b0f0>] ? _raw_spin_unlock_irq+0x30/0x50
[ 351.112022] [<ffffffff81112af3>] shrink_inactive_list+0x193/0x430
[ 351.112022] [<ffffffff8110871a>] ? determine_dirtyable_memory+0x1a/0x30
[ 351.112022] [<ffffffff811131fe>] shrink_zone+0x46e/0x5e0
[ 351.112022] [<ffffffff81114689>] try_to_free_pages+0x1b9/0x560
[ 351.112022] [<ffffffff8114c395>] ? __slab_alloc+0x405/0x5c0
[ 351.112022] [<ffffffff811075af>] __alloc_pages_nodemask+0x4af/0x860
[ 351.112022] [<ffffffff8114c8a5>] ? __kmalloc_node+0x145/0x210
[ 351.112022] [<ffffffff81140933>] alloc_pages_current+0x83/0x100
[ 351.112022] [<ffffffff811336da>] __vmalloc_node_range+0x16a/0x210
[...]
[ 351.112022] RIP [<ffffffff8111247f>] shrink_page_list+0x47f/0x960
(gdb) l *(shrink_page_list+0x47f)
0xffffffff8111247f is in shrink_page_list (include/linux/backing-dev.h:266).
261 int writeback_in_progress(struct backing_dev_info *bdi);
262
263 static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
264 {
265 if (bdi->congested_fn)
266 return bdi->congested_fn(bdi->congested_data, bdi_bits);
267 return (bdi->state & bdi_bits);
268 }
269
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html