Re: [PATCH 5/8] mm: vmscan: replace shrink_node() loop with a retry jump
From: Johannes Weiner <hannes@cmpxchg.org>
Date: 2019-10-25 13:44:48
Also in:
linux-mm, lkml
From: Johannes Weiner <hannes@cmpxchg.org>
Date: 2019-10-25 13:44:48
Also in:
linux-mm, lkml
On Wed, Oct 23, 2019 at 04:18:57PM +0200, Michal Hocko wrote:
On Tue 22-10-19 10:48:00, Johannes Weiner wrote:quoted
Most of the function body is inside a loop, which imposes an additional indentation and scoping level that makes the code a bit hard to follow and modify.I do agree!quoted
The looping only happens in case of reclaim-compaction, which isn't the common case. So rather than adding yet another function level to the reclaim path and have every reclaim invocation go through a level that only exists for one specific cornercase, use a retry goto.I would just keep the core logic in its own function and do the loop around it rather than a goto retry. This is certainly a matter of taste but I like a loop with an explicit condition much more than a if with goto.
Yeah, as the changelog says, I'm intentionally putting the looping construct into the "cold path" of the code flow: we only loops in a very specific cornercase, and having the whole body in a loop, or creating another function nesting level for it suggests otherwise. A goto seems like the perfect tool to have a retry for one particular caller without muddying the code flow for the common call stack. Matter of taste, I guess.