• Nick Piggin's avatar
    slab: fix regression in touched logic · 44b57f1c
    Nick Piggin authored
    When factoring common code into transfer_objects in commit 3ded175a ("slab: add
    transfer_objects() function"), the 'touched' logic got a bit broken. When
    refilling from the shared array (taking objects from the shared array), we are
    making use of the shared array so it should be marked as touched.
    
    Subsequently pulling an element from the cpu array and allocating it should
    also touch the cpu array, but that is taken care of after the alloc_done label.
    (So yes, the cpu array was getting touched = 1 twice).
    
    So revert this logic to how it worked in earlier kernels.
    
    This also affects the behaviour in __drain_alien_cache, which would previously
    'touch' the shared array and now does not. I think it is more logical not to
    touch there, because we are pushing objects into the shared array rather than
    pulling them off. So there is no good reason to postpone reaping them -- if the
    shared array is getting utilized, then it will get 'touched' in the alloc path
    (where this patch now restores the touch).
    Acked-by: default avatarChristoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
    Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
    44b57f1c
slab.c 117 KB