• Josef Bacik's avatar
    Btrfs: keep inode pinned when compressing writes · 8180ef88
    Josef Bacik authored
    A user reported lots of problems using compression on the new code and it
    turns out part of the problem was that igrab() was failing when we added a
    new ordered extent.  This is because when writing out an inode under
    compression we immediately return without actually doing anything to the
    pages, and then in another thread at some point down the line actually do
    the ordered dance.  The problem is between the point that we start writeback
    and we actually add the ordered extent we could be trying to reclaim the
    inode, which makes igrab() return NULL.  So we need to do an igrab() when we
    create the async extent and then drop it when we are done with it.  This
    makes sure we stay pinned in memory until the ordered extent can get a
    reference on it and we are good to go.  With this patch we no longer panic
    in btrfs_finish_ordered_io().  Thanks,
    Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
    8180ef88
inode.c 203 KB