@@ -709,23 +709,22 @@ int dax_invalidate_mapping_entry_sync(struct address_space *mapping,
709
709
return __dax_invalidate_entry (mapping , index , false);
710
710
}
711
711
712
- static sector_t dax_iomap_sector (const struct iomap * iomap , loff_t pos )
712
+ static pgoff_t dax_iomap_pgoff (const struct iomap * iomap , loff_t pos )
713
713
{
714
- return (iomap -> addr + (pos & PAGE_MASK ) - iomap -> offset ) >> 9 ;
714
+ phys_addr_t paddr = iomap -> addr + (pos & PAGE_MASK ) - iomap -> offset ;
715
+
716
+ if (iomap -> bdev )
717
+ paddr += (get_start_sect (iomap -> bdev ) << SECTOR_SHIFT );
718
+ return PHYS_PFN (paddr );
715
719
}
716
720
717
721
static int copy_cow_page_dax (struct vm_fault * vmf , const struct iomap_iter * iter )
718
722
{
719
- sector_t sector = dax_iomap_sector (& iter -> iomap , iter -> pos );
723
+ pgoff_t pgoff = dax_iomap_pgoff (& iter -> iomap , iter -> pos );
720
724
void * vto , * kaddr ;
721
- pgoff_t pgoff ;
722
725
long rc ;
723
726
int id ;
724
727
725
- rc = bdev_dax_pgoff (iter -> iomap .bdev , sector , PAGE_SIZE , & pgoff );
726
- if (rc )
727
- return rc ;
728
-
729
728
id = dax_read_lock ();
730
729
rc = dax_direct_access (iter -> iomap .dax_dev , pgoff , 1 , & kaddr , NULL );
731
730
if (rc < 0 ) {
@@ -1013,14 +1012,10 @@ EXPORT_SYMBOL_GPL(dax_writeback_mapping_range);
1013
1012
static int dax_iomap_pfn (const struct iomap * iomap , loff_t pos , size_t size ,
1014
1013
pfn_t * pfnp )
1015
1014
{
1016
- const sector_t sector = dax_iomap_sector (iomap , pos );
1017
- pgoff_t pgoff ;
1015
+ pgoff_t pgoff = dax_iomap_pgoff (iomap , pos );
1018
1016
int id , rc ;
1019
1017
long length ;
1020
1018
1021
- rc = bdev_dax_pgoff (iomap -> bdev , sector , size , & pgoff );
1022
- if (rc )
1023
- return rc ;
1024
1019
id = dax_read_lock ();
1025
1020
length = dax_direct_access (iomap -> dax_dev , pgoff , PHYS_PFN (size ),
1026
1021
NULL , pfnp );
@@ -1129,7 +1124,7 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf,
1129
1124
s64 dax_iomap_zero (loff_t pos , u64 length , struct iomap * iomap )
1130
1125
{
1131
1126
sector_t sector = iomap_sector (iomap , pos & PAGE_MASK );
1132
- pgoff_t pgoff ;
1127
+ pgoff_t pgoff = dax_iomap_pgoff ( iomap , pos ) ;
1133
1128
long rc , id ;
1134
1129
void * kaddr ;
1135
1130
bool page_aligned = false;
@@ -1140,10 +1135,6 @@ s64 dax_iomap_zero(loff_t pos, u64 length, struct iomap *iomap)
1140
1135
(size == PAGE_SIZE ))
1141
1136
page_aligned = true;
1142
1137
1143
- rc = bdev_dax_pgoff (iomap -> bdev , sector , PAGE_SIZE , & pgoff );
1144
- if (rc )
1145
- return rc ;
1146
-
1147
1138
id = dax_read_lock ();
1148
1139
1149
1140
if (page_aligned )
@@ -1169,7 +1160,6 @@ static loff_t dax_iomap_iter(const struct iomap_iter *iomi,
1169
1160
const struct iomap * iomap = & iomi -> iomap ;
1170
1161
loff_t length = iomap_length (iomi );
1171
1162
loff_t pos = iomi -> pos ;
1172
- struct block_device * bdev = iomap -> bdev ;
1173
1163
struct dax_device * dax_dev = iomap -> dax_dev ;
1174
1164
loff_t end = pos + length , done = 0 ;
1175
1165
ssize_t ret = 0 ;
@@ -1203,20 +1193,15 @@ static loff_t dax_iomap_iter(const struct iomap_iter *iomi,
1203
1193
while (pos < end ) {
1204
1194
unsigned offset = pos & (PAGE_SIZE - 1 );
1205
1195
const size_t size = ALIGN (length + offset , PAGE_SIZE );
1206
- const sector_t sector = dax_iomap_sector (iomap , pos );
1196
+ pgoff_t pgoff = dax_iomap_pgoff (iomap , pos );
1207
1197
ssize_t map_len ;
1208
- pgoff_t pgoff ;
1209
1198
void * kaddr ;
1210
1199
1211
1200
if (fatal_signal_pending (current )) {
1212
1201
ret = - EINTR ;
1213
1202
break ;
1214
1203
}
1215
1204
1216
- ret = bdev_dax_pgoff (bdev , sector , size , & pgoff );
1217
- if (ret )
1218
- break ;
1219
-
1220
1205
map_len = dax_direct_access (dax_dev , pgoff , PHYS_PFN (size ),
1221
1206
& kaddr , NULL );
1222
1207
if (map_len < 0 ) {
0 commit comments