aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fault-inject.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/fault-inject.c')
-rw-r--r--lib/fault-inject.c7
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
108bool should_fail(struct fault_attr *attr, ssize_t size) 108bool 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