| From: SeongJae Park <sj@kernel.org> |
| Subject: 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 db7a347b26fe ("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> |
| --- |
| |
| tools/testing/selftests/damon/.gitignore | 2 |
| tools/testing/selftests/damon/Makefile | 2 |
| tools/testing/selftests/damon/debugfs_attrs.sh | 18 ++++ |
| tools/testing/selftests/damon/huge_count_read_write.c | 39 ++++++++++ |
| 4 files changed, 61 insertions(+) |
| |
| --- a/tools/testing/selftests/damon/debugfs_attrs.sh~selftests-damon-test-debugfs-file-reads-writes-with-huge-count |
| +++ a/tools/testing/selftests/damon/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" |
| 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" |
| --- /dev/null |
| +++ a/tools/testing/selftests/damon/.gitignore |
| @@ -0,0 +1,2 @@ |
| +# SPDX-License-Identifier: GPL-2.0-only |
| +huge_count_read_write |
| --- /dev/null |
| +++ a/tools/testing/selftests/damon/huge_count_read_write.c |
| @@ -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; |
| +} |
| --- a/tools/testing/selftests/damon/Makefile~selftests-damon-test-debugfs-file-reads-writes-with-huge-count |
| +++ a/tools/testing/selftests/damon/Makefile |
| @@ -1,6 +1,8 @@ |
| # SPDX-License-Identifier: GPL-2.0 |
| # Makefile for damon selftests |
| |
| +TEST_GEN_FILES += huge_count_read_write |
| + |
| TEST_FILES = _chk_dependency.sh |
| TEST_PROGS = debugfs_attrs.sh |
| |
| _ |