On Tue, 09 Apr 2013 17:37:20 -0700 Greg Thelen <gthelen@xxxxxxxxxx> wrote: > > Call cond_resched() in shrink_dcache_parent() to maintain > > interactivity. > > > > Before this patch: > > > > void shrink_dcache_parent(struct dentry * parent) > > { > > while ((found = select_parent(parent, &dispose)) != 0) > > shrink_dentry_list(&dispose); > > } > > > > select_parent() populates the dispose list with dentries which > > shrink_dentry_list() then deletes. select_parent() carefully uses > > need_resched() to avoid doing too much work at once. But neither > > shrink_dcache_parent() nor its called functions call cond_resched(). > > So once need_resched() is set select_parent() will return single > > dentry dispose list which is then deleted by shrink_dentry_list(). > > This is inefficient when there are a lot of dentry to process. This > > can cause softlockup and hurts interactivity on non preemptable > > kernels. > > > > This change adds cond_resched() in shrink_dcache_parent(). The > > benefit of this is that need_resched() is quickly cleared so that > > future calls to select_parent() are able to efficiently return a big > > batch of dentry. > > > > These additional cond_resched() do not seem to impact performance, at > > least for the workload below. > > > > Here is a program which can cause soft lockup on a if other system > > activity sets need_resched(). I was unable to guess what word was missing from "on a if other" ;) > Should this change go through Al's or Andrew's branch? I'll fight him for it. Softlockups are fairly serious, so I'll put a cc:stable in there. Or were the changes which triggered this problem added after 3.9? -- 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