|
@@ -382,6 +382,31 @@ static void *get_unlocked_mapping_entry(struct address_space *mapping,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void put_locked_mapping_entry(struct address_space *mapping,
|
|
|
+ pgoff_t index, void *entry)
|
|
|
+{
|
|
|
+ if (!radix_tree_exceptional_entry(entry)) {
|
|
|
+ unlock_page(entry);
|
|
|
+ put_page(entry);
|
|
|
+ } else {
|
|
|
+ dax_unlock_mapping_entry(mapping, index);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Called when we are done with radix tree entry we looked up via
|
|
|
+ * 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)
|
|
|
+{
|
|
|
+ if (!radix_tree_exceptional_entry(entry))
|
|
|
+ return;
|
|
|
+
|
|
|
+ /* We have to wake up next waiter for the radix tree entry lock */
|
|
|
+ dax_wake_mapping_entry_waiter(mapping, index, entry, false);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Find radix tree entry at given index. If it points to a page, return with
|
|
|
* the page locked. If it points to the exceptional entry, return with the
|
|
@@ -486,31 +511,6 @@ void dax_unlock_mapping_entry(struct address_space *mapping, pgoff_t index)
|
|
|
dax_wake_mapping_entry_waiter(mapping, index, entry, false);
|
|
|
}
|
|
|
|
|
|
-static void put_locked_mapping_entry(struct address_space *mapping,
|
|
|
- pgoff_t index, void *entry)
|
|
|
-{
|
|
|
- if (!radix_tree_exceptional_entry(entry)) {
|
|
|
- unlock_page(entry);
|
|
|
- put_page(entry);
|
|
|
- } else {
|
|
|
- dax_unlock_mapping_entry(mapping, index);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * Called when we are done with radix tree entry we looked up via
|
|
|
- * 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)
|
|
|
-{
|
|
|
- if (!radix_tree_exceptional_entry(entry))
|
|
|
- return;
|
|
|
-
|
|
|
- /* We have to wake up next waiter for the radix tree entry lock */
|
|
|
- dax_wake_mapping_entry_waiter(mapping, index, entry, false);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Delete exceptional DAX entry at @index from @mapping. Wait for radix tree
|
|
|
* entry to get unlocked before deleting it.
|