• Andreas Gruenbacher's avatar
    gfs2: Fix and clean up create / evict interaction · 38552ff6
    Andreas Gruenbacher authored
    When gfs2_create_inode() fails after creating a new inode, it uses the
    GIF_FREE_VFS_INODE and GIF_ALLOC_FAILED inode flags to communicate to
    gfs2_evict_inode() which parts of the inode need to be deallocated and
    destroyed.  In some error cases, the inode ends up being allocated on
    disk and then accidentally left behind.  In others, the inode is
    partially constructed and then not properly destroyed.  Clean this up by
    completely handling the inode deallocation and destruction in
    gfs2_evict_inode().
    
    This means that gfs2_evict_inode() may now be faced with partially
    constructed inodes, so add the necessary checks to cope with that.  In
    particular, make sure that for incompletely constructed inodes, we're
    not accessing the buffers backing the on-disk blocks; the contents may
    be undefined.
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    38552ff6
inode.c 51.8 KB