@@ -3262,6 +3262,9 @@ static void ext4_set_iomap(struct inode *inode, struct iomap *iomap,
3262
3262
iomap -> addr = (u64 ) map -> m_pblk << blkbits ;
3263
3263
if (flags & IOMAP_DAX )
3264
3264
iomap -> addr += EXT4_SB (inode -> i_sb )-> s_dax_part_off ;
3265
+ } else if (map -> m_flags & EXT4_MAP_DELAYED ) {
3266
+ iomap -> type = IOMAP_DELALLOC ;
3267
+ iomap -> addr = IOMAP_NULL_ADDR ;
3265
3268
} else {
3266
3269
iomap -> type = IOMAP_HOLE ;
3267
3270
iomap -> addr = IOMAP_NULL_ADDR ;
@@ -3424,35 +3427,11 @@ const struct iomap_ops ext4_iomap_overwrite_ops = {
3424
3427
.iomap_end = ext4_iomap_end ,
3425
3428
};
3426
3429
3427
- static bool ext4_iomap_is_delalloc (struct inode * inode ,
3428
- struct ext4_map_blocks * map )
3429
- {
3430
- struct extent_status es ;
3431
- ext4_lblk_t offset = 0 , end = map -> m_lblk + map -> m_len - 1 ;
3432
-
3433
- ext4_es_find_extent_range (inode , & ext4_es_is_delayed ,
3434
- map -> m_lblk , end , & es );
3435
-
3436
- if (!es .es_len || es .es_lblk > end )
3437
- return false;
3438
-
3439
- if (es .es_lblk > map -> m_lblk ) {
3440
- map -> m_len = es .es_lblk - map -> m_lblk ;
3441
- return false;
3442
- }
3443
-
3444
- offset = map -> m_lblk - es .es_lblk ;
3445
- map -> m_len = es .es_len - offset ;
3446
-
3447
- return true;
3448
- }
3449
-
3450
3430
static int ext4_iomap_begin_report (struct inode * inode , loff_t offset ,
3451
3431
loff_t length , unsigned int flags ,
3452
3432
struct iomap * iomap , struct iomap * srcmap )
3453
3433
{
3454
3434
int ret ;
3455
- bool delalloc = false;
3456
3435
struct ext4_map_blocks map ;
3457
3436
u8 blkbits = inode -> i_blkbits ;
3458
3437
@@ -3493,13 +3472,8 @@ static int ext4_iomap_begin_report(struct inode *inode, loff_t offset,
3493
3472
ret = ext4_map_blocks (NULL , inode , & map , 0 );
3494
3473
if (ret < 0 )
3495
3474
return ret ;
3496
- if (ret == 0 )
3497
- delalloc = ext4_iomap_is_delalloc (inode , & map );
3498
-
3499
3475
set_iomap :
3500
3476
ext4_set_iomap (inode , iomap , & map , offset , length , flags );
3501
- if (delalloc && iomap -> type == IOMAP_HOLE )
3502
- iomap -> type = IOMAP_DELALLOC ;
3503
3477
3504
3478
return 0 ;
3505
3479
}
0 commit comments