btrfs: qgroup: exit the rescan worker during umount
authorJustin Maggard <jmaggard10@gmail.com>
Wed, 4 Nov 2015 23:56:16 +0000 (15:56 -0800)
committerFilipe Manana <fdmanana@suse.com>
Thu, 5 Nov 2015 10:32:20 +0000 (10:32 +0000)
commit7343dd61fd1b57c40cc06a5b5b5386df7f73c3ac
treec272af51bf4bba2fd2e1429aa943ad8b78565ea7
parent9c9464cc92668984ebed79e22b5063877a8d97db
btrfs: qgroup: exit the rescan worker during umount

I was hitting a consistent NULL pointer dereference during shutdown that
showed the trace running through end_workqueue_bio().  I traced it back to
the endio_meta_workers workqueue being poked after it had already been
destroyed.

Eventually I found that the root cause was a qgroup rescan that was still
in progress while we were stopping all the btrfs workers.

Currently we explicitly pause balance and scrub operations in
close_ctree(), but we do nothing to stop the qgroup rescan.  We should
probably be doing the same for qgroup rescan, but that's a much larger
change.  This small change is good enough to allow me to unmount without
crashing.

Signed-off-by: Justin Maggard <jmaggard@netgear.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/qgroup.c