aboutsummaryrefslogtreecommitdiffstats
path: root/mm/shmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/shmem.c')
-rw-r--r--mm/shmem.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/mm/shmem.c b/mm/shmem.c
index bbb7b043c986..5d0de96c9789 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -929,11 +929,11 @@ found:
929 if (!inode) 929 if (!inode)
930 goto out; 930 goto out;
931 /* 931 /*
932 * Charge page using GFP_HIGHUSER_MOVABLE while we can wait. 932 * Charge page using GFP_KERNEL while we can wait.
933 * charged back to the user(not to caller) when swap account is used. 933 * Charged back to the user(not to caller) when swap account is used.
934 * add_to_page_cache() will be called with GFP_NOWAIT.
934 */ 935 */
935 error = mem_cgroup_cache_charge_swapin(page, current->mm, GFP_KERNEL, 936 error = mem_cgroup_cache_charge(page, current->mm, GFP_KERNEL);
936 true);
937 if (error) 937 if (error)
938 goto out; 938 goto out;
939 error = radix_tree_preload(GFP_KERNEL); 939 error = radix_tree_preload(GFP_KERNEL);
@@ -1270,16 +1270,6 @@ repeat:
1270 goto repeat; 1270 goto repeat;
1271 } 1271 }
1272 wait_on_page_locked(swappage); 1272 wait_on_page_locked(swappage);
1273 /*
1274 * We want to avoid charge at add_to_page_cache().
1275 * charge against this swap cache here.
1276 */
1277 if (mem_cgroup_cache_charge_swapin(swappage,
1278 current->mm, gfp & GFP_RECLAIM_MASK, false)) {
1279 page_cache_release(swappage);
1280 error = -ENOMEM;
1281 goto failed;
1282 }
1283 page_cache_release(swappage); 1273 page_cache_release(swappage);
1284 goto repeat; 1274 goto repeat;
1285 } 1275 }
@@ -1334,15 +1324,19 @@ repeat:
1334 } else { 1324 } else {
1335 shmem_swp_unmap(entry); 1325 shmem_swp_unmap(entry);
1336 spin_unlock(&info->lock); 1326 spin_unlock(&info->lock);
1337 unlock_page(swappage);
1338 page_cache_release(swappage);
1339 if (error == -ENOMEM) { 1327 if (error == -ENOMEM) {
1340 /* allow reclaim from this memory cgroup */ 1328 /* allow reclaim from this memory cgroup */
1341 error = mem_cgroup_shrink_usage(current->mm, 1329 error = mem_cgroup_shrink_usage(swappage,
1330 current->mm,
1342 gfp); 1331 gfp);
1343 if (error) 1332 if (error) {
1333 unlock_page(swappage);
1334 page_cache_release(swappage);
1344 goto failed; 1335 goto failed;
1336 }
1345 } 1337 }
1338 unlock_page(swappage);
1339 page_cache_release(swappage);
1346 goto repeat; 1340 goto repeat;
1347 } 1341 }
1348 } else if (sgp == SGP_READ && !filepage) { 1342 } else if (sgp == SGP_READ && !filepage) {