]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/vmscan.c
x86/mm: Drop usage of __flush_tlb_all() in kernel_physical_mapping_init()
[mirror_ubuntu-bionic-kernel.git] / mm / vmscan.c
index efb08f93e430cb417397d27ab35bb66bdf5211b5..8b5c53b6c47de01109dfa350d61e962b4d0cda43 100644 (file)
@@ -521,6 +521,15 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
                        sc.nid = 0;
 
                freed += do_shrink_slab(&sc, shrinker, nr_scanned, nr_eligible);
+               /*
+                * Bail out if someone want to register a new shrinker to
+                * prevent the regsitration from being stalled for long periods
+                * by parallel ongoing shrinking.
+                */
+               if (rwsem_is_contended(&shrinker_rwsem)) {
+                       freed = freed ? : 1;
+                       break;
+               }
        }
 
        up_read(&shrinker_rwsem);