Skip to content
  • Josef Bacik's avatar
    Btrfs: fix stale entries in readdir · e4fd493c
    Josef Bacik authored
    In fixing the readdir+pagefault deadlock I accidentally introduced a
    stale entry regression in readdir.  If we get close to full for the
    temporary buffer, and then skip a few delayed deletions, and then try to
    add another entry that won't fit, we will emit the entries we found and
    retry.  Unfortunately we delete entries from our del_list as we find
    them, assuming we won't need them.  However our pos will be with
    whatever our last entry was, which could be before the delayed deletions
    we skipped, so the next search will add the deleted entries back into
    our readdir buffer.  So instead don't delete entries we find in our
    del_list so we can make sure we always find our delayed deletions.  This
    is a slight perf hit for readdir with lots of pending deletions, but
    hopefully this isn't a common occurrence.  If it is we can revist this
    and optimize it.
    
    cc: stable@vger.kernel.org
    Fixes: 23b5ec74
    
     ("btrfs: fix readdir deadlock with pagefault")
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    e4fd493c