Hi Hugh, On Fri, Dec 17, 2010 at 10:21 AM, Hugh Dickins <hughd@xxxxxxxxxx> wrote: > On Fri, 17 Dec 2010, Minchan Kim wrote: >> On Thu, Dec 16, 2010 at 12:59:58PM +0100, Miklos Szeredi wrote: >> > On Thu, 16 Dec 2010, Minchan Kim wrote: >> > > >> > > Why do you release reference of old? >> > >> > That's the page cache reference we release. Just like we acquire the >> > page cache reference for "new" above. >> >> I mean current page cache handling semantic and page reference counting semantic >> is separeated. For example, remove_from_page_cache doesn't drop the reference of page. >> That's because we need more works after drop the page from page cache. >> Look at shmem_writepage, truncate_complete_page. > > I disagree with you there: I like the way Miklos made it symmetric, > I like the way delete_from_swap_cache drops the swap cache reference, > I dislike the way remove_from_page_cache does not - I did once try to > change that, but did a bad job, messed up reiserfs or reiser4 I forget > which, retreated in shame. I agree symmetric is good. I just said current fact which is that remove_from_page_cache doesn't release ref. So I thought we have to match current semantic to protect confusing. Okay. I will not oppose current semantics. Instead of it, please add it (ex, caller should hold the page reference) in function description. I am happy to hear that you tried it. Although it is hard, I think it's very valuable thing. Could you give me hint to googling your effort and why it is failed? > > In both the examples you give, shmem_writepage and truncate_complete_page, > the caller has to be holding their own reference, in part because they > locked the page, and will need to unlock it before releasing their ref. > I think that would be true of any replace_page_cache_page caller. Agree. > >> >> You makes the general API and caller might need works before the old page >> is free. So how about this? >> >> err = replace_page_cache_page(oldpage, newpage, GFP_KERNEL); >> if (err) { >> ... >> } >> >> page_cache_release(oldpage); /* drop ref of page cache */ >> >> >> > >> > I suspect it's historic that page_cache_release() doesn't drop the >> > page cache ref. >> >> Sorry I can't understand your words. > > Me neither: I believe Miklos meant __remove_from_page_cache() rather > than page_cache_release() in that instance. Maybe. :) Thanks for the comment, Hugh. > > Hugh > -- Kind regards, Minchan Kim -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html