@@ -407,6 +407,8 @@ int migrate_page_move_mapping(struct add
int dirty;
int expected_count = expected_page_refs(mapping, page) + extra_count;
+ VM_WARN_ONCE(!PageLocked(page));
+
if (!mapping) {
/* Anonymous page without mapping */
if (page_count(page) != expected_count)
@@ -425,7 +427,13 @@ int migrate_page_move_mapping(struct add
newzone = page_zone(newpage);
xas_lock_irq(&xas);
+ /*
+ * 'mapping' was established under the page lock, which
+ * prevents the xarray slot for 'page' from being changed.
+ * Thus, xas_load() failure here is unexpected.
+ */
if (xas_load(&xas) != page) {
+ WARN_ON_ONCE(1);
xas_unlock_irq(&xas);
return -EAGAIN;
}