diff options
Diffstat (limited to 'lib/fault-inject.c')
-rw-r--r-- | lib/fault-inject.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/fault-inject.c b/lib/fault-inject.c index 09ac73c177fd..7d315fdb9f13 100644 --- a/lib/fault-inject.c +++ b/lib/fault-inject.c | |||
@@ -107,9 +107,12 @@ static inline bool fail_stacktrace(struct fault_attr *attr) | |||
107 | 107 | ||
108 | bool should_fail(struct fault_attr *attr, ssize_t size) | 108 | bool should_fail(struct fault_attr *attr, ssize_t size) |
109 | { | 109 | { |
110 | if (in_task() && current->fail_nth) { | 110 | if (in_task()) { |
111 | if (--current->fail_nth == 0) | 111 | unsigned int fail_nth = READ_ONCE(current->fail_nth); |
112 | |||
113 | if (fail_nth && !WRITE_ONCE(current->fail_nth, fail_nth - 1)) | ||
112 | goto fail; | 114 | goto fail; |
115 | |||
113 | return false; | 116 | return false; |
114 | } | 117 | } |
115 | 118 | ||