|
@@ -87,38 +87,6 @@ struct page *read_dax_sector(struct block_device *bdev, sector_t n)
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * dax_clear_sectors() is called from within transaction context from XFS,
|
|
|
- * and hence this means the stack from this point must follow GFP_NOFS
|
|
|
- * semantics for all operations.
|
|
|
- */
|
|
|
-int dax_clear_sectors(struct block_device *bdev, sector_t _sector, long _size)
|
|
|
-{
|
|
|
- struct blk_dax_ctl dax = {
|
|
|
- .sector = _sector,
|
|
|
- .size = _size,
|
|
|
- };
|
|
|
-
|
|
|
- might_sleep();
|
|
|
- do {
|
|
|
- long count, sz;
|
|
|
-
|
|
|
- count = dax_map_atomic(bdev, &dax);
|
|
|
- if (count < 0)
|
|
|
- return count;
|
|
|
- sz = min_t(long, count, SZ_128K);
|
|
|
- clear_pmem(dax.addr, sz);
|
|
|
- dax.size -= sz;
|
|
|
- dax.sector += sz / 512;
|
|
|
- dax_unmap_atomic(bdev, &dax);
|
|
|
- cond_resched();
|
|
|
- } while (dax.size);
|
|
|
-
|
|
|
- wmb_pmem();
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(dax_clear_sectors);
|
|
|
-
|
|
|
static bool buffer_written(struct buffer_head *bh)
|
|
|
{
|
|
|
return buffer_mapped(bh) && !buffer_unwritten(bh);
|