• Andrew Morton's avatar
    [PATCH] dentry qstr consolidation · 90b163a4
    Andrew Morton authored
    When dentries are given an external name we currently allocate an entire qstr
    for the external name.
    
    This isn't needed.  We can use the internal qstr and kmalloc only the string
    itself.  This saves 12 bytes from externally-allocated names and 4 bytes from
    the dentry itself.
    
    The saving of 4 bytes from the dentry doesn't actually decrease the dentry's
    storage requirements, but it makes four more bytes available for internal
    names, taking the internal/external ratio from 89% up to 93% on my 1.5M files.
    
    
    Fix:
    
    The qstr consolidation wasn't quite right, because it can cause qstr->len to
    be unstable during lookup lockless traverasl.
    
    Fix that up by taking d_lock earlier in lookup.  This serialises against
    d_move.
    
    Take the lock after comparing the parent and hash to preserve the
    mostly-lockless behaviour.
    
    This obsoletes d_movecount, which is removed.
    90b163a4
dcache.c 42 KB