On Wed, Oct 9, 2019 at 4:51 PM Linus Torvalds wrote: > > (a) right now nobody wants the "skip" behavior. You think you'll > eventually want it > > (b) right now, the "return positive value" is actually a horribly > ugly pointless hack, which could be made to be an error value and > cleaned up in the process > > (c) to me that really argues that we should just make the rule be > > - negative error means break out with error > > - 0 means continue down the next level > > - positive could be trivially be made to just mean "ok, I did it, > you can just continue". > > and I think that would make a lot of sense. So here's an ENTIRELY untested patch, but the return value of pmd_entry() now makes conceptual sense to me. The whole "I hit an error, I did nothing, I already did it myself" to me is the intuitive meaning of {neg,0,pos} handling. I think we probably should do this same thing for the upper levels too to be consistent, but I think this at least makes sense, and is simple, and avoids any hacky PAGE_WALK_CALLER_MAX magic. I also wonder if some caller might want to get a count of "how many X handled", and we'd just sum up all the positive return values as we're traversing things, but that falls under "nobody seems to want it right now", so I'm not adding extra code for something that might not be useful. And it is possible that I missed some other pmd_entry() callback that returns a positive value. I did check them all, but mistakes happen and I might have missed some case... Again: entirely and utterly untested. It compiles. That's all I'm going to guarantee, and even that might be a fluke. Linus