@@ -896,11 +896,12 @@ static s64 iomap_zero(struct inode *inode, loff_t pos, u64 length,
896
896
return iomap_write_end (inode , pos , bytes , bytes , page , iomap , srcmap );
897
897
}
898
898
899
- static loff_t iomap_zero_range_actor (struct inode * inode , loff_t pos ,
900
- loff_t length , void * data , struct iomap * iomap ,
901
- struct iomap * srcmap )
899
+ static loff_t iomap_zero_iter (struct iomap_iter * iter , bool * did_zero )
902
900
{
903
- bool * did_zero = data ;
901
+ struct iomap * iomap = & iter -> iomap ;
902
+ struct iomap * srcmap = iomap_iter_srcmap (iter );
903
+ loff_t pos = iter -> pos ;
904
+ loff_t length = iomap_length (iter );
904
905
loff_t written = 0 ;
905
906
906
907
/* already zeroed? we're done. */
@@ -910,10 +911,11 @@ static loff_t iomap_zero_range_actor(struct inode *inode, loff_t pos,
910
911
do {
911
912
s64 bytes ;
912
913
913
- if (IS_DAX (inode ))
914
+ if (IS_DAX (iter -> inode ))
914
915
bytes = dax_iomap_zero (pos , length , iomap );
915
916
else
916
- bytes = iomap_zero (inode , pos , length , iomap , srcmap );
917
+ bytes = iomap_zero (iter -> inode , pos , length , iomap ,
918
+ srcmap );
917
919
if (bytes < 0 )
918
920
return bytes ;
919
921
@@ -931,19 +933,17 @@ int
931
933
iomap_zero_range (struct inode * inode , loff_t pos , loff_t len , bool * did_zero ,
932
934
const struct iomap_ops * ops )
933
935
{
934
- loff_t ret ;
935
-
936
- while (len > 0 ) {
937
- ret = iomap_apply (inode , pos , len , IOMAP_ZERO ,
938
- ops , did_zero , iomap_zero_range_actor );
939
- if (ret <= 0 )
940
- return ret ;
941
-
942
- pos += ret ;
943
- len -= ret ;
944
- }
936
+ struct iomap_iter iter = {
937
+ .inode = inode ,
938
+ .pos = pos ,
939
+ .len = len ,
940
+ .flags = IOMAP_ZERO ,
941
+ };
942
+ int ret ;
945
943
946
- return 0 ;
944
+ while ((ret = iomap_iter (& iter , ops )) > 0 )
945
+ iter .processed = iomap_zero_iter (& iter , did_zero );
946
+ return ret ;
947
947
}
948
948
EXPORT_SYMBOL_GPL (iomap_zero_range );
949
949
0 commit comments