On Wed, Jul 21, 2010 at 02:45:41PM +0300, Artem Bityutskiy wrote: > On Wed, 2010-07-21 at 12:31 +0300, Artem Bityutskiy wrote: > > spin_unlock(&inode_lock); > > + > > + if (wakeup_bdi) { > > + spin_lock(&bdi->wb_lock); > > + if (!bdi->wb.task) > > + wake_up_process(default_backing_dev_info.wb.task); > > + else > > + wake_up_process(bdi->wb.task); > > + spin_unlock(&bdi->wb_lock); > > + } > > } > > Dave, > > I do not know whether this stuff will end up in upstream, I did not get > any feed back from Jens so far. But if it will, I'd like to let you know > that the code quoted above is similar to the 'bdi_queue_work()' > function. And the purpose is very similar. But you added a > 'trace_writeback_nothread()' call to 'bdi_queue_work()', and I think a > similar call has to be here. Yes, that seems like a sane thing to do ;) > Can I call 'trace_writeback_nothread()'? I guess not. Should I create > another trace point? Any hints/instructions? The bdi_queue_work() tracepoints expect a work structure to be passed in, so you can't use them (or that class of event) if you don't have a struct wb_writeback_work. For __mark_inode_dirty(), I'd add two new tracepoints like: DEFINE_WRITEBACK_EVENT(writeback_wakeup); DEFINE_WRITEBACK_EVENT(writeback_wakeup_nothread); and place them as: if (wakeup_bdi) { trace_writeback_wakeup(bdi) spin_lock(&bdi->wb_lock); if (!bdi->wb.task) {{ trace_writeback_wakeup_nothread(bdi); wake_up_process(default_backing_dev_info.wb.task); } else wake_up_process(bdi->wb.task); spin_unlock(&bdi->wb_lock); } Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx -- 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