mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 06:53:30 -04:00
mm/madvise: use is_memory_failure() from madvise_do_behavior()
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>
This commit is contained in:
committed by
Andrew Morton
parent
15766485e4
commit
9ecd2f839b
49
mm/madvise.c
49
mm/madvise.c
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user