diff options
| author | Dave Airlie <airlied@redhat.com> | 2020-08-11 11:58:31 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2020-08-11 11:58:31 +1000 | 
| commit | c44264f9f729fd63bd6a81a6ac5cd6cd49af09e5 (patch) | |
| tree | ad77b18ffeafb50b3eb9ba6472670dc1d96f5558 /fs/btrfs/inode.c | |
| parent | ca457ab5908603b36be903e73977afde1ba03c84 (diff) | |
| parent | bcf876870b95592b52519ed4aafcf9d95999bc9c (diff) | |
Merge tag 'v5.8' into drm-next
I need to backmerge 5.8 as I've got a bunch of fixes sitting
on an rc7 base that I want to land.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'fs/btrfs/inode.c')
| -rw-r--r-- | fs/btrfs/inode.c | 23 | 
1 files changed, 10 insertions, 13 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 43c803c16b48..6862cd7e21a9 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8123,20 +8123,17 @@ again:  	/*  	 * Qgroup reserved space handler  	 * Page here will be either -	 * 1) Already written to disk -	 *    In this case, its reserved space is released from data rsv map -	 *    and will be freed by delayed_ref handler finally. -	 *    So even we call qgroup_free_data(), it won't decrease reserved -	 *    space. -	 * 2) Not written to disk -	 *    This means the reserved space should be freed here. However, -	 *    if a truncate invalidates the page (by clearing PageDirty) -	 *    and the page is accounted for while allocating extent -	 *    in btrfs_check_data_free_space() we let delayed_ref to -	 *    free the entire extent. +	 * 1) Already written to disk or ordered extent already submitted +	 *    Then its QGROUP_RESERVED bit in io_tree is already cleaned. +	 *    Qgroup will be handled by its qgroup_record then. +	 *    btrfs_qgroup_free_data() call will do nothing here. +	 * +	 * 2) Not written to disk yet +	 *    Then btrfs_qgroup_free_data() call will clear the QGROUP_RESERVED +	 *    bit of its io_tree, and free the qgroup reserved data space. +	 *    Since the IO will never happen for this page.  	 */ -	if (PageDirty(page)) -		btrfs_qgroup_free_data(inode, NULL, page_start, PAGE_SIZE); +	btrfs_qgroup_free_data(inode, NULL, page_start, PAGE_SIZE);  	if (!inode_evicting) {  		clear_extent_bit(tree, page_start, page_end, EXTENT_LOCKED |  				 EXTENT_DELALLOC | EXTENT_DELALLOC_NEW |  | 
