On Wed, 12 Jun 2024 at 18:23, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > The natural thing to do is to just make the "wait for unlocked" be > part of the same loop. Oh, and while I like my approach a lot more than your patch, I do think that the real issue here is likely that something takes the d_lock way too much. One of the ideas behind the reflux was that locking should be an exceptional thing when something special happens. So things like final dput() and friends. What I *think* is going on - judging by your description of how you triggered this - is that sadly our libfs 'readdir()' thing is pretty nasty. It does use d_lock a lot for the cursor handling, and things like scan_positives() in particular. I understand *why* it does that, and maybe it's practically unfixable, but I do think the most likely deeper reason for that "go into slow mode" is the cursor on the directory causing issues. Put another way: while I think doing the retry loop will help benchmarks, it would be lovely if you were to look at that arguably deeper issue of the 'd_sib' list. Linus