Skip to content
  • Tejun Heo's avatar
    idr: make idr_destroy() imply idr_remove_all() · 9bb26bc1
    Tejun Heo authored
    
    
    idr is silly in quite a few ways, one of which is how it's supposed to
    be destroyed - idr_destroy() doesn't release IDs and doesn't even whine
    if the idr isn't empty.  If the caller forgets idr_remove_all(), it
    simply leaks memory.
    
    Even ida gets this wrong and leaks memory on destruction.  There is
    absoltely no reason not to call idr_remove_all() from idr_destroy().
    Nobody is abusing idr_destroy() for shrinking free layer buffer and
    continues to use idr after idr_destroy(), so it's safe to do remove_all
    from destroy.
    
    In the whole kernel, there is only one place where idr_remove_all() is
    legitimiately used without following idr_destroy() while there are quite
    a few places where the caller forgets either idr_remove_all() or
    idr_destroy() leaking memory.
    
    This patch makes idr_destroy() call idr_destroy_all() and updates the
    function description accordingly.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9bb26bc1