On Tue, Jan 1, 2019 at 11:16 PM Hugh Dickins <hughd@xxxxxxxxxx> wrote: > One more fix on top of what I sent yesterday: once I delved into > the retries, I found that the major cause of exceeding MAX_RETRIES > was the way the retry code neatly avoided retrying the last part of > its work. With this fix in, I have not yet seen retries go above 1: > no doubt it could, but at present I have no actual evidence that > the MAX_RETRIES-or-livelock issue needs to be dealt with urgently. > Fix sent for completeness, but it reinforces the point that the > structure of try_to_unuse() should be reworked, and oldi gone. > Thanks for the fix and suggestions Hugh! After reading the code again, I feel like we can make the retry logic simpler and avoid the use of oldi. If my understanding is correct, except for frontswap case, we reach try_to_unuse() only after we disable the swap device. So I think, we would not be seeing any more swap usage on the disabled swap device, after we loop through all the process and swapin the pages on that device. In that case, we would not need the retry logic right? For frontswap case, the patch was missing a check for pages_to_unuse. We would still need the retry logic, but as you mentioned, I can easily remove the oldi logic and make it simpler. Or probably, refactor the frontswap code out as a special case if pages_to_unuse is still not zero after the initial loop. Thanks, Vineeth