Blob Blame History Raw
From 4c3d043d271d4d629aa2328796cdfc96b37d3b3c Mon Sep 17 00:00:00 2001
From: Vivek Goyal <vgoyal@redhat.com>
Date: Wed, 28 Apr 2021 15:03:13 -0400
Subject: [PATCH] dax: Add a wakeup mode parameter to put_unlocked_entry()
Git-commit: 4c3d043d271d4d629aa2328796cdfc96b37d3b3c
Patch-mainline: v5.13-rc2
References: bsc#1187411

As of now put_unlocked_entry() always wakes up next waiter. In next
patches we want to wake up all waiters at one callsite. Hence, add a
parameter to the function.

This patch does not introduce any change of behavior.

Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Suggested-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Link: https://lore.kernel.org/r/20210428190314.1865312-3-vgoyal@redhat.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Acked-by: Jan Kara <jack@suse.cz>

---
 fs/dax.c |   16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

--- a/fs/dax.c
+++ b/fs/dax.c
@@ -328,13 +328,14 @@ static void put_locked_mapping_entry(str
  * get_unlocked_mapping_entry() and which we didn't lock in the end.
  */
 static void put_unlocked_mapping_entry(struct address_space *mapping,
-				       pgoff_t index, void *entry)
+				       pgoff_t index, void *entry,
+				       enum dax_wake_mode mode)
 {
 	if (!entry)
 		return;
 
 	/* We have to wake up next waiter for the radix tree entry lock */
-	dax_wake_mapping_entry_waiter(mapping, index, entry, WAKE_NEXT);
+	dax_wake_mapping_entry_waiter(mapping, index, entry, mode);
 }
 
 static unsigned long dax_entry_size(void *entry)
@@ -541,7 +542,7 @@ restart:
 		if (size_flag & RADIX_DAX_PMD) {
 			if (dax_is_pte_entry(entry)) {
 				put_unlocked_mapping_entry(mapping, index,
-						entry);
+						entry, WAKE_NEXT);
 				entry = ERR_PTR(-EEXIST);
 				goto out_unlock;
 			}
@@ -715,7 +716,8 @@ struct page *dax_layout_busy_page(struct
 				if (i + 1 >= pagevec_count(&pvec))
 					nr_pages = 1UL << dax_radix_order(entry);
 			}
-			put_unlocked_mapping_entry(mapping, index, entry);
+			put_unlocked_mapping_entry(mapping, index, entry,
+						   WAKE_NEXT);
 			spin_unlock_irq(&mapping->tree_lock);
 			if (page)
 				break;
@@ -758,7 +760,7 @@ static int __dax_invalidate_mapping_entr
 	mapping->nrexceptional--;
 	ret = 1;
 out:
-	put_unlocked_mapping_entry(mapping, index, entry);
+	put_unlocked_mapping_entry(mapping, index, entry, WAKE_NEXT);
 	spin_unlock_irq(&mapping->tree_lock);
 	return ret;
 }
@@ -1029,7 +1031,7 @@ static int dax_writeback_one(struct dax_
 	return ret;
 
  put_unlocked:
-	put_unlocked_mapping_entry(mapping, index, entry2);
+	put_unlocked_mapping_entry(mapping, index, entry2, WAKE_NEXT);
 	spin_unlock_irq(&mapping->tree_lock);
 	return ret;
 }
@@ -1815,7 +1817,7 @@ static int dax_insert_pfn_mkwrite(struct
 	if (!entry ||
 	    (pe_size == PE_SIZE_PTE && !dax_is_pte_entry(entry)) ||
 	    (pe_size == PE_SIZE_PMD && !dax_is_pmd_entry(entry))) {
-		put_unlocked_mapping_entry(mapping, index, entry);
+		put_unlocked_mapping_entry(mapping, index, entry, WAKE_NEXT);
 		spin_unlock_irq(&mapping->tree_lock);
 		trace_dax_insert_pfn_mkwrite_no_entry(mapping->host, vmf,
 						      VM_FAULT_NOPAGE);