On Tue, 2009-05-26 at 11:33 +0200, Jens Axboe wrote: > Hi, > > Here's the 7th version of the writeback patches. Changes since > v5/v6: > > - Move the sync_supers() to the global bdi_forker_task() thread, so we > don't writeback the supers from all the bdi kupdated() tasks. > - Make bdi_start_writeback() and bdi_writeback_all() be sync when called > with WB_SYNC_ALL only. > - Shuffle some more things around to make a cleaner series. The sync vs > async nature of bdi_writeback_all() and bdi_start_writeback() isn't > consistent through the series, but otherwise things should be sane. > > I'd appreciate if Richard and Yanmin could re-run testing with this, > just to make sure that things are sane. For ease of patching, I've > put the full diff here: > > http://kernel.dk/writeback-v7.patch I ported it to 2.6.30-rc6 with some change in file mm/page-write.c, so I could compare with old data. See the attachment. The new testing hits the hang issue again. It seems there is still a race. INFO: task sync:30013 blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. sync D ffffc20000011300 4736 30013 28019 ffffffff8093e350 0000000000000086 0000000000000000 0000000000000000 0000000000021220 0000000000004000 0000000000011300 000000000000c868 ffff880000016c48 ffffe20002934b30 ffff8800720b3780 ffff8800720b3b08 Call Trace: [] ? bdi_sched_wait+0x0/0xd [] ? schedule+0x9/0x1e [] ? bdi_sched_wait+0x9/0xd [] ? __wait_on_bit+0x41/0x71 [] ? bdi_sched_wait+0x0/0xd [] ? out_of_line_wait_on_bit+0x6b/0x77 [] ? wake_bit_function+0x0/0x23 [] ? __wake_up+0x30/0x44 [] ? bdi_writeback_all+0x20b/0x24c [] ? pagevec_lookup_tag+0x1a/0x21 [] ? wait_on_page_writeback_range+0xce/0x11b [] ? generic_sync_sb_inodes+0x36/0xe1 [] ? sync_inodes_sb+0x83/0x88 [] ? __sync_inodes+0x46/0x8f [] ? do_sync+0x36/0x5a [] ? sys_sync+0xe/0x14 [] ? system_call_fastpath+0x16/0x1b