summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/dax.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/dax.c b/fs/dax.c
index cf96f3dd4e5f..464c2badc135 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -445,6 +445,9 @@ static void dax_associate_entry(void *entry, struct address_space *mapping,
unsigned long size = dax_entry_size(entry), index;
struct folio *folio = dax_to_folio(entry);
+ if (dax_is_zero_entry(entry) || dax_is_empty_entry(entry))
+ return;
+
if (IS_ENABLED(CONFIG_FS_DAX_LIMITED))
return;
@@ -473,6 +476,9 @@ static void dax_disassociate_entry(void *entry, struct address_space *mapping,
if (IS_ENABLED(CONFIG_FS_DAX_LIMITED))
return;
+ if (dax_is_zero_entry(entry) || dax_is_empty_entry(entry))
+ return;
+
dax_folio_put(folio);
}
@@ -1074,8 +1080,7 @@ static void *dax_insert_entry(struct xa_state *xas, struct vm_fault *vmf,
void *old;
dax_disassociate_entry(entry, mapping, false);
- if (!(flags & DAX_ZERO_PAGE))
- dax_associate_entry(new_entry, mapping, vmf->vma,
+ dax_associate_entry(new_entry, mapping, vmf->vma,
vmf->address, shared);
/*