[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] LVM Snapshot Troubles

> 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



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.