* lock.
*/
static inline void __clear_shadow_entry(struct address_space *mapping,
- pgoff_t index, void *entry)
+ struct xa_state *xas, void *entry)
{
- XA_STATE(xas, &mapping->i_pages, index);
-
- xas_set_update(&xas, workingset_update_node);
- if (xas_load(&xas) != entry)
+ if (xas_load(xas) != entry)
return;
- xas_store(&xas, NULL);
+ xas_store(xas, NULL);
mapping->nrexceptional--;
}
static void clear_shadow_entry(struct address_space *mapping, pgoff_t index,
void *entry)
{
- xa_lock_irq(&mapping->i_pages);
- __clear_shadow_entry(mapping, index, entry);
- xa_unlock_irq(&mapping->i_pages);
+ XA_STATE(xas, &mapping->i_pages, index);
+ xas_set_update(&xas, workingset_update_node);
+
+ xas_lock_irq(&xas);
+ __clear_shadow_entry(mapping, &xas, entry);
+ xas_unlock_irq(&xas);
}
/*
struct pagevec *pvec, pgoff_t *indices,
pgoff_t end)
{
+ XA_STATE(xas, &mapping->i_pages, 0);
int i, j;
bool dax, lock;
+ xas_set_update(&xas, workingset_update_node);
+
/* Handled by shmem itself */
if (shmem_mapping(mapping))
return;
continue;
}
- __clear_shadow_entry(mapping, index, page);
+ xas_set(&xas, index);
+ __clear_shadow_entry(mapping, &xas, page);
}
if (lock)