Skip to content

Commit 4f3b4f1

Browse files
rhvgoyaldjbw
authored andcommitted
dax,iomap: Add helper dax_iomap_zero() to zero a range
Add a helper dax_ioamp_zero() to zero a range. This patch basically merges __dax_zero_page_range() and iomap_dax_zero(). Suggested-by: Christoph Hellwig <[email protected]> Signed-off-by: Vivek Goyal <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dan Williams <[email protected]>
1 parent 0a23f9f commit 4f3b4f1

File tree

3 files changed

+12
-30
lines changed

3 files changed

+12
-30
lines changed

fs/dax.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,10 +1038,10 @@ static vm_fault_t dax_load_hole(struct xa_state *xas,
10381038
return ret;
10391039
}
10401040

1041-
int __dax_zero_page_range(struct block_device *bdev,
1042-
struct dax_device *dax_dev, sector_t sector,
1043-
unsigned int offset, unsigned int size)
1041+
int dax_iomap_zero(loff_t pos, unsigned offset, unsigned size,
1042+
struct iomap *iomap)
10441043
{
1044+
sector_t sector = iomap_sector(iomap, pos & PAGE_MASK);
10451045
pgoff_t pgoff;
10461046
long rc, id;
10471047
void *kaddr;
@@ -1052,29 +1052,29 @@ int __dax_zero_page_range(struct block_device *bdev,
10521052
IS_ALIGNED(size, PAGE_SIZE))
10531053
page_aligned = true;
10541054

1055-
rc = bdev_dax_pgoff(bdev, sector, PAGE_SIZE, &pgoff);
1055+
rc = bdev_dax_pgoff(iomap->bdev, sector, PAGE_SIZE, &pgoff);
10561056
if (rc)
10571057
return rc;
10581058

10591059
id = dax_read_lock();
10601060

10611061
if (page_aligned)
1062-
rc = dax_zero_page_range(dax_dev, pgoff, size >> PAGE_SHIFT);
1062+
rc = dax_zero_page_range(iomap->dax_dev, pgoff,
1063+
size >> PAGE_SHIFT);
10631064
else
1064-
rc = dax_direct_access(dax_dev, pgoff, 1, &kaddr, NULL);
1065+
rc = dax_direct_access(iomap->dax_dev, pgoff, 1, &kaddr, NULL);
10651066
if (rc < 0) {
10661067
dax_read_unlock(id);
10671068
return rc;
10681069
}
10691070

10701071
if (!page_aligned) {
10711072
memset(kaddr + offset, 0, size);
1072-
dax_flush(dax_dev, kaddr + offset, size);
1073+
dax_flush(iomap->dax_dev, kaddr + offset, size);
10731074
}
10741075
dax_read_unlock(id);
10751076
return 0;
10761077
}
1077-
EXPORT_SYMBOL_GPL(__dax_zero_page_range);
10781078

10791079
static loff_t
10801080
dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data,

fs/iomap/buffered-io.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -974,13 +974,6 @@ static int iomap_zero(struct inode *inode, loff_t pos, unsigned offset,
974974
return iomap_write_end(inode, pos, bytes, bytes, page, iomap, srcmap);
975975
}
976976

977-
static int iomap_dax_zero(loff_t pos, unsigned offset, unsigned bytes,
978-
struct iomap *iomap)
979-
{
980-
return __dax_zero_page_range(iomap->bdev, iomap->dax_dev,
981-
iomap_sector(iomap, pos & PAGE_MASK), offset, bytes);
982-
}
983-
984977
static loff_t
985978
iomap_zero_range_actor(struct inode *inode, loff_t pos, loff_t count,
986979
void *data, struct iomap *iomap, struct iomap *srcmap)
@@ -1000,7 +993,7 @@ iomap_zero_range_actor(struct inode *inode, loff_t pos, loff_t count,
1000993
bytes = min_t(loff_t, PAGE_SIZE - offset, count);
1001994

1002995
if (IS_DAX(inode))
1003-
status = iomap_dax_zero(pos, offset, bytes, iomap);
996+
status = dax_iomap_zero(pos, offset, bytes, iomap);
1004997
else
1005998
status = iomap_zero(inode, pos, offset, bytes, iomap,
1006999
srcmap);

include/linux/dax.h

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
typedef unsigned long dax_entry_t;
1414

1515
struct iomap_ops;
16+
struct iomap;
1617
struct dax_device;
1718
struct dax_operations {
1819
/*
@@ -214,20 +215,8 @@ vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf,
214215
int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index);
215216
int dax_invalidate_mapping_entry_sync(struct address_space *mapping,
216217
pgoff_t index);
217-
218-
#ifdef CONFIG_FS_DAX
219-
int __dax_zero_page_range(struct block_device *bdev,
220-
struct dax_device *dax_dev, sector_t sector,
221-
unsigned int offset, unsigned int length);
222-
#else
223-
static inline int __dax_zero_page_range(struct block_device *bdev,
224-
struct dax_device *dax_dev, sector_t sector,
225-
unsigned int offset, unsigned int length)
226-
{
227-
return -ENXIO;
228-
}
229-
#endif
230-
218+
int dax_iomap_zero(loff_t pos, unsigned offset, unsigned size,
219+
struct iomap *iomap);
231220
static inline bool dax_mapping(struct address_space *mapping)
232221
{
233222
return mapping->host && IS_DAX(mapping->host);

0 commit comments

Comments
 (0)