diff options
| -rw-r--r-- | mm/memcontrol.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0e40f0205732..ebd1e86bef1c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -1841,29 +1841,23 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem, | |||
| 1841 | */ | 1841 | */ |
| 1842 | static bool mem_cgroup_oom_lock(struct mem_cgroup *mem) | 1842 | static bool mem_cgroup_oom_lock(struct mem_cgroup *mem) |
| 1843 | { | 1843 | { |
| 1844 | int lock_count = -1; | ||
| 1845 | struct mem_cgroup *iter, *failed = NULL; | 1844 | struct mem_cgroup *iter, *failed = NULL; |
| 1846 | bool cond = true; | 1845 | bool cond = true; |
| 1847 | 1846 | ||
| 1848 | for_each_mem_cgroup_tree_cond(iter, mem, cond) { | 1847 | for_each_mem_cgroup_tree_cond(iter, mem, cond) { |
| 1849 | bool locked = iter->oom_lock; | 1848 | if (iter->oom_lock) { |
| 1850 | |||
| 1851 | iter->oom_lock = true; | ||
| 1852 | if (lock_count == -1) | ||
| 1853 | lock_count = iter->oom_lock; | ||
| 1854 | else if (lock_count != locked) { | ||
| 1855 | /* | 1849 | /* |
| 1856 | * this subtree of our hierarchy is already locked | 1850 | * this subtree of our hierarchy is already locked |
| 1857 | * so we cannot give a lock. | 1851 | * so we cannot give a lock. |
| 1858 | */ | 1852 | */ |
| 1859 | lock_count = 0; | ||
| 1860 | failed = iter; | 1853 | failed = iter; |
| 1861 | cond = false; | 1854 | cond = false; |
| 1862 | } | 1855 | } else |
| 1856 | iter->oom_lock = true; | ||
| 1863 | } | 1857 | } |
| 1864 | 1858 | ||
| 1865 | if (!failed) | 1859 | if (!failed) |
| 1866 | goto done; | 1860 | return true; |
| 1867 | 1861 | ||
| 1868 | /* | 1862 | /* |
| 1869 | * OK, we failed to lock the whole subtree so we have to clean up | 1863 | * OK, we failed to lock the whole subtree so we have to clean up |
| @@ -1877,8 +1871,7 @@ static bool mem_cgroup_oom_lock(struct mem_cgroup *mem) | |||
| 1877 | } | 1871 | } |
| 1878 | iter->oom_lock = false; | 1872 | iter->oom_lock = false; |
| 1879 | } | 1873 | } |
| 1880 | done: | 1874 | return false; |
| 1881 | return lock_count; | ||
| 1882 | } | 1875 | } |
| 1883 | 1876 | ||
| 1884 | /* | 1877 | /* |
