@@ -1769,7 +1769,8 @@ static void btrfs_clear_bit_hook(struct inode *inode,
1769
1769
1770
1770
if (root -> root_key .objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
1771
1771
&& do_list && !(state -> state & EXTENT_NORESERVE ))
1772
- btrfs_free_reserved_data_space (inode , len );
1772
+ __btrfs_free_reserved_data_space (inode , state -> start ,
1773
+ len );
1773
1774
1774
1775
__percpu_counter_add (& root -> fs_info -> delalloc_bytes , - len ,
1775
1776
root -> fs_info -> delalloc_batch );
@@ -1992,7 +1993,8 @@ static void btrfs_writepage_fixup_worker(struct btrfs_work *work)
1992
1993
goto again ;
1993
1994
}
1994
1995
1995
- ret = btrfs_delalloc_reserve_space (inode , PAGE_CACHE_SIZE );
1996
+ ret = __btrfs_delalloc_reserve_space (inode , page_start ,
1997
+ PAGE_CACHE_SIZE );
1996
1998
if (ret ) {
1997
1999
mapping_set_error (page -> mapping , ret );
1998
2000
end_extent_writepage (page , ret , page_start , page_end );
@@ -4638,14 +4640,17 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
4638
4640
if ((offset & (blocksize - 1 )) == 0 &&
4639
4641
(!len || ((len & (blocksize - 1 )) == 0 )))
4640
4642
goto out ;
4641
- ret = btrfs_delalloc_reserve_space (inode , PAGE_CACHE_SIZE );
4643
+ ret = __btrfs_delalloc_reserve_space (inode ,
4644
+ round_down (from , PAGE_CACHE_SIZE ), PAGE_CACHE_SIZE );
4642
4645
if (ret )
4643
4646
goto out ;
4644
4647
4645
4648
again :
4646
4649
page = find_or_create_page (mapping , index , mask );
4647
4650
if (!page ) {
4648
- btrfs_delalloc_release_space (inode , PAGE_CACHE_SIZE );
4651
+ __btrfs_delalloc_release_space (inode ,
4652
+ round_down (from , PAGE_CACHE_SIZE ),
4653
+ PAGE_CACHE_SIZE );
4649
4654
ret = - ENOMEM ;
4650
4655
goto out ;
4651
4656
}
@@ -4713,7 +4718,8 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
4713
4718
4714
4719
out_unlock :
4715
4720
if (ret )
4716
- btrfs_delalloc_release_space (inode , PAGE_CACHE_SIZE );
4721
+ __btrfs_delalloc_release_space (inode , page_start ,
4722
+ PAGE_CACHE_SIZE );
4717
4723
unlock_page (page );
4718
4724
page_cache_release (page );
4719
4725
out :
@@ -7644,7 +7650,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
7644
7650
spin_unlock (& BTRFS_I (inode )-> lock );
7645
7651
}
7646
7652
7647
- btrfs_free_reserved_data_space (inode , len );
7653
+ __btrfs_free_reserved_data_space (inode , start , len );
7648
7654
WARN_ON (dio_data -> reserve < len );
7649
7655
dio_data -> reserve -= len ;
7650
7656
current -> journal_info = dio_data ;
@@ -8434,7 +8440,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
8434
8440
mutex_unlock (& inode -> i_mutex );
8435
8441
relock = true;
8436
8442
}
8437
- ret = btrfs_delalloc_reserve_space (inode , count );
8443
+ ret = __btrfs_delalloc_reserve_space (inode , offset , count );
8438
8444
if (ret )
8439
8445
goto out ;
8440
8446
dio_data .outstanding_extents = div64_u64 (count +
@@ -8463,11 +8469,11 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
8463
8469
current -> journal_info = NULL ;
8464
8470
if (ret < 0 && ret != - EIOCBQUEUED ) {
8465
8471
if (dio_data .reserve )
8466
- btrfs_delalloc_release_space (inode ,
8467
- dio_data .reserve );
8472
+ __btrfs_delalloc_release_space (inode , offset ,
8473
+ dio_data .reserve );
8468
8474
} else if (ret >= 0 && (size_t )ret < count )
8469
- btrfs_delalloc_release_space (inode ,
8470
- count - (size_t )ret );
8475
+ __btrfs_delalloc_release_space (inode , offset ,
8476
+ count - (size_t )ret );
8471
8477
}
8472
8478
out :
8473
8479
if (wakeup )
@@ -8675,7 +8681,11 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
8675
8681
u64 page_end ;
8676
8682
8677
8683
sb_start_pagefault (inode -> i_sb );
8678
- ret = btrfs_delalloc_reserve_space (inode , PAGE_CACHE_SIZE );
8684
+ page_start = page_offset (page );
8685
+ page_end = page_start + PAGE_CACHE_SIZE - 1 ;
8686
+
8687
+ ret = __btrfs_delalloc_reserve_space (inode , page_start ,
8688
+ PAGE_CACHE_SIZE );
8679
8689
if (!ret ) {
8680
8690
ret = file_update_time (vma -> vm_file );
8681
8691
reserved = 1 ;
@@ -8694,8 +8704,6 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
8694
8704
again :
8695
8705
lock_page (page );
8696
8706
size = i_size_read (inode );
8697
- page_start = page_offset (page );
8698
- page_end = page_start + PAGE_CACHE_SIZE - 1 ;
8699
8707
8700
8708
if ((page -> mapping != inode -> i_mapping ) ||
8701
8709
(page_start >= size )) {
@@ -8772,7 +8780,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
8772
8780
}
8773
8781
unlock_page (page );
8774
8782
out :
8775
- btrfs_delalloc_release_space (inode , PAGE_CACHE_SIZE );
8783
+ __btrfs_delalloc_release_space (inode , page_start , PAGE_CACHE_SIZE );
8776
8784
out_noreserve :
8777
8785
sb_end_pagefault (inode -> i_sb );
8778
8786
return ret ;
0 commit comments