include/linux/pagemap.h: introduce attach/detach_page_private
Patch series "Introduce attach/detach_page_private to cleanup code". This patch (of 10): The logic in attach_page_buffers and __clear_page_buffers are quite paired, but 1. they are located in different files. 2. attach_page_buffers is implemented in buffer_head.h, so it could be used by other files. But __clear_page_buffers is static function in buffer.c and other potential users can't call the function, md-bitmap even copied the function. So, introduce the new attach/detach_page_private to replace them. With the new pair of function, we will remove the usage of attach_page_buffers and __clear_page_buffers in next patches. Thanks for suggestions about the function name from Alexander Viro, Andreas Grünbacher, Christoph Hellwig and Matthew Wilcox. Suggested-by: Matthew Wilcox <willy@infradead.org> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: "Darrick J. Wong" <darrick.wong@oracle.com> Cc: William Kucharski <william.kucharski@oracle.com> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: Andreas Gruenbacher <agruenba@redhat.com> Cc: Yang Shi <yang.shi@linux.alibaba.com> Cc: Yafang Shao <laoar.shao@gmail.com> Cc: Song Liu <song@kernel.org> Cc: Chris Mason <clm@fb.com> Cc: Josef Bacik <josef@toxicpanda.com> Cc: David Sterba <dsterba@suse.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Jaegeuk Kim <jaegeuk@kernel.org> Cc: Chao Yu <chao@kernel.org> Cc: Christoph Hellwig <hch@infradead.org> Cc: Anton Altaparmakov <anton@tuxera.com> Cc: Mike Marshall <hubcap@omnibond.com> Cc: Martin Brandenburg <martin@omnibond.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Roman Gushchin <guro@fb.com> Cc: Andreas Dilger <adilger@dilger.ca> Cc: Chao Yu <yuchao0@huawei.com> Cc: Dave Chinner <david@fromorbit.com> Link: http://lkml.kernel.org/r/20200517214718.468-1-guoqing.jiang@cloud.ionos.com Link: http://lkml.kernel.org/r/20200517214718.468-2-guoqing.jiang@cloud.ionos.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
9d24a13a93
Коммит
b03143accd
|
@ -208,6 +208,43 @@ static inline int page_cache_add_speculative(struct page *page, int count)
|
|||
return __page_cache_add_speculative(page, count);
|
||||
}
|
||||
|
||||
/**
|
||||
* attach_page_private - Attach private data to a page.
|
||||
* @page: Page to attach data to.
|
||||
* @data: Data to attach to page.
|
||||
*
|
||||
* Attaching private data to a page increments the page's reference count.
|
||||
* The data must be detached before the page will be freed.
|
||||
*/
|
||||
static inline void attach_page_private(struct page *page, void *data)
|
||||
{
|
||||
get_page(page);
|
||||
set_page_private(page, (unsigned long)data);
|
||||
SetPagePrivate(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* detach_page_private - Detach private data from a page.
|
||||
* @page: Page to detach data from.
|
||||
*
|
||||
* Removes the data that was previously attached to the page and decrements
|
||||
* the refcount on the page.
|
||||
*
|
||||
* Return: Data that was attached to the page.
|
||||
*/
|
||||
static inline void *detach_page_private(struct page *page)
|
||||
{
|
||||
void *data = (void *)page_private(page);
|
||||
|
||||
if (!PagePrivate(page))
|
||||
return NULL;
|
||||
ClearPagePrivate(page);
|
||||
set_page_private(page, 0);
|
||||
put_page(page);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern struct page *__page_cache_alloc(gfp_t gfp);
|
||||
#else
|
||||
|
|
Загрузка…
Ссылка в новой задаче