btrfs: track balance progress with virtual address range
The usage=90 heuristic applied when resuming a balance can change the
set of block groups selected by the original request. In particular, it
can skip full block groups that have not been considered yet.
The chunk tree is scanned in descending virtual address order. Record
that progress by reducing the upper bound of the vrange filter after each
chunk is considered. Create a 0..current-address range when the original
balance did not have a vrange filter.
Write the cursor back to the balance item during transaction commits, as
with device stats and device-replace progress. Keep the original limit
and other filters intact. Commit on pause so progress survives unmount
or a read-only remount even without another transaction.