btrfs: don't clear qgroup reserved bit in release_folio
authorBoris Burkov <boris@bur.io>
Fri, 1 Dec 2023 21:00:12 +0000 (13:00 -0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 6 Dec 2023 21:32:52 +0000 (22:32 +0100)
commita86805504b88f636a6458520d85afdf0634e3c6b
tree2dff8f9bbc89708cef9379c493f35bf92bb6ccd2
parentb321a52cce062ec7ed385333a33905d22159ce36
btrfs: don't clear qgroup reserved bit in release_folio

The EXTENT_QGROUP_RESERVED bit is used to "lock" regions of the file for
duplicate reservations. That is two writes to that range in one
transaction shouldn't create two reservations, as the reservation will
only be freed once when the write finally goes down. Therefore, it is
never OK to clear that bit without freeing the associated qgroup
reserve. At this point, we don't want to be freeing the reserve, so mask
off the bit.

CC: stable@vger.kernel.org # 5.15+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c