* [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private [not found] <20200430214450.10662-1-guoqing.jiang@cloud.ionos.com> @ 2020-04-30 21:44 ` Guoqing Jiang 2020-04-30 22:10 ` Andreas Grünbacher 2020-04-30 22:13 ` Matthew Wilcox 2020-04-30 21:44 ` [RFC PATCH V2 6/9] iomap: use attach/clear_page_private Guoqing Jiang 1 sibling, 2 replies; 9+ messages in thread From: Guoqing Jiang @ 2020-04-30 21:44 UTC (permalink / raw) To: linux-fsdevel, linux-kernel Cc: hch, david, willy, Guoqing Jiang, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Alexander Viro, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger 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/clear_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 the new names from Christoph Hellwig. Suggested-by: Matthew Wilcox <willy@infradead.org> Cc: 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: linux-raid@vger.kernel.org Cc: Chris Mason <clm@fb.com> Cc: Josef Bacik <josef@toxicpanda.com> Cc: David Sterba <dsterba@suse.com> Cc: linux-btrfs@vger.kernel.org Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Jaegeuk Kim <jaegeuk@kernel.org> Cc: Chao Yu <chao@kernel.org> Cc: linux-f2fs-devel@lists.sourceforge.net Cc: Christoph Hellwig <hch@infradead.org> Cc: linux-xfs@vger.kernel.org Cc: Anton Altaparmakov <anton@tuxera.com> Cc: linux-ntfs-dev@lists.sourceforge.net Cc: Mike Marshall <hubcap@omnibond.com> Cc: Martin Brandenburg <martin@omnibond.com> Cc: devel@lists.orangefs.org 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> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> --- RFC -> RFC V2: Address the comments from Christoph Hellwig 1. change function names to attach/clear_page_private and add comments. 2. change the return type of attach_page_private. include/linux/pagemap.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index a8f7bd8ea1c6..2e515f210b18 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -205,6 +205,41 @@ static inline int page_cache_add_speculative(struct page *page, int count) return __page_cache_add_speculative(page, count); } +/** + * attach_page_private - attach data to page's private field and set PG_private. + * @page: page to be attached and set flag. + * @data: data to attach to page's private field. + * + * Need to take reference as mm.h said "Setting PG_private should also increment + * the refcount". + */ +static inline void attach_page_private(struct page *page, void *data) +{ + get_page(page); + set_page_private(page, (unsigned long)data); + SetPagePrivate(page); +} + +/** + * clear_page_private - clear page's private field and PG_private. + * @page: page to be cleared. + * + * The counterpart function of attach_page_private. + * Return: private data of page or NULL if page doesn't have private data. + */ +static inline void *clear_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 -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-04-30 21:44 ` [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private Guoqing Jiang @ 2020-04-30 22:10 ` Andreas Grünbacher 2020-05-01 6:38 ` Guoqing Jiang 2020-04-30 22:13 ` Matthew Wilcox 1 sibling, 1 reply; 9+ messages in thread From: Andreas Grünbacher @ 2020-04-30 22:10 UTC (permalink / raw) To: Guoqing Jiang Cc: Linux FS-devel Mailing List, Linux Kernel Mailing List, Christoph Hellwig, Dave Chinner, willy, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Alexander Viro, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger Hi, Am Do., 30. Apr. 2020 um 23:56 Uhr schrieb Guoqing Jiang <guoqing.jiang@cloud.ionos.com>: > 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/clear_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 the new names from > Christoph Hellwig. > > Suggested-by: Matthew Wilcox <willy@infradead.org> > Cc: 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: linux-raid@vger.kernel.org > Cc: Chris Mason <clm@fb.com> > Cc: Josef Bacik <josef@toxicpanda.com> > Cc: David Sterba <dsterba@suse.com> > Cc: linux-btrfs@vger.kernel.org > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > Cc: Jaegeuk Kim <jaegeuk@kernel.org> > Cc: Chao Yu <chao@kernel.org> > Cc: linux-f2fs-devel@lists.sourceforge.net > Cc: Christoph Hellwig <hch@infradead.org> > Cc: linux-xfs@vger.kernel.org > Cc: Anton Altaparmakov <anton@tuxera.com> > Cc: linux-ntfs-dev@lists.sourceforge.net > Cc: Mike Marshall <hubcap@omnibond.com> > Cc: Martin Brandenburg <martin@omnibond.com> > Cc: devel@lists.orangefs.org > 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> > Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> > --- > RFC -> RFC V2: Address the comments from Christoph Hellwig > 1. change function names to attach/clear_page_private and add comments. > 2. change the return type of attach_page_private. > > include/linux/pagemap.h | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h > index a8f7bd8ea1c6..2e515f210b18 100644 > --- a/include/linux/pagemap.h > +++ b/include/linux/pagemap.h > @@ -205,6 +205,41 @@ static inline int page_cache_add_speculative(struct page *page, int count) > return __page_cache_add_speculative(page, count); > } > > +/** > + * attach_page_private - attach data to page's private field and set PG_private. > + * @page: page to be attached and set flag. > + * @data: data to attach to page's private field. > + * > + * Need to take reference as mm.h said "Setting PG_private should also increment > + * the refcount". > + */ > +static inline void attach_page_private(struct page *page, void *data) > +{ > + get_page(page); > + set_page_private(page, (unsigned long)data); > + SetPagePrivate(page); > +} > + > +/** > + * clear_page_private - clear page's private field and PG_private. > + * @page: page to be cleared. > + * > + * The counterpart function of attach_page_private. > + * Return: private data of page or NULL if page doesn't have private data. > + */ > +static inline void *clear_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; > +} > + I like this in general, but the name clear_page_private suggests that this might be the inverse operation of set_page_private, which it is not. So maybe this can be renamed to detach_page_private to more clearly indicate that it pairs with attach_page_private? > #ifdef CONFIG_NUMA > extern struct page *__page_cache_alloc(gfp_t gfp); > #else > -- > 2.17.1 > Thanks, Andreas ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-04-30 22:10 ` Andreas Grünbacher @ 2020-05-01 6:38 ` Guoqing Jiang 0 siblings, 0 replies; 9+ messages in thread From: Guoqing Jiang @ 2020-05-01 6:38 UTC (permalink / raw) To: Andreas Grünbacher Cc: Linux FS-devel Mailing List, Linux Kernel Mailing List, Christoph Hellwig, Dave Chinner, willy, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Alexander Viro, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On 5/1/20 12:10 AM, Andreas Grünbacher wrote: > Hi, > > Am Do., 30. Apr. 2020 um 23:56 Uhr schrieb Guoqing Jiang > <guoqing.jiang@cloud.ionos.com>: >> 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/clear_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 the new names from >> Christoph Hellwig. >> >> Suggested-by: Matthew Wilcox <willy@infradead.org> >> Cc: 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: linux-raid@vger.kernel.org >> Cc: Chris Mason <clm@fb.com> >> Cc: Josef Bacik <josef@toxicpanda.com> >> Cc: David Sterba <dsterba@suse.com> >> Cc: linux-btrfs@vger.kernel.org >> Cc: Alexander Viro <viro@zeniv.linux.org.uk> >> Cc: Jaegeuk Kim <jaegeuk@kernel.org> >> Cc: Chao Yu <chao@kernel.org> >> Cc: linux-f2fs-devel@lists.sourceforge.net >> Cc: Christoph Hellwig <hch@infradead.org> >> Cc: linux-xfs@vger.kernel.org >> Cc: Anton Altaparmakov <anton@tuxera.com> >> Cc: linux-ntfs-dev@lists.sourceforge.net >> Cc: Mike Marshall <hubcap@omnibond.com> >> Cc: Martin Brandenburg <martin@omnibond.com> >> Cc: devel@lists.orangefs.org >> 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> >> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> >> --- >> RFC -> RFC V2: Address the comments from Christoph Hellwig >> 1. change function names to attach/clear_page_private and add comments. >> 2. change the return type of attach_page_private. >> >> include/linux/pagemap.h | 35 +++++++++++++++++++++++++++++++++++ >> 1 file changed, 35 insertions(+) >> >> diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h >> index a8f7bd8ea1c6..2e515f210b18 100644 >> --- a/include/linux/pagemap.h >> +++ b/include/linux/pagemap.h >> @@ -205,6 +205,41 @@ static inline int page_cache_add_speculative(struct page *page, int count) >> return __page_cache_add_speculative(page, count); >> } >> >> +/** >> + * attach_page_private - attach data to page's private field and set PG_private. >> + * @page: page to be attached and set flag. >> + * @data: data to attach to page's private field. >> + * >> + * Need to take reference as mm.h said "Setting PG_private should also increment >> + * the refcount". >> + */ >> +static inline void attach_page_private(struct page *page, void *data) >> +{ >> + get_page(page); >> + set_page_private(page, (unsigned long)data); >> + SetPagePrivate(page); >> +} >> + >> +/** >> + * clear_page_private - clear page's private field and PG_private. >> + * @page: page to be cleared. >> + * >> + * The counterpart function of attach_page_private. >> + * Return: private data of page or NULL if page doesn't have private data. >> + */ >> +static inline void *clear_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; >> +} >> + > I like this in general, but the name clear_page_private suggests that > this might be the inverse operation of set_page_private, which it is > not. So maybe this can be renamed to detach_page_private to more > clearly indicate that it pairs with attach_page_private? Yes, the new name is better, thank you! Cheers, Guoqing ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-04-30 21:44 ` [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private Guoqing Jiang 2020-04-30 22:10 ` Andreas Grünbacher @ 2020-04-30 22:13 ` Matthew Wilcox 2020-05-01 1:42 ` Al Viro 2020-05-01 6:39 ` Guoqing Jiang 1 sibling, 2 replies; 9+ messages in thread From: Matthew Wilcox @ 2020-04-30 22:13 UTC (permalink / raw) To: Guoqing Jiang Cc: linux-fsdevel, linux-kernel, hch, david, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Alexander Viro, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On Thu, Apr 30, 2020 at 11:44:42PM +0200, Guoqing Jiang wrote: > +/** > + * attach_page_private - attach data to page's private field and set PG_private. > + * @page: page to be attached and set flag. > + * @data: data to attach to page's private field. > + * > + * Need to take reference as mm.h said "Setting PG_private should also increment > + * the refcount". > + */ I don't think this will read well when added to the API documentation. Try this: /** * 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. */ > +/** > + * clear_page_private - clear page's private field and PG_private. > + * @page: page to be cleared. > + * > + * The counterpart function of attach_page_private. > + * Return: private data of page or NULL if page doesn't have private data. > + */ Seems to me that the opposite of "attach" is "detach", not "clear". /** * 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. */ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-04-30 22:13 ` Matthew Wilcox @ 2020-05-01 1:42 ` Al Viro 2020-05-01 1:49 ` Al Viro 2020-05-01 6:39 ` Guoqing Jiang 1 sibling, 1 reply; 9+ messages in thread From: Al Viro @ 2020-05-01 1:42 UTC (permalink / raw) To: Matthew Wilcox Cc: Guoqing Jiang, linux-fsdevel, linux-kernel, hch, david, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On Thu, Apr 30, 2020 at 03:13:38PM -0700, Matthew Wilcox wrote: > > +/** > > + * clear_page_private - clear page's private field and PG_private. > > + * @page: page to be cleared. > > + * > > + * The counterpart function of attach_page_private. > > + * Return: private data of page or NULL if page doesn't have private data. > > + */ > > Seems to me that the opposite of "attach" is "detach", not "clear". Or "remove", perhaps... ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-05-01 1:42 ` Al Viro @ 2020-05-01 1:49 ` Al Viro 2020-05-01 6:41 ` Guoqing Jiang 0 siblings, 1 reply; 9+ messages in thread From: Al Viro @ 2020-05-01 1:49 UTC (permalink / raw) To: Matthew Wilcox Cc: Guoqing Jiang, linux-fsdevel, linux-kernel, hch, david, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On Fri, May 01, 2020 at 02:42:29AM +0100, Al Viro wrote: > On Thu, Apr 30, 2020 at 03:13:38PM -0700, Matthew Wilcox wrote: > > > > +/** > > > + * clear_page_private - clear page's private field and PG_private. > > > + * @page: page to be cleared. > > > + * > > > + * The counterpart function of attach_page_private. > > > + * Return: private data of page or NULL if page doesn't have private data. > > > + */ > > > > Seems to me that the opposite of "attach" is "detach", not "clear". > > Or "remove", perhaps... Actually, "detach" is better - neither "clear" nor "remove" imply "... and give me what used to be attached there", as this thing is doing. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-05-01 1:49 ` Al Viro @ 2020-05-01 6:41 ` Guoqing Jiang 0 siblings, 0 replies; 9+ messages in thread From: Guoqing Jiang @ 2020-05-01 6:41 UTC (permalink / raw) To: Al Viro, Matthew Wilcox Cc: linux-fsdevel, linux-kernel, hch, david, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On 5/1/20 3:49 AM, Al Viro wrote: > On Fri, May 01, 2020 at 02:42:29AM +0100, Al Viro wrote: >> On Thu, Apr 30, 2020 at 03:13:38PM -0700, Matthew Wilcox wrote: >> >>>> +/** >>>> + * clear_page_private - clear page's private field and PG_private. >>>> + * @page: page to be cleared. >>>> + * >>>> + * The counterpart function of attach_page_private. >>>> + * Return: private data of page or NULL if page doesn't have private data. >>>> + */ >>> Seems to me that the opposite of "attach" is "detach", not "clear". >> Or "remove", perhaps... > Actually, "detach" is better - neither "clear" nor "remove" imply "... and give > me what used to be attached there", as this thing is doing. Ok, seems we have reached the agreement about the new name ;-), will follow the instruction. Thanks & Regards, Guoqing ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private 2020-04-30 22:13 ` Matthew Wilcox 2020-05-01 1:42 ` Al Viro @ 2020-05-01 6:39 ` Guoqing Jiang 1 sibling, 0 replies; 9+ messages in thread From: Guoqing Jiang @ 2020-05-01 6:39 UTC (permalink / raw) To: Matthew Wilcox Cc: linux-fsdevel, linux-kernel, hch, david, Andrew Morton, Darrick J. Wong, William Kucharski, Kirill A. Shutemov, Andreas Gruenbacher, Yang Shi, Yafang Shao, Song Liu, linux-raid, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Alexander Viro, Jaegeuk Kim, Chao Yu, linux-f2fs-devel, linux-xfs, Anton Altaparmakov, linux-ntfs-dev, Mike Marshall, Martin Brandenburg, devel, Thomas Gleixner, Sebastian Andrzej Siewior, Roman Gushchin, Andreas Dilger On 5/1/20 12:13 AM, Matthew Wilcox wrote: > On Thu, Apr 30, 2020 at 11:44:42PM +0200, Guoqing Jiang wrote: >> +/** >> + * attach_page_private - attach data to page's private field and set PG_private. >> + * @page: page to be attached and set flag. >> + * @data: data to attach to page's private field. >> + * >> + * Need to take reference as mm.h said "Setting PG_private should also increment >> + * the refcount". >> + */ > I don't think this will read well when added to the API documentation. > Try this: > > /** > * 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. > */ > >> +/** >> + * clear_page_private - clear page's private field and PG_private. >> + * @page: page to be cleared. >> + * >> + * The counterpart function of attach_page_private. >> + * Return: private data of page or NULL if page doesn't have private data. >> + */ > Seems to me that the opposite of "attach" is "detach", not "clear". > > /** > * 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. > */ Thanks you very much, Mattew! Will change them in next version. Best Regards, Guoqing ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH V2 6/9] iomap: use attach/clear_page_private [not found] <20200430214450.10662-1-guoqing.jiang@cloud.ionos.com> 2020-04-30 21:44 ` [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private Guoqing Jiang @ 2020-04-30 21:44 ` Guoqing Jiang 1 sibling, 0 replies; 9+ messages in thread From: Guoqing Jiang @ 2020-04-30 21:44 UTC (permalink / raw) To: linux-fsdevel, linux-kernel Cc: hch, david, willy, Guoqing Jiang, Darrick J. Wong, linux-xfs Since the new pair function is introduced, we can call them to clean the code in iomap. Cc: Christoph Hellwig <hch@infradead.org> Cc: "Darrick J. Wong" <darrick.wong@oracle.com> Cc: linux-xfs@vger.kernel.org Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> --- RFC -> RFC V2 1. change the name of new functions to attach/clear_page_private. 2. call attach_page_private(newpage, clear_page_private(page)) to cleanup code further as suggested by Matthew Wilcox. 3. don't return attach_page_private in iomap_page_create per the comment from Christoph Hellwig. fs/iomap/buffered-io.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 89e21961d1ad..cf4c1b02a9d8 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -59,24 +59,19 @@ iomap_page_create(struct inode *inode, struct page *page) * migrate_page_move_mapping() assumes that pages with private data have * their count elevated by 1. */ - get_page(page); - set_page_private(page, (unsigned long)iop); - SetPagePrivate(page); + attach_page_private(page, iop); return iop; } static void iomap_page_release(struct page *page) { - struct iomap_page *iop = to_iomap_page(page); + struct iomap_page *iop = clear_page_private(page); if (!iop) return; WARN_ON_ONCE(atomic_read(&iop->read_count)); WARN_ON_ONCE(atomic_read(&iop->write_count)); - ClearPagePrivate(page); - set_page_private(page, 0); - put_page(page); kfree(iop); } @@ -554,14 +549,8 @@ iomap_migrate_page(struct address_space *mapping, struct page *newpage, if (ret != MIGRATEPAGE_SUCCESS) return ret; - if (page_has_private(page)) { - ClearPagePrivate(page); - get_page(newpage); - set_page_private(newpage, page_private(page)); - set_page_private(page, 0); - put_page(page); - SetPagePrivate(newpage); - } + if (page_has_private(page)) + attach_page_private(newpage, clear_page_private(page)); if (mode != MIGRATE_SYNC_NO_COPY) migrate_page_copy(newpage, page); -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-01 6:41 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20200430214450.10662-1-guoqing.jiang@cloud.ionos.com>
2020-04-30 21:44 ` [RFC PATCH V2 1/9] include/linux/pagemap.h: introduce attach/clear_page_private Guoqing Jiang
2020-04-30 22:10 ` Andreas Grünbacher
2020-05-01 6:38 ` Guoqing Jiang
2020-04-30 22:13 ` Matthew Wilcox
2020-05-01 1:42 ` Al Viro
2020-05-01 1:49 ` Al Viro
2020-05-01 6:41 ` Guoqing Jiang
2020-05-01 6:39 ` Guoqing Jiang
2020-04-30 21:44 ` [RFC PATCH V2 6/9] iomap: use attach/clear_page_private Guoqing Jiang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).