mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-30 21:52:21 +00:00
selftests/damon: test debugfs file reads/writes with huge count
DAMON debugfs interface users were able to trigger warning by writing
some files with arbitrarily large 'count' parameter. The issue is fixed
with commit db7a347b26
("mm/damon/dbgfs: use '__GFP_NOWARN' for
user-specified size buffer allocation"). This commit adds a test case
for the issue in DAMON selftests to avoid future regressions.
Link: https://lkml.kernel.org/r/20211201150440.1088-11-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d85570c655
commit
b4a002889d
2
tools/testing/selftests/damon/.gitignore
vendored
Normal file
2
tools/testing/selftests/damon/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
huge_count_read_write
|
@ -1,6 +1,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# Makefile for damon selftests
|
# Makefile for damon selftests
|
||||||
|
|
||||||
|
TEST_GEN_FILES += huge_count_read_write
|
||||||
|
|
||||||
TEST_FILES = _chk_dependency.sh
|
TEST_FILES = _chk_dependency.sh
|
||||||
TEST_PROGS = debugfs_attrs.sh
|
TEST_PROGS = debugfs_attrs.sh
|
||||||
|
|
||||||
|
@ -105,4 +105,22 @@ orig_monitor_on=$(cat "$DBGFS/monitor_on")
|
|||||||
test_write_fail "$DBGFS/monitor_on" "on" "orig_monitor_on" "empty target ids"
|
test_write_fail "$DBGFS/monitor_on" "on" "orig_monitor_on" "empty target ids"
|
||||||
echo "$orig_target_ids" > "$DBGFS/target_ids"
|
echo "$orig_target_ids" > "$DBGFS/target_ids"
|
||||||
|
|
||||||
|
# Test huge count read write
|
||||||
|
# ==========================
|
||||||
|
|
||||||
|
dmesg -C
|
||||||
|
|
||||||
|
for file in "$DBGFS/"*
|
||||||
|
do
|
||||||
|
./huge_count_read_write "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
if dmesg | grep -q WARNING
|
||||||
|
then
|
||||||
|
dmesg
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
echo "PASS"
|
echo "PASS"
|
||||||
|
39
tools/testing/selftests/damon/huge_count_read_write.c
Normal file
39
tools/testing/selftests/damon/huge_count_read_write.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
/*
|
||||||
|
* Author: SeongJae Park <sj@kernel.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void write_read_with_huge_count(char *file)
|
||||||
|
{
|
||||||
|
int filedesc = open(file, O_RDWR);
|
||||||
|
char buf[25];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
printf("%s %s\n", __func__, file);
|
||||||
|
if (filedesc < 0) {
|
||||||
|
fprintf(stderr, "failed opening %s\n", file);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
write(filedesc, "", 0xfffffffful);
|
||||||
|
perror("after write: ");
|
||||||
|
ret = read(filedesc, buf, 0xfffffffful);
|
||||||
|
perror("after read: ");
|
||||||
|
close(filedesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
write_read_with_huge_count(argv[1]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user