Merge tag 'mlx5-fixes-2023-05-24' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / mm / vmscan.c
index 5bde074..6d0cd28 100644 (file)
@@ -805,6 +805,7 @@ EXPORT_SYMBOL(register_shrinker);
 void unregister_shrinker(struct shrinker *shrinker)
 {
        struct dentry *debugfs_entry;
+       int debugfs_id;
 
        if (!(shrinker->flags & SHRINKER_REGISTERED))
                return;
@@ -814,13 +815,13 @@ void unregister_shrinker(struct shrinker *shrinker)
        shrinker->flags &= ~SHRINKER_REGISTERED;
        if (shrinker->flags & SHRINKER_MEMCG_AWARE)
                unregister_memcg_shrinker(shrinker);
-       debugfs_entry = shrinker_debugfs_remove(shrinker);
+       debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id);
        mutex_unlock(&shrinker_mutex);
 
        atomic_inc(&shrinker_srcu_generation);
        synchronize_srcu(&shrinker_srcu);
 
-       debugfs_remove_recursive(debugfs_entry);
+       shrinker_debugfs_remove(debugfs_entry, debugfs_id);
 
        kfree(shrinker->nr_deferred);
        shrinker->nr_deferred = NULL;
@@ -1967,6 +1968,16 @@ retry:
                        }
                }
 
+               /*
+                * Folio is unmapped now so it cannot be newly pinned anymore.
+                * No point in trying to reclaim folio if it is pinned.
+                * Furthermore we don't want to reclaim underlying fs metadata
+                * if the folio is pinned and thus potentially modified by the
+                * pinning process as that may upset the filesystem.
+                */
+               if (folio_maybe_dma_pinned(folio))
+                       goto activate_locked;
+
                mapping = folio_mapping(folio);
                if (folio_test_dirty(folio)) {
                        /*