swap: convert swapon() to use a folio
Retrieve a folio from the page cache rather than a page. Saves a couple of conversions between page & folio. Link: https://lkml.kernel.org/r/20240826202138.3804238-1-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
8175ebfd30
commit
97b76796cc
@ -3357,7 +3357,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
|
||||
unsigned char *swap_map = NULL;
|
||||
unsigned long *zeromap = NULL;
|
||||
struct swap_cluster_info *cluster_info = NULL;
|
||||
struct page *page = NULL;
|
||||
struct folio *folio = NULL;
|
||||
struct inode *inode = NULL;
|
||||
bool inced_nr_rotate_swap = false;
|
||||
|
||||
@ -3415,12 +3415,12 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
|
||||
error = -EINVAL;
|
||||
goto bad_swap_unlock_inode;
|
||||
}
|
||||
page = read_mapping_page(mapping, 0, swap_file);
|
||||
if (IS_ERR(page)) {
|
||||
error = PTR_ERR(page);
|
||||
folio = read_mapping_folio(mapping, 0, swap_file);
|
||||
if (IS_ERR(folio)) {
|
||||
error = PTR_ERR(folio);
|
||||
goto bad_swap_unlock_inode;
|
||||
}
|
||||
swap_header = kmap(page);
|
||||
swap_header = kmap_local_folio(folio, 0);
|
||||
|
||||
maxpages = read_swap_header(si, swap_header, inode);
|
||||
if (unlikely(!maxpages)) {
|
||||
@ -3574,10 +3574,8 @@ bad_swap:
|
||||
if (swap_file)
|
||||
filp_close(swap_file, NULL);
|
||||
out:
|
||||
if (page && !IS_ERR(page)) {
|
||||
kunmap(page);
|
||||
put_page(page);
|
||||
}
|
||||
if (!IS_ERR_OR_NULL(folio))
|
||||
folio_release_kmap(folio, swap_header);
|
||||
if (name)
|
||||
putname(name);
|
||||
if (inode)
|
||||
|
Loading…
Reference in New Issue
Block a user