From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joshua Nicholas Subject: Re: ADs over dom0 iSCSI = high page_count() Date: Fri, 05 Dec 2008 13:44:21 -0500 Message-ID: <49397685.3000605@virtualiron.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Keir Fraser wrote: >> Also in netback.c in net_tx_action_dealloc() after make_tx_response() I see: >> >> /* Ready for next use. */ >> gnttab_reset_grant_page() >> >> Sure this resets the page_mapcount() back to 0, but it also >> sets the page_count() to 1 regardless of the current value. >> >> QUESTION 2: Why does the page_count() have to be set to 1? >> > > A page is only acted on by net_tx_action_dealloc() after it is queued by > netif_page_release(), and that is called from free_pages(), which means > page_count() must be zero at that time (i.e., page is unused). > gnttab_reset_grant_page() is simply setting up the page for its next use. > > If the page is *not* actually finished with by the net or blocks layers, > that would be very bad indeed. :-) > gnttab_copy_grant_page() can only return -EBUSY if the page_mapcount() is set and thus the IO must have gone through __gnttab_dma_map_page(). So is the page_count() also 0 in netback.c net_tx_action_dealloc() when the entry has been pending too long and gnttab_copy_grant_page() (called via copy_pending_req()) returns -EBUSY? How does the cleanup work when this item is deleted from the pending_inuse_head due to -EBUSY being returned? Thank you, Joshua