On Wed, Apr 07, 2021 at 09:38:21PM +0800, Shiyang Ruan wrote:
The dax page fault code is too long and a bit difficult to read. And
it
is hard to understand when we trying to add new features. Some of the
PTE/PMD codes have similar logic. So, factor them as helper functions to
simplify the code.
Signed-off-by: Shiyang Ruan <ruansy.fnst(a)fujitsu.com>
Reviewed-by: Christoph Hellwig <hch(a)lst.de>
Reviewed-by: Ritesh Harjani <riteshh(a)linux.ibm.com>
---
fs/dax.c | 153 ++++++++++++++++++++++++++++++-------------------------
1 file changed, 84 insertions(+), 69 deletions(-)
diff --git a/fs/dax.c b/fs/dax.c
index b3d27fdc6775..f843fb8fbbf1 100644
--- a/fs/dax.c
+++ b/fs/dax.c
[snip]
@@ -1355,19 +1379,8 @@ static vm_fault_t dax_iomap_pte_fault(struct
vm_fault *vmf, pfn_t *pfnp,
entry = dax_insert_entry(&xas, mapping, vmf, entry, pfn,
0, write && !sync);
- /*
- * If we are doing synchronous page fault and inode needs fsync,
- * we can insert PTE into page tables only after that happens.
- * Skip insertion for now and return the pfn so that caller can
- * insert it after fsync is done.
- */
if (sync) {
- if (WARN_ON_ONCE(!pfnp)) {
- error = -EIO;
- goto error_finish_iomap;
- }
- *pfnp = pfn;
- ret = VM_FAULT_NEEDDSYNC | major;
+ ret = dax_fault_synchronous_pfnp(pfnp, pfn);
Is there a reason VM_FAULT_MAJOR should be left out here?
Ira