On Mon, Mar 09, 2020 at 09:53:08AM -0700, Alexander Duyck wrote: > On Sun, Mar 8, 2020 at 12:10 AM <qiwuchen55@xxxxxxxxx> wrote: > > > > From: chenqiwu <chenqiwu@xxxxxxxxxx> > > > > Simplify page_is_buddy() to reduce the redundant code for better > > code readability. > > > > Signed-off-by: chenqiwu <chenqiwu@xxxxxxxxxx> > > --- > > mm/page_alloc.c | 13 +++---------- > > 1 file changed, 3 insertions(+), 10 deletions(-) > > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 79e950d..c6eef38 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -797,16 +797,8 @@ static inline void set_page_order(struct page *page, unsigned int order) > > static inline int page_is_buddy(struct page *page, struct page *buddy, > > unsigned int order) > > { > > - if (page_is_guard(buddy) && page_order(buddy) == order) { > > - if (page_zone_id(page) != page_zone_id(buddy)) > > - return 0; > > - > > - VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); > > - > > - return 1; > > - } > > - > > - if (PageBuddy(buddy) && page_order(buddy) == order) { > > + if ((page_is_guard(buddy) || PageBuddy(buddy)) > > + && page_order(buddy) == order) { > > /* > > * zone check is done late to avoid uselessly > > * calculating zone/node ids for pages that could > > Instead of keeping the if statement as is couldn't you flatten this > out further by just returning 0 if !page_is_guard && !PageBuddy? > > So something like: > if (!page_is_guard(buddy) && !PageBuddy(buddy)) > return0; > > if (page_order(buddy) != order) > return 0; > > I feel like this would be more readable than sorting out the > parenthesis for the conditional statement. Then you can also just get > rid of the indenting and braces for the rest of the statement. With > that it would more closely match the description above as well as you > are going through and checking a - d as separate tests. I agree, for performance considering, I think the second conditional statement should be moved up. I will resend this as proper patch v2 for review.