]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mm: page_alloc: calculate classzone_idx once from the zonelist ref
authorMel Gorman <mgorman@suse.de>
Thu, 22 May 2014 00:43:23 +0000 (10:43 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 22 May 2014 00:43:23 +0000 (10:43 +1000)
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>
mm/page_alloc.c

index 124d0aa7b10c6d6d4738366bbc3dc404aefa4c42..964130a74cffbad5a83641720adafd01106e4460 100644 (file)
@@ -2540,8 +2540,7 @@ restart:
        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);
        }