Btrfs: fix crash due to not cleaning up tree log block's dirty bits
authorLiu Bo <bo.li.liu@oracle.com>
Thu, 25 Jan 2018 18:02:51 +0000 (11:02 -0700)
committerDavid Sterba <dsterba@suse.com>
Fri, 2 Feb 2018 15:24:24 +0000 (16:24 +0100)
commit80ea95aed299a0cbbc0901c514916f99bc55f56f
treea6bd680f201d90cc007254cb988093b41b936f8c
parent97e728fc36accf1adefef00fb1fc81363fcc1f7e
Btrfs: fix crash due to not cleaning up tree log block's dirty bits

In cases that the whole fs flips into readonly status due to failures in
critical sections, then log tree's blocks are still dirty, and this leads
to a crash during umount time, the crash is about use-after-free,

umount
 -> close_ctree
    -> stop workers
    -> iput(btree_inode)
       -> iput_final
          -> write_inode_now
     -> ...
       -> queue job on stop'd workers

cc: <stable@vger.kernel.org> v3.12+
Fixes: 44384c150651 ("Btrfs: cleanup reserved space when freeing tree log on error")
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tree-log.c