This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


Re: [Xen-devel] LVM Snapshot Troubles

To: Michael Vrable <mvrable@xxxxxxxxxxx>
Subject: Re: [Xen-devel] LVM Snapshot Troubles
From: Ian Pratt <Ian.Pratt@xxxxxxxxxxxx>
Date: Tue, 28 Sep 2004 22:23:41 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxxxx, Ian.Pratt@xxxxxxxxxxxx
Delivery-date: Tue, 28 Sep 2004 22:35:17 +0100
Envelope-to: steven.hand@xxxxxxxxxxxx
In-reply-to: Your message of "Tue, 28 Sep 2004 13:52:04 PDT." <20040928135204.A16031@xxxxxxxxxxx>
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-devel>
List-help: <mailto:xen-devel-request@lists.sourceforge.net?subject=help>
List-id: List for Xen developers <xen-devel.lists.sourceforge.net>
List-post: <mailto:xen-devel@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=unsubscribe>
Sender: xen-devel-admin@xxxxxxxxxxxxxxxxxxxxx
> On Tue, Sep 28, 2004 at 09:06:59PM +0100, Ian Pratt wrote:
> > It might be worth adding "| __GFP_REPEAT" to the alloc_page in 
> > drivers/md/kcopyd.c
> I think that __GFP_REPEAT is a no-op for single-page allocations, as in
> this case (though I haven't tried it).  __GFP_NOFAIL might work, but
> that sounds like a cure worse than the disease.

Yep, you're right. From mm/page_alloc.c:

        if (!(gfp_mask & __GFP_NORETRY)) {
                if ((order <= 3) || (gfp_mask & __GFP_REPEAT))
                        do_retry = 1;
                if (gfp_mask & __GFP_NOFAIL)
                        do_retry = 1;
        if (do_retry) {
                blk_congestion_wait(WRITE, HZ/50);

I think it's worth trying GFP_NOFAIL just to see what happens.
The correct fix is probably to wrap the page_alloc in a loop that
retries a few times, maybe something like:

        unsigned long start = jiffies;

        while( (pl->page = alloc_page(GFP_KERNEL)) == NULL &&
                jiffies - start < 5*HZ )
                blk_congestion_wait(WRITE, HZ/5);


This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>