Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757239Ab3CFLES (ORCPT ); Wed, 6 Mar 2013 06:04:18 -0500 Received: from mail-pb0-f48.google.com ([209.85.160.48]:38307 "EHLO mail-pb0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756903Ab3CFLER (ORCPT ); Wed, 6 Mar 2013 06:04:17 -0500 Message-ID: <513722AA.2030001@gmail.com> Date: Wed, 06 Mar 2013 19:04:10 +0800 From: Ric Mason User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130221 Thunderbird/17.0.3 MIME-Version: 1.0 To: Li Haifeng CC: Hugh Dickins , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: Should a swapped out page be deleted from swap cache? References: <512338A6.1030602@gmail.com> <51241B66.7080004@gmail.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3320 Lines: 77 On 03/06/2013 01:34 PM, Li Haifeng wrote: > 2013/2/20 Ric Mason : >> Hi Hugh, >> >> >> On 02/20/2013 02:56 AM, Hugh Dickins wrote: >>> On Tue, 19 Feb 2013, Ric Mason wrote: >>>> There is a call of try_to_free_swap in function swap_writepage, if >>>> swap_writepage is call from shrink_page_list path, PageSwapCache(page) == >>>> trure, PageWriteback(page) maybe false, page_swapcount(page) == 0, then >>>> will >>>> delete the page from swap cache and free swap slot, where I miss? >>> That's correct. PageWriteback is sure to be false there. page_swapcount >>> usually won't be 0 there, but sometimes it will be, and in that case we >>> do want to delete from swap cache and free the swap slot. >> >> 1) If PageSwapCache(page) == true, PageWriteback(page) == false, >> page_swapcount(page) == 0 in swap_writepage(shrink_page_list path), then >> will delete the page from swap cache and free swap slot, in function >> swap_writepage: >> >> if (try_to_free_swap(page)) { >> unlock_page(page); >> goto out; >> } >> writeback will not execute, that's wrong. Where I miss? > when the page is deleted from swap cache and corresponding swap slot > is free, the page is set dirty. The dirty page won't be reclaimed. It > is not wrong. I don't think so. For dirty pages, there are two steps: 1)writeback 2)reclaim. Since PageSwapCache(page) == true && PageWriteback(page) == false && page_swapcount(page) == 0 in swap_writeback(), try_to_free_swap() will return true and writeback will be skip. Then how can step one be executed? > > corresponding path lists as below. > when swap_writepage() is called by pageout() in shrink_page_list(). > pageout() will return PAGE_SUCCESS. For PAGE_SUCCESS, when > PageDirty(page) is true, this reclaiming page will be keeped in the > inactive LRU list. > shrink_page_list() > { > ... > 904 switch (pageout(page, mapping, sc)) { > 905 case PAGE_KEEP: > 906 nr_congested++; > 907 goto keep_locked; > 908 case PAGE_ACTIVATE: > 909 goto activate_locked; > 910 case PAGE_SUCCESS: > 911 if (PageWriteback(page)) > 912 goto keep_lumpy; > 913 if (PageDirty(page)) > 914 goto keep; > ...} > >> 2) In the function pageout, page will be set PG_Reclaim flag, since this >> flag is set, end_swap_bio_write->end_page_writeback: >> if (TestClearPageReclaim(page)) >> rotate_reclaimable_page(page); >> it means that page will be add to the tail of lru list, page is clean >> anonymous page this time and will be reclaim to buddy system soon, correct? > correct >> If is correct, what is the meaning of rotate here? > Rotating here is to add the page to the tail of inactive LRU list. So > this page will be reclaimed ASAP while reclaiming. > >>> Hugh >> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/