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 ---