• Andrew Morton's avatar
    net: don't use in_atomic() in gfp_any() · 99709372
    Andrew Morton authored
    The problem is that in_atomic() will return false inside spinlocks if
    CONFIG_PREEMPT=n.  This will lead to deadlockable GFP_KERNEL allocations
    from spinlocked regions.
    
    Secondly, if CONFIG_PREEMPT=y, this bug solves itself because networking
    will instead use GFP_ATOMIC from this callsite.  Hence we won't get the
    might_sleep() debugging warnings which would have informed us of the buggy
    callsites.
    
    Solve both these problems by switching to in_interrupt().  Now, if someone
    runs a gfp_any() allocation from inside spinlock we will get the warning
    if CONFIG_PREEMPT=y.
    
    I reviewed all callsites and most of them were too complex for my little
    brain and none of them documented their interface requirements.  I have no
    idea what this patch will do.
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    99709372
sock.h 40.4 KB