On Sat, Jul 24, 2010 at 01:39:54AM +0800, Jan Kara wrote: > On Thu 22-07-10 13:09:33, Wu Fengguang wrote: > > writeback_inodes_wb()/__writeback_inodes_sb() are not agressive in that > > they only populate b_io when necessary at entrance time. When the queued > > set of inodes are all synced, they just return, possibly with > > wbc.nr_to_write > 0. > > > > For kupdate and background writeback, there may be more eligible inodes > > sitting in b_dirty when the current set of b_io inodes are completed. So > > it is necessary to try another round of writeback as long as we made some > > progress in this round. When there are no more eligible inodes, no more > > inodes will be enqueued in queue_io(), hence nothing could/will be > > synced and we may safely bail. > > > > This will livelock sync when there are heavy dirtiers. However in that case > > sync will already be livelocked w/o this patch, as the current livelock > > avoidance code is virtually a no-op (for one thing, wb_time should be > > set statically at sync start time and be used in move_expired_inodes()). > > The sync livelock problem will be addressed in other patches. > Hmm, any reason why you don't solve this problem by just removing the > condition before queue_io()? It would also make the logic simpler - always Yeah I'll remove queue_io() in the coming sync livelock patchset. This patchset does the below. Though awkward, it avoids unnecessary behavior changes for non-background cases. - if (!wbc->for_kupdate || list_empty(&wb->b_io)) + if (!(wbc->for_kupdate || wbc->for_background) || list_empty(&wb->b_io)) queue_io(wb, wbc); > queue all inodes that are eligible for writeback... Thanks, Fengguang -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>