Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'mm-nonmm-stable-2022-12-17-20-32' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Pull fault-injection updates from Andrew Morton:
"Some fault-injection improvements from Wei Yongjun which enable
stacktrace filtering on x86_64"

* tag 'mm-nonmm-stable-2022-12-17-20-32' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
fault-injection: make stacktrace filter works as expected
fault-injection: make some stack filter attrs more readable
fault-injection: skip stacktrace filtering by default
fault-injection: allow stacktrace filter for x86-64

+14 -9
-1
lib/Kconfig.debug
··· 1983 1983 config FAULT_INJECTION_STACKTRACE_FILTER 1984 1984 bool "stacktrace filter for fault-injection capabilities" 1985 1985 depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT 1986 - depends on !X86_64 1987 1986 select STACKTRACE 1988 1987 depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86 1989 1988 help
+14 -8
lib/fault-inject.c
··· 71 71 int n, nr_entries; 72 72 bool found = (attr->require_start == 0 && attr->require_end == ULONG_MAX); 73 73 74 - if (depth == 0) 74 + if (depth == 0 || (found && !attr->reject_start && !attr->reject_end)) 75 75 return found; 76 76 77 77 nr_entries = stack_trace_save(entries, depth, 1); ··· 102 102 103 103 bool should_fail_ex(struct fault_attr *attr, ssize_t size, int flags) 104 104 { 105 + bool stack_checked = false; 106 + 105 107 if (in_task()) { 106 108 unsigned int fail_nth = READ_ONCE(current->fail_nth); 107 109 108 110 if (fail_nth) { 111 + if (!fail_stacktrace(attr)) 112 + return false; 113 + 114 + stack_checked = true; 109 115 fail_nth--; 110 116 WRITE_ONCE(current->fail_nth, fail_nth); 111 117 if (!fail_nth) ··· 131 125 if (atomic_read(&attr->times) == 0) 132 126 return false; 133 127 128 + if (!stack_checked && !fail_stacktrace(attr)) 129 + return false; 130 + 134 131 if (atomic_read(&attr->space) > size) { 135 132 atomic_sub(size, &attr->space); 136 133 return false; ··· 146 137 } 147 138 148 139 if (attr->probability <= get_random_u32_below(100)) 149 - return false; 150 - 151 - if (!fail_stacktrace(attr)) 152 140 return false; 153 141 154 142 fail: ··· 232 226 #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 233 227 debugfs_create_stacktrace_depth("stacktrace-depth", mode, dir, 234 228 &attr->stacktrace_depth); 235 - debugfs_create_ul("require-start", mode, dir, &attr->require_start); 236 - debugfs_create_ul("require-end", mode, dir, &attr->require_end); 237 - debugfs_create_ul("reject-start", mode, dir, &attr->reject_start); 238 - debugfs_create_ul("reject-end", mode, dir, &attr->reject_end); 229 + debugfs_create_xul("require-start", mode, dir, &attr->require_start); 230 + debugfs_create_xul("require-end", mode, dir, &attr->require_end); 231 + debugfs_create_xul("reject-start", mode, dir, &attr->reject_start); 232 + debugfs_create_xul("reject-end", mode, dir, &attr->reject_end); 239 233 #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 240 234 241 235 attr->dname = dget(dir);