@@ -453,6 +453,35 @@ static void ext4_map_blocks_es_recheck(handle_t *handle,
453
453
}
454
454
#endif /* ES_AGGRESSIVE_TEST */
455
455
456
+ static int ext4_map_query_blocks (handle_t * handle , struct inode * inode ,
457
+ struct ext4_map_blocks * map )
458
+ {
459
+ unsigned int status ;
460
+ int retval ;
461
+
462
+ if (ext4_test_inode_flag (inode , EXT4_INODE_EXTENTS ))
463
+ retval = ext4_ext_map_blocks (handle , inode , map , 0 );
464
+ else
465
+ retval = ext4_ind_map_blocks (handle , inode , map , 0 );
466
+
467
+ if (retval <= 0 )
468
+ return retval ;
469
+
470
+ if (unlikely (retval != map -> m_len )) {
471
+ ext4_warning (inode -> i_sb ,
472
+ "ES len assertion failed for inode "
473
+ "%lu: retval %d != map->m_len %d" ,
474
+ inode -> i_ino , retval , map -> m_len );
475
+ WARN_ON (1 );
476
+ }
477
+
478
+ status = map -> m_flags & EXT4_MAP_UNWRITTEN ?
479
+ EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN ;
480
+ ext4_es_insert_extent (inode , map -> m_lblk , map -> m_len ,
481
+ map -> m_pblk , status );
482
+ return retval ;
483
+ }
484
+
456
485
/*
457
486
* The ext4_map_blocks() function tries to look up the requested blocks,
458
487
* and returns if the blocks are already mapped.
@@ -1744,33 +1773,11 @@ static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
1744
1773
down_read (& EXT4_I (inode )-> i_data_sem );
1745
1774
if (ext4_has_inline_data (inode ))
1746
1775
retval = 0 ;
1747
- else if (ext4_test_inode_flag (inode , EXT4_INODE_EXTENTS ))
1748
- retval = ext4_ext_map_blocks (NULL , inode , map , 0 );
1749
1776
else
1750
- retval = ext4_ind_map_blocks (NULL , inode , map , 0 );
1751
- if (retval < 0 ) {
1752
- up_read (& EXT4_I (inode )-> i_data_sem );
1753
- return retval ;
1754
- }
1755
- if (retval > 0 ) {
1756
- unsigned int status ;
1757
-
1758
- if (unlikely (retval != map -> m_len )) {
1759
- ext4_warning (inode -> i_sb ,
1760
- "ES len assertion failed for inode "
1761
- "%lu: retval %d != map->m_len %d" ,
1762
- inode -> i_ino , retval , map -> m_len );
1763
- WARN_ON (1 );
1764
- }
1765
-
1766
- status = map -> m_flags & EXT4_MAP_UNWRITTEN ?
1767
- EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN ;
1768
- ext4_es_insert_extent (inode , map -> m_lblk , map -> m_len ,
1769
- map -> m_pblk , status );
1770
- up_read (& EXT4_I (inode )-> i_data_sem );
1771
- return retval ;
1772
- }
1777
+ retval = ext4_map_query_blocks (NULL , inode , map );
1773
1778
up_read (& EXT4_I (inode )-> i_data_sem );
1779
+ if (retval )
1780
+ return retval ;
1774
1781
1775
1782
add_delayed :
1776
1783
down_write (& EXT4_I (inode )-> i_data_sem );
0 commit comments