@@ -301,83 +301,50 @@ static int stripe_map(struct dm_target *ti, struct bio *bio)
301
301
}
302
302
303
303
#if IS_ENABLED (CONFIG_FS_DAX )
304
- static long stripe_dax_direct_access (struct dm_target * ti , pgoff_t pgoff ,
305
- long nr_pages , void * * kaddr , pfn_t * pfn )
304
+ static struct dax_device * stripe_dax_pgoff (struct dm_target * ti , pgoff_t * pgoff )
306
305
{
307
- sector_t dev_sector , sector = pgoff * PAGE_SECTORS ;
308
306
struct stripe_c * sc = ti -> private ;
309
- struct dax_device * dax_dev ;
310
307
struct block_device * bdev ;
308
+ sector_t dev_sector ;
311
309
uint32_t stripe ;
312
- long ret ;
313
310
314
- stripe_map_sector (sc , sector , & stripe , & dev_sector );
311
+ stripe_map_sector (sc , * pgoff * PAGE_SECTORS , & stripe , & dev_sector );
315
312
dev_sector += sc -> stripe [stripe ].physical_start ;
316
- dax_dev = sc -> stripe [stripe ].dev -> dax_dev ;
317
313
bdev = sc -> stripe [stripe ].dev -> bdev ;
318
314
319
- ret = bdev_dax_pgoff (bdev , dev_sector , nr_pages * PAGE_SIZE , & pgoff );
320
- if (ret )
321
- return ret ;
315
+ * pgoff = (get_start_sect (bdev ) + dev_sector ) >> PAGE_SECTORS_SHIFT ;
316
+ return sc -> stripe [stripe ].dev -> dax_dev ;
317
+ }
318
+
319
+ static long stripe_dax_direct_access (struct dm_target * ti , pgoff_t pgoff ,
320
+ long nr_pages , void * * kaddr , pfn_t * pfn )
321
+ {
322
+ struct dax_device * dax_dev = stripe_dax_pgoff (ti , & pgoff );
323
+
322
324
return dax_direct_access (dax_dev , pgoff , nr_pages , kaddr , pfn );
323
325
}
324
326
325
327
static size_t stripe_dax_copy_from_iter (struct dm_target * ti , pgoff_t pgoff ,
326
328
void * addr , size_t bytes , struct iov_iter * i )
327
329
{
328
- sector_t dev_sector , sector = pgoff * PAGE_SECTORS ;
329
- struct stripe_c * sc = ti -> private ;
330
- struct dax_device * dax_dev ;
331
- struct block_device * bdev ;
332
- uint32_t stripe ;
333
-
334
- stripe_map_sector (sc , sector , & stripe , & dev_sector );
335
- dev_sector += sc -> stripe [stripe ].physical_start ;
336
- dax_dev = sc -> stripe [stripe ].dev -> dax_dev ;
337
- bdev = sc -> stripe [stripe ].dev -> bdev ;
330
+ struct dax_device * dax_dev = stripe_dax_pgoff (ti , & pgoff );
338
331
339
- if (bdev_dax_pgoff (bdev , dev_sector , ALIGN (bytes , PAGE_SIZE ), & pgoff ))
340
- return 0 ;
341
332
return dax_copy_from_iter (dax_dev , pgoff , addr , bytes , i );
342
333
}
343
334
344
335
static size_t stripe_dax_copy_to_iter (struct dm_target * ti , pgoff_t pgoff ,
345
336
void * addr , size_t bytes , struct iov_iter * i )
346
337
{
347
- sector_t dev_sector , sector = pgoff * PAGE_SECTORS ;
348
- struct stripe_c * sc = ti -> private ;
349
- struct dax_device * dax_dev ;
350
- struct block_device * bdev ;
351
- uint32_t stripe ;
352
-
353
- stripe_map_sector (sc , sector , & stripe , & dev_sector );
354
- dev_sector += sc -> stripe [stripe ].physical_start ;
355
- dax_dev = sc -> stripe [stripe ].dev -> dax_dev ;
356
- bdev = sc -> stripe [stripe ].dev -> bdev ;
338
+ struct dax_device * dax_dev = stripe_dax_pgoff (ti , & pgoff );
357
339
358
- if (bdev_dax_pgoff (bdev , dev_sector , ALIGN (bytes , PAGE_SIZE ), & pgoff ))
359
- return 0 ;
360
340
return dax_copy_to_iter (dax_dev , pgoff , addr , bytes , i );
361
341
}
362
342
363
343
static int stripe_dax_zero_page_range (struct dm_target * ti , pgoff_t pgoff ,
364
344
size_t nr_pages )
365
345
{
366
- int ret ;
367
- sector_t dev_sector , sector = pgoff * PAGE_SECTORS ;
368
- struct stripe_c * sc = ti -> private ;
369
- struct dax_device * dax_dev ;
370
- struct block_device * bdev ;
371
- uint32_t stripe ;
346
+ struct dax_device * dax_dev = stripe_dax_pgoff (ti , & pgoff );
372
347
373
- stripe_map_sector (sc , sector , & stripe , & dev_sector );
374
- dev_sector += sc -> stripe [stripe ].physical_start ;
375
- dax_dev = sc -> stripe [stripe ].dev -> dax_dev ;
376
- bdev = sc -> stripe [stripe ].dev -> bdev ;
377
-
378
- ret = bdev_dax_pgoff (bdev , dev_sector , nr_pages << PAGE_SHIFT , & pgoff );
379
- if (ret )
380
- return ret ;
381
348
return dax_zero_page_range (dax_dev , pgoff , nr_pages );
382
349
}
383
350
0 commit comments