• Dave Johnson's avatar
    [PATCH] fix cramfs making duplicate entries in inode cache · a97c9bf3
    Dave Johnson authored
    Every time cramfs_lookup() is called to lookup and inode for a dentry,
    get_cramfs_inode() will allocate a new inode without checking to see if that
    inode already exists in the inode cache.
    
    This is fine the first time, but if the dentry cache entry(ies) associated
    with that inode are aged out, but the inode entry is not aged out (which can
    be quite common if the inode has buffer cache linked to it), cramfs_lookup()
    will be called again and another inode will be allocated and added to the
    inode cache creating a duplicate in the inode cache.
    
    The big issue here is that the buffers associated with each inode cache entry
    are not shared between the duplicates!
    
    The older inode entries are now orphaned as no dentry points to it and won't
    be freed until the buffer cache assoicated with them are first freed.  The
    newest entry will have to create all new buffer cache for each part of its
    file as the old buffer cache is now orphaned as well.
    
    Patch below fixes this by making get_cramfs_inode() use the inode cache before
    blindly creating a new entry every time.  This eliminates the duplicate inodes
    and duplicate buffer cache.
    
    Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    a97c9bf3
inode.c 13.8 KB