[PATCH 1/3] Revert "mm: simplify swapdev_block"
Chris Wilson
chris at chris-wilson.co.uk
Tue Mar 2 14:21:12 UTC 2021
This reverts commit f885056a48ccf4ad4332def91e973f3993fa8695.
---
mm/swapfile.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/mm/swapfile.c b/mm/swapfile.c
index f039745989d2..40d23cbee52e 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1790,6 +1790,9 @@ int free_swap_and_cache(swp_entry_t entry)
}
#ifdef CONFIG_HIBERNATION
+
+static sector_t map_swap_entry(swp_entry_t, struct block_device**);
+
/*
* Find the swap type that corresponds to given device (if any).
*
@@ -1849,13 +1852,12 @@ int find_first_swap(dev_t *device)
*/
sector_t swapdev_block(int type, pgoff_t offset)
{
+ struct block_device *bdev;
struct swap_info_struct *si = swap_type_to_swap_info(type);
- struct swap_extent *se;
if (!si || !(si->flags & SWP_WRITEOK))
return 0;
- se = offset_to_swap_extent(si, offset);
- return se->start_block + (offset - se->start_page);
+ return map_swap_entry(swp_entry(type, offset), &bdev);
}
/*
@@ -2282,6 +2284,28 @@ static void drain_mmlist(void)
spin_unlock(&mmlist_lock);
}
+#ifdef CONFIG_HIBERNATION
+/*
+ * Use this swapdev's extent info to locate the (PAGE_SIZE) block which
+ * corresponds to page offset for the specified swap entry.
+ * Note that the type of this function is sector_t, but it returns page offset
+ * into the bdev, not sector offset.
+ */
+static sector_t map_swap_entry(swp_entry_t entry, struct block_device **bdev)
+{
+ struct swap_info_struct *sis;
+ struct swap_extent *se;
+ pgoff_t offset;
+
+ sis = swp_swap_info(entry);
+ *bdev = sis->bdev;
+
+ offset = swp_offset(entry);
+ se = offset_to_swap_extent(sis, offset);
+ return se->start_block + (offset - se->start_page);
+}
+#endif
+
/*
* Free all of a swapdev's extent information
*/
--
2.20.1
More information about the Intel-gfx-trybot
mailing list