Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757394Ab3CFLKf (ORCPT ); Wed, 6 Mar 2013 06:10:35 -0500 Received: from mail-oa0-f53.google.com ([209.85.219.53]:61196 "EHLO mail-oa0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757149Ab3CFLKd (ORCPT ); Wed, 6 Mar 2013 06:10:33 -0500 Message-ID: <51372423.3060709@gmail.com> Date: Wed, 06 Mar 2013 19:10:27 +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> <513722AA.2030001@gmail.com> In-Reply-To: <513722AA.2030001@gmail.com> 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: 3567 Lines: 91 On 03/06/2013 07:04 PM, Ric Mason wrote: > 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? s/swap_writeback()/swap_writepage() Btw, Hi Hugh, could you explain more to us? :-) > >> >> 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/