diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2023-09-21 23:07:38 +0300 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2023-10-25 21:19:00 +0300 |
commit | 3de6047f1832010d24963f58206298fc75085816 (patch) | |
tree | 20ddc0e68e84bd6056c79dd2cc8ed300b53b414b /include/linux/highmem.h | |
parent | bceef326bc87781abb5139898d5f2807881194d9 (diff) | |
download | linux-3de6047f1832010d24963f58206298fc75085816.tar.xz |
highmem: Add folio_release_kmap()
This is the folio equivalent of unmap_and_put_page(), which remains as
a wrapper for it.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20230921200746.3303942-1-willy@infradead.org>
Diffstat (limited to 'include/linux/highmem.h')
-rw-r--r-- | include/linux/highmem.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 99c474de800d..4cacc0e43b51 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -551,10 +551,24 @@ static inline void folio_zero_range(struct folio *folio, zero_user_segments(&folio->page, start, start + length, 0, 0); } -static inline void unmap_and_put_page(struct page *page, void *addr) +/** + * folio_release_kmap - Unmap a folio and drop a refcount. + * @folio: The folio to release. + * @addr: The address previously returned by a call to kmap_local_folio(). + * + * It is common, eg in directory handling to kmap a folio. This function + * unmaps the folio and drops the refcount that was being held to keep the + * folio alive while we accessed it. + */ +static inline void folio_release_kmap(struct folio *folio, void *addr) { kunmap_local(addr); - put_page(page); + folio_put(folio); +} + +static inline void unmap_and_put_page(struct page *page, void *addr) +{ + folio_release_kmap(page_folio(page), addr); } #endif /* _LINUX_HIGHMEM_H */ |