mm/madvise: use is_memory_failure() from madvise_do_behavior()
authorSeongJae Park <sj@kernel.org>
Wed, 12 Mar 2025 16:47:47 +0000 (09:47 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 18 Mar 2025 05:07:03 +0000 (22:07 -0700)
Patch series "mm/madvise: cleanup requests validations and classifications".

Cleanup madvise entry level code for cleaner request validations and
classifications.

This patch (of 4):

To reduce redundant open-coded checks of CONFIG_MEMORY_FAILURE and
MADV_{HWPOISON,SOFT_OFFLINE} in madvise_[un]lock(), is_memory_failure() is
introduced.  madvise_do_behavior() is still doing the same open-coded
check, though.  Use is_memory_failure() instead.

To avoid build failure on !CONFIG_MEMORY_FAILURE case, implement an empty
madvise_inject_error() under the config.  Also move the definition of
is_memory_failure() inside #ifdef CONFIG_MEMORY_FAILURE clause for
madvise_inject_error() definition, to reduce duplicated ifdef clauses.

Link: https://lkml.kernel.org/r/20250312164750.59215-1-sj@kernel.org
Link: https://lkml.kernel.org/r/20250312164750.59215-2-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
Cc: David Hildenbrand <david@redhat.com>
Cc: Liam R. Howlett <howlett@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/madvise.c

index 388dc289b5d129c490cb13ab9be3ce15e0cfc98f..c3ab1f283b181a441e1d5ea3c9b6eff2e756648c 100644 (file)
@@ -1392,7 +1392,32 @@ static int madvise_inject_error(int behavior,
 
        return 0;
 }
-#endif
+
+static bool is_memory_failure(int behavior)
+{
+       switch (behavior) {
+       case MADV_HWPOISON:
+       case MADV_SOFT_OFFLINE:
+               return true;
+       default:
+               return false;
+       }
+}
+
+#else
+
+static int madvise_inject_error(int behavior,
+               unsigned long start, unsigned long end)
+{
+       return 0;
+}
+
+static bool is_memory_failure(int behavior)
+{
+       return false;
+}
+
+#endif /* CONFIG_MEMORY_FAILURE */
 
 static bool
 madvise_behavior_valid(int behavior)
@@ -1569,24 +1594,6 @@ int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
 }
 #endif /* CONFIG_ANON_VMA_NAME */
 
-#ifdef CONFIG_MEMORY_FAILURE
-static bool is_memory_failure(int behavior)
-{
-       switch (behavior) {
-       case MADV_HWPOISON:
-       case MADV_SOFT_OFFLINE:
-               return true;
-       default:
-               return false;
-       }
-}
-#else
-static bool is_memory_failure(int behavior)
-{
-       return false;
-}
-#endif
-
 static int madvise_lock(struct mm_struct *mm, int behavior)
 {
        if (is_memory_failure(behavior))
@@ -1640,10 +1647,8 @@ static int madvise_do_behavior(struct mm_struct *mm,
        unsigned long end;
        int error;
 
-#ifdef CONFIG_MEMORY_FAILURE
-       if (behavior == MADV_HWPOISON || behavior == MADV_SOFT_OFFLINE)
+       if (is_memory_failure(behavior))
                return madvise_inject_error(behavior, start, start + len_in);
-#endif
        start = untagged_addr_remote(mm, start);
        end = start + len;