On Wed, Jul 31, 2013 at 06:33:32AM -0400, Tejun Heo wrote: > Hello, > > On Wed, Jul 31, 2013 at 09:24:34AM +0800, Shaohua Li wrote: > > stripe is the work unit actually. As I said, if I queue a work for each stripe, > > just queue_work() will make the system blast because of the pwq->pool->lock > > contention. dispatching one work has another side effect that I can't add block > > Hmmm.... I see. I'm not familiar with the code base and could be > missing something but how does the custom stripe dispatch queue > synchronize? Doesn't that make use of a lock anyway? If so, how > would scheduling separate work items be worse? It does have lock, but when a stripe is queued to handle, no lock is required. So the workqueue lock will be high contended. > Also, can you please > elaborate the block plug part? Basically I do: blk_start_plug() handle_stripe() //may dispatch request blk_end_plug() If only handle one stripe between block plug, the plug is useless, so I need handle several stripes. Thanks, Shaohua -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html