On Fri, 03 Jul 2015 18:50:07 +0530, Pintu Kumar said: > This patch provides 2 things: > 2. Enable shrink_all_memory API in kernel with new CONFIG_SHRINK_MEMORY. > Currently, shrink_all_memory function is used only during hibernation. > With the new config we can make use of this API for non-hibernation case > also without disturbing the hibernation case. > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3571,12 +3571,17 @@ unsigned long shrink_all_memory(unsigned long nr_to_reclaim) > struct reclaim_state reclaim_state; > struct scan_control sc = { > .nr_to_reclaim = nr_to_reclaim, > +#ifdef CONFIG_SHRINK_MEMORY > + .gfp_mask = (GFP_HIGHUSER_MOVABLE | GFP_RECLAIM_MASK), > + .hibernation_mode = 0, > +#else > .gfp_mask = GFP_HIGHUSER_MOVABLE, > + .hibernation_mode = 1, > +#endif That looks like a bug just waiting to happen. What happens if we call an actual hibernation mode in a SHRINK_MEMORY=y kernel, and it finds an extra gfp mask bit set, and hibernation_mode set to an unexpected value?
Attachment:
pgp_6P1qpUxEL.pgp
Description: PGP signature