shmem.c (1f514bee0c086e70fb8137c15dc91c9711a3feeb) | shmem.c (8ccee8c19c605a7d74f02413c59d4d3a822827d5) |
---|---|
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. --- 1317 unchanged lines hidden (view full) --- 1326} 1327 1328/* 1329 * Move the page from the page cache to the swap cache. 1330 */ 1331static int shmem_writepage(struct page *page, struct writeback_control *wbc) 1332{ 1333 struct folio *folio = page_folio(page); | 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. --- 1317 unchanged lines hidden (view full) --- 1326} 1327 1328/* 1329 * Move the page from the page cache to the swap cache. 1330 */ 1331static int shmem_writepage(struct page *page, struct writeback_control *wbc) 1332{ 1333 struct folio *folio = page_folio(page); |
1334 struct shmem_inode_info *info; 1335 struct address_space *mapping; 1336 struct inode *inode; | 1334 struct address_space *mapping = folio->mapping; 1335 struct inode *inode = mapping->host; 1336 struct shmem_inode_info *info = SHMEM_I(inode); |
1337 swp_entry_t swap; 1338 pgoff_t index; 1339 1340 /* 1341 * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "always" or 1342 * "force", drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages, 1343 * and its shmem_writeback() needs them to be split when swapping. 1344 */ 1345 if (folio_test_large(folio)) { 1346 /* Ensure the subpages are still dirty */ 1347 folio_test_set_dirty(folio); 1348 if (split_huge_page(page) < 0) 1349 goto redirty; 1350 folio = page_folio(page); 1351 folio_clear_dirty(folio); 1352 } 1353 | 1337 swp_entry_t swap; 1338 pgoff_t index; 1339 1340 /* 1341 * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "always" or 1342 * "force", drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages, 1343 * and its shmem_writeback() needs them to be split when swapping. 1344 */ 1345 if (folio_test_large(folio)) { 1346 /* Ensure the subpages are still dirty */ 1347 folio_test_set_dirty(folio); 1348 if (split_huge_page(page) < 0) 1349 goto redirty; 1350 folio = page_folio(page); 1351 folio_clear_dirty(folio); 1352 } 1353 |
1354 mapping = folio->mapping; | |
1355 index = folio->index; | 1354 index = folio->index; |
1356 inode = mapping->host; 1357 info = SHMEM_I(inode); | |
1358 if (info->flags & VM_LOCKED) 1359 goto redirty; 1360 if (!total_swap_pages) 1361 goto redirty; 1362 1363 /* 1364 * Our capabilities prevent regular writeback or sync from ever calling 1365 * shmem_writepage; but a stacking filesystem might use ->writepage of --- 3013 unchanged lines hidden --- | 1355 if (info->flags & VM_LOCKED) 1356 goto redirty; 1357 if (!total_swap_pages) 1358 goto redirty; 1359 1360 /* 1361 * Our capabilities prevent regular writeback or sync from ever calling 1362 * shmem_writepage; but a stacking filesystem might use ->writepage of --- 3013 unchanged lines hidden --- |