Jeff Mahoney d2c609b834 btrfs: properly track when rescan worker is running
The qgroup_flags field is overloaded such that it reflects the on-disk
status of qgroups and the runtime state.  The BTRFS_QGROUP_STATUS_FLAG_RESCAN
flag is used to indicate that a rescan operation is in progress, but if
the file system is unmounted while a rescan is running, the rescan
operation is paused.  If the file system is then mounted read-only,
the flag will still be present but the rescan operation will not have
been resumed.  When we go to umount, btrfs_qgroup_wait_for_completion
will see the flag and interpret it to mean that the rescan worker is
still running and will wait for a completion that will never come.

This patch uses a separate flag to indicate when the worker is
running.  The locking and state surrounding the qgroup rescan worker
needs a lot of attention beyond this patch but this is enough to
avoid a hung umount.

Cc: <stable@vger.kernel.org> # v4.4+
Signed-off-by; Jeff Mahoney <jeffm@suse.com>
Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>

Signed-off-by: Chris Mason <clm@fb.com>
2016-08-25 03:58:19 -07:00
..
2016-06-30 23:28:09 -04:00
2016-01-20 17:09:18 -08:00
2016-05-27 15:26:11 -07:00
2016-05-20 17:58:30 -07:00
2016-06-30 13:10:49 +02:00
2016-06-28 16:55:34 -04:00
2016-04-26 12:00:48 -04:00
2016-01-22 18:04:28 -05:00
2016-06-23 00:29:53 +02:00
2016-05-23 17:04:14 -07:00
2016-01-22 18:04:28 -05:00
2016-01-22 18:04:28 -05:00
2016-05-26 19:34:26 -07:00
2016-06-07 22:07:09 -04:00
2016-06-27 12:18:44 -07:00
2016-06-10 11:32:47 -04:00
2016-01-22 18:04:28 -05:00
2016-05-23 17:04:14 -07:00
2016-06-20 17:11:29 -04:00
2016-07-01 10:24:18 -04:00
2016-06-24 12:11:34 -04:00
2016-04-18 11:18:55 +02:00
2016-01-22 18:04:28 -05:00