Skip to content

Commit

Permalink
selftests/damon: test debugfs file reads/writes with huge count
Browse files Browse the repository at this point in the history
DAMON debugfs interface users were able to trigger warning by writing
some files with arbitrarily large 'count' parameter.  The issue is fixed
with commit db7a347 ("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/[email protected]
Signed-off-by: SeongJae Park <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: Shuah Khan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
sjp38 authored and torvalds committed Dec 11, 2021
1 parent d85570c commit b4a0028
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions tools/testing/selftests/damon/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SPDX-License-Identifier: GPL-2.0-only
huge_count_read_write
2 changes: 2 additions & 0 deletions tools/testing/selftests/damon/Makefile
Original file line number Diff line number Diff line change
@@ -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

Expand Down
18 changes: 18 additions & 0 deletions tools/testing/selftests/damon/debugfs_attrs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
39 changes: 39 additions & 0 deletions tools/testing/selftests/damon/huge_count_read_write.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Author: SeongJae Park <[email protected]>
*/

#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;
}

0 comments on commit b4a0028

Please sign in to comment.