On Mon, Apr 20, 2020 at 11:14:35PM +0200, Guoqing Jiang wrote: > On 20.04.20 02:30, Matthew Wilcox wrote: > > On Mon, Apr 20, 2020 at 09:20:46AM +1000, Dave Chinner wrote: > > > Anyone expecting to use set/clear_page_private as a matched pair (as > > > the names suggest they are) is in for a horrible surprise... > > Dave, thanks for the valuable suggestion! > > > Oh, blast. I hadn't noticed that. And we're horribly inconsistent > > with how we use set_page_private() too -- rb_alloc_aux_page() doesn't > > increment the page's refcount, for example. > > > > So, new (pair of) names: > > > > set_fs_page_private() > > clear_fs_page_private() > > Hmm, maybe it is better to keep the original name (set/clear_page_private). No. Changing the semantics of set_page_private() without changing the function signature is bad because it makes patches silently break when applied to trees on either side of the change. So we need a new name. > 1. it would be weird for other subsystems (not belong to fs scope) to call > the > function which is supposed to be used in fs, though we can add a wrapper > for other users out of fs. > > 2. no function in mm.h is named like *fs*. perhaps it should be in pagemap.h since it's for pagecache pages. > > since it really seems like it's only page cache pages which need to > > follow the rules about setting PagePrivate and incrementing the refcount. > > Also, I think I'd like to see them take/return a void *: > > > > void *set_fs_page_private(struct page *page, void *data) > > { > > get_page(page); > > set_page_private(page, (unsigned long)data); > > SetPagePrivate(page); > > return data; > > } > > Seems some functions could probably use the above helper, such as > iomap_page_create, iomap_migrate_page, get_page_bootmem and > f2fs_set_page_private etc. Yes. > Really appreciate for your input though the thing is a little beyond my > original intention ;-), will try to send a new version after reading more > fs code. That's kind of the way things go ... you start pulling on one thread and all of a sudden, you're weaving a new coat ;-)