> @@ -2561,17 +2580,23 @@ static void shrink_zones(struct zonelist *zonelist, > struct scan_control *sc) > * highmem pages could be pinning lowmem pages storing buffer_heads > */ > orig_mask = sc->gfp_mask; > - if (buffer_heads_over_limit) > + if (buffer_heads_over_limit) { > sc->gfp_mask |= __GFP_HIGHMEM; > + sc->reclaim_idx = classzone_idx = gfp_zone(sc->gfp_mask); > + } > We need to push/pop ->reclaim_idx as ->gfp_mask handled?
thanks Hillf