shmem.c (6b16f5d12202a23d875915349cc031c07fe1b3ec) | shmem.c (2cf855837b89d92996cf264713f3bed2bf9b0b4f) |
---|---|
1/* 2 * Resizable virtual memory filesystem for Linux. 3 * 4 * Copyright (C) 2000 Linus Torvalds. 5 * 2000 Transmeta Corp. 6 * 2000-2001 Christoph Rohland 7 * 2000-2001 SAP AG 8 * 2002 Red Hat Inc. --- 1225 unchanged lines hidden (view full) --- 1234 if (unlikely(!PageSwapCache(page) || page_private(page) != swap.val)) 1235 goto out; 1236 1237 /* 1238 * Charge page using GFP_KERNEL while we can wait, before taking 1239 * the shmem_swaplist_mutex which might hold up shmem_writepage(). 1240 * Charged back to the user (not to caller) when swap account is used. 1241 */ | 1/* 2 * Resizable virtual memory filesystem for Linux. 3 * 4 * Copyright (C) 2000 Linus Torvalds. 5 * 2000 Transmeta Corp. 6 * 2000-2001 Christoph Rohland 7 * 2000-2001 SAP AG 8 * 2002 Red Hat Inc. --- 1225 unchanged lines hidden (view full) --- 1234 if (unlikely(!PageSwapCache(page) || page_private(page) != swap.val)) 1235 goto out; 1236 1237 /* 1238 * Charge page using GFP_KERNEL while we can wait, before taking 1239 * the shmem_swaplist_mutex which might hold up shmem_writepage(). 1240 * Charged back to the user (not to caller) when swap account is used. 1241 */ |
1242 error = mem_cgroup_try_charge(page, current->mm, GFP_KERNEL, &memcg, 1243 false); | 1242 error = mem_cgroup_try_charge_delay(page, current->mm, GFP_KERNEL, 1243 &memcg, false); |
1244 if (error) 1245 goto out; 1246 /* No radix_tree_preload: swap entry keeps a place for page in tree */ 1247 error = -EAGAIN; 1248 1249 mutex_lock(&shmem_swaplist_mutex); 1250 list_for_each_safe(this, next, &shmem_swaplist) { 1251 info = list_entry(this, struct shmem_inode_info, swaplist); --- 455 unchanged lines hidden (view full) --- 1707 wait_on_page_writeback(page); 1708 1709 if (shmem_should_replace_page(page, gfp)) { 1710 error = shmem_replace_page(&page, gfp, info, index); 1711 if (error) 1712 goto failed; 1713 } 1714 | 1244 if (error) 1245 goto out; 1246 /* No radix_tree_preload: swap entry keeps a place for page in tree */ 1247 error = -EAGAIN; 1248 1249 mutex_lock(&shmem_swaplist_mutex); 1250 list_for_each_safe(this, next, &shmem_swaplist) { 1251 info = list_entry(this, struct shmem_inode_info, swaplist); --- 455 unchanged lines hidden (view full) --- 1707 wait_on_page_writeback(page); 1708 1709 if (shmem_should_replace_page(page, gfp)) { 1710 error = shmem_replace_page(&page, gfp, info, index); 1711 if (error) 1712 goto failed; 1713 } 1714 |
1715 error = mem_cgroup_try_charge(page, charge_mm, gfp, &memcg, | 1715 error = mem_cgroup_try_charge_delay(page, charge_mm, gfp, &memcg, |
1716 false); 1717 if (!error) { 1718 error = shmem_add_to_page_cache(page, mapping, index, 1719 swp_to_radix_entry(swap)); 1720 /* 1721 * We already confirmed swap under page lock, and make 1722 * no memory allocation here, so usually no possibility 1723 * of error; but free_swap_and_cache() only trylocks a --- 89 unchanged lines hidden (view full) --- 1813 if (PageTransHuge(page)) 1814 hindex = round_down(index, HPAGE_PMD_NR); 1815 else 1816 hindex = index; 1817 1818 if (sgp == SGP_WRITE) 1819 __SetPageReferenced(page); 1820 | 1716 false); 1717 if (!error) { 1718 error = shmem_add_to_page_cache(page, mapping, index, 1719 swp_to_radix_entry(swap)); 1720 /* 1721 * We already confirmed swap under page lock, and make 1722 * no memory allocation here, so usually no possibility 1723 * of error; but free_swap_and_cache() only trylocks a --- 89 unchanged lines hidden (view full) --- 1813 if (PageTransHuge(page)) 1814 hindex = round_down(index, HPAGE_PMD_NR); 1815 else 1816 hindex = index; 1817 1818 if (sgp == SGP_WRITE) 1819 __SetPageReferenced(page); 1820 |
1821 error = mem_cgroup_try_charge(page, charge_mm, gfp, &memcg, | 1821 error = mem_cgroup_try_charge_delay(page, charge_mm, gfp, &memcg, |
1822 PageTransHuge(page)); 1823 if (error) 1824 goto unacct; 1825 error = radix_tree_maybe_preload_order(gfp & GFP_RECLAIM_MASK, 1826 compound_order(page)); 1827 if (!error) { 1828 error = shmem_add_to_page_cache(page, mapping, hindex, 1829 NULL); --- 456 unchanged lines hidden (view full) --- 2286 *pagep = NULL; 2287 } 2288 2289 VM_BUG_ON(PageLocked(page) || PageSwapBacked(page)); 2290 __SetPageLocked(page); 2291 __SetPageSwapBacked(page); 2292 __SetPageUptodate(page); 2293 | 1822 PageTransHuge(page)); 1823 if (error) 1824 goto unacct; 1825 error = radix_tree_maybe_preload_order(gfp & GFP_RECLAIM_MASK, 1826 compound_order(page)); 1827 if (!error) { 1828 error = shmem_add_to_page_cache(page, mapping, hindex, 1829 NULL); --- 456 unchanged lines hidden (view full) --- 2286 *pagep = NULL; 2287 } 2288 2289 VM_BUG_ON(PageLocked(page) || PageSwapBacked(page)); 2290 __SetPageLocked(page); 2291 __SetPageSwapBacked(page); 2292 __SetPageUptodate(page); 2293 |
2294 ret = mem_cgroup_try_charge(page, dst_mm, gfp, &memcg, false); | 2294 ret = mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false); |
2295 if (ret) 2296 goto out_release; 2297 2298 ret = radix_tree_maybe_preload(gfp & GFP_RECLAIM_MASK); 2299 if (!ret) { 2300 ret = shmem_add_to_page_cache(page, mapping, pgoff, NULL); 2301 radix_tree_preload_end(); 2302 } --- 1769 unchanged lines hidden --- | 2295 if (ret) 2296 goto out_release; 2297 2298 ret = radix_tree_maybe_preload(gfp & GFP_RECLAIM_MASK); 2299 if (!ret) { 2300 ret = shmem_add_to_page_cache(page, mapping, pgoff, NULL); 2301 radix_tree_preload_end(); 2302 } --- 1769 unchanged lines hidden --- |