Skip to content
  • Joonsoo Kim's avatar
    slab: add unlikely macro to help compiler · 8a9c61d4
    Joonsoo Kim authored
    
    
    This patchset does some cleanup and tries to remove lockdep annotation.
    
    Patches 1~2 are just for really really minor improvement.
    Patches 3~9 are for clean-up and removing lockdep annotation.
    
    There are two cases that lockdep annotation is needed in SLAB.
    1) holding two node locks
    2) holding two array cache(alien cache) locks
    
    I looked at the code and found that we can avoid these cases without any
    negative effect.
    
    1) occurs if freeing object makes new free slab and we decide to
       destroy it.  Although we don't need to hold the lock during destroying
       a slab, current code do that.  Destroying a slab without holding the
       lock would help the reduction of the lock contention.  To do it, I
       change the implementation that new free slab is destroyed after
       releasing the lock.
    
    2) occurs on similar situation.  When we free object from non-local
       node, we put this object to alien cache with holding the alien cache
       lock.  If alien cache is full, we try to flush alien cache to proper
       node cache, and, in this time, new free slab could be made.  Destroying
       it would be started and we will free metadata object which comes from
       another node.  In this case, we need another node's alien cache lock to
       free object.  This forces us to hold two array cache locks and then we
       need lockdep annotation although they are always different locks and
       deadlock cannot be possible.  To prevent this situation, I use same way
       as 1).
    
    In this way, we can avoid 1) and 2) cases, and then, can remove lockdep
    annotation. As short stat noted, this makes SLAB code much simpler.
    
    This patch (of 9):
    
    slab_should_failslab() is called on every allocation, so to optimize it
    is reasonable.  We normally don't allocate from kmem_cache.  It is just
    used when new kmem_cache is created, so it's very rare case.  Therefore,
    add unlikely macro to help compiler optimization.
    
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8a9c61d4