diff options
Diffstat (limited to 'lib/fault-inject.c')
-rw-r--r-- | lib/fault-inject.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/fault-inject.c b/lib/fault-inject.c index d7d501ea856d..f1cdeb024d17 100644 --- a/lib/fault-inject.c +++ b/lib/fault-inject.c | |||
@@ -40,10 +40,16 @@ EXPORT_SYMBOL_GPL(setup_fault_attr); | |||
40 | 40 | ||
41 | static void fail_dump(struct fault_attr *attr) | 41 | static void fail_dump(struct fault_attr *attr) |
42 | { | 42 | { |
43 | if (attr->verbose > 0) | 43 | if (attr->verbose > 0 && __ratelimit(&attr->ratelimit_state)) { |
44 | printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure\n"); | 44 | printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure.\n" |
45 | if (attr->verbose > 1) | 45 | "name %pd, interval %lu, probability %lu, " |
46 | dump_stack(); | 46 | "space %d, times %d\n", attr->dname, |
47 | attr->probability, attr->interval, | ||
48 | atomic_read(&attr->space), | ||
49 | atomic_read(&attr->times)); | ||
50 | if (attr->verbose > 1) | ||
51 | dump_stack(); | ||
52 | } | ||
47 | } | 53 | } |
48 | 54 | ||
49 | #define atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0) | 55 | #define atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0) |
@@ -202,6 +208,12 @@ struct dentry *fault_create_debugfs_attr(const char *name, | |||
202 | goto fail; | 208 | goto fail; |
203 | if (!debugfs_create_ul("verbose", mode, dir, &attr->verbose)) | 209 | if (!debugfs_create_ul("verbose", mode, dir, &attr->verbose)) |
204 | goto fail; | 210 | goto fail; |
211 | if (!debugfs_create_u32("verbose_ratelimit_interval_ms", mode, dir, | ||
212 | &attr->ratelimit_state.interval)) | ||
213 | goto fail; | ||
214 | if (!debugfs_create_u32("verbose_ratelimit_burst", mode, dir, | ||
215 | &attr->ratelimit_state.burst)) | ||
216 | goto fail; | ||
205 | if (!debugfs_create_bool("task-filter", mode, dir, &attr->task_filter)) | 217 | if (!debugfs_create_bool("task-filter", mode, dir, &attr->task_filter)) |
206 | goto fail; | 218 | goto fail; |
207 | 219 | ||
@@ -222,6 +234,7 @@ struct dentry *fault_create_debugfs_attr(const char *name, | |||
222 | 234 | ||
223 | #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ | 235 | #endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ |
224 | 236 | ||
237 | attr->dname = dget(dir); | ||
225 | return dir; | 238 | return dir; |
226 | fail: | 239 | fail: |
227 | debugfs_remove_recursive(dir); | 240 | debugfs_remove_recursive(dir); |