Hi Matthew, On Wed, 28 Dec 2022 22:36:20 +0000 Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > On Wed, Dec 28, 2022 at 07:34:08PM +0800, Kefeng Wang wrote: > > +static inline struct page *damon_get_page(unsigned long pfn) > > +{ > > + struct folio *folio = damon_get_folio(pfn); > > + > > + /* when folio is NULL, return &(0->page) mean return NULL */ > > + return &folio->page; > > I really don't think this comment is needed. This is the standard idiom > for converting from a folio to its head page. Well, I think some of DAMON code readers (at least me) might not yet that familiar with Folio, as it has not been a while since DAMON started using Folio. Also, maybe I overlooked some comments or documents, but I was unable to sure if the offset of 'page' in 'folio' is intended to be never changed with any future changes, or not. So I thought adding one more line of explanation here could be helpful for someone. I also show some code using 'folio_page(folio, 0)', so I might not be the only one who at least sometimes forget the idiom. For helping people remember this idiom easier, what do you think about having a new macro or static inline function, say, 'folio_head_page()' and comment why passing NULL is ok on the function? IMHO, that would be easier to read. Thanks, SJ