Re: ANNOUNCE: Linux Kernel ORB: kORBit

From: Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz)
Date: Fri Dec 15 2000 - 19:19:27 EST


> > I guess that when you mmap large files over nfs and write to them, you get
> > similar problems.
> >
> > > Oh, and try to eat atomic memory by ping -f kORBit-ized box.
> >
> > When linux is out of atomic memory, it will die anyway.
>
> Not unless your driver is broken.

ok_to_allocate:
                ******* INTERRUPT ********
        spin_lock_irqsave(&page_alloc_lock, flags);
        /* if it's not a dma request, try non-dma first */
        if (!(gfp_mask & __GFP_DMA))
                RMQUEUE_TYPE(order, 0);
        RMQUEUE_TYPE(order, 1);
        spin_unlock_irqrestore(&page_alloc_lock, flags);

nopage:
        return 0;
}

When interrupt comes here and eats page just freed by try_to_free_pages(),
GFP_KERNEL allocation will fail => The kernel goes crazy, shoots
processes, returns -ENOMEM to calls, maybe damages its structures.
Deadlock in getblk, if memory is full of dirty file mapped pages.

You actually do not need network flood to kill your box. Just imagine that
kpiod is swapping files out too slowly, free memory is going lower and
lower, every process screaming with "VM: do_try_to_free_pages failed" and
the system is aproaching instant death.

Besides, __get_free_pages just encourages people to write broken drivers
because it tries to hide allocation bugs. If there would be something like

if (current->flags & PF_MEMALLOC && !in_interrupt()) panic("swapper fscked up!");

you would see how many parts of system are "broken".

Mikulas

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Dec 15 2000 - 21:00:34 EST