+static bool folio_longterm_write_pin_allowed(struct folio *folio)
+{
+ struct address_space *mapping;
+
+ /*
+ * GUP-fast disables IRQs - this prevents IPIs from causing page tables
+ * to disappear from under us, as well as preventing RCU grace periods
+ * from making progress (i.e. implying rcu_read_lock()).
+ *
+ * This means we can rely on the folio remaining stable for all
+ * architectures, both those that set CONFIG_MMU_GATHER_RCU_TABLE_FREE
+ * and those that do not.
+ *
+ * We get the added benefit that given inodes, and thus address_space,
+ * objects are RCU freed, we can rely on the mapping remaining stable
+ * here with no risk of a truncation or similar race.
+ */
+ lockdep_assert_irqs_disabled();
+
+ /*
+ * If no mapping can be found, this implies an anonymous or otherwise
+ * non-file backed folio so in this instance we permit the pin.
+ *
+ * shmem and hugetlb mappings do not require dirty-tracking so we
+ * explicitly whitelist these.
+ *
+ * Other non dirty-tracked folios will be picked up on the slow path.
+ */
+ mapping = folio_mapping(folio);
+ return !mapping || shmem_mapping(mapping) || folio_test_hugetlb(folio);
+}