Dan Carpenter reported the following bug
The patch
a486e00b8283: "mm: page_alloc: calculate classzone_idx
once from the zonelist ref" from May 17, 2014, leads to the
following static checker warning:
mm/page_alloc.c:2543 __alloc_pages_slowpath()
warn: we tested 'nodemask' before and it was 'false'
mm/page_alloc.c
2537 * Find the true preferred zone if the allocation is unconstrained by
2538 * cpusets.
2539 */
2540 if (!(alloc_flags & ALLOC_CPUSET) && !nodemask) {
^^^^^^^^^
Patch introduces this test.
2541 struct zoneref *preferred_zoneref;
2542 preferred_zoneref = first_zones_zonelist(zonelist, high_zoneidx,
2543 nodemask ? : &cpuset_current_mems_allowed,
^^^^^^^^
Patch introduces this test as well.
2544 &preferred_zone);
2545 classzone_idx = zonelist_zone_idx(preferred_zoneref);
2546 }
This patch should resolve it and is a fix to the mmotm patch
mm-page_alloc-calculate-classzone_idx-once-from-the-zonelist-ref
Signed-off-by: Mel Gorman <mgorman@suse.de>
Cc: Rik van Riel <riel@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
if (!(alloc_flags & ALLOC_CPUSET) && !nodemask) {
struct zoneref *preferred_zoneref;
preferred_zoneref = first_zones_zonelist(zonelist, high_zoneidx,
- nodemask ? : &cpuset_current_mems_allowed,
- &preferred_zone);
+ NULL, &preferred_zone);
classzone_idx = zonelist_zone_idx(preferred_zoneref);
}