Thread (2 messages) 2 messages, 2 authors, 2012-11-22

Re: [POC] recoverable fault injection

From: Akinobu Mita <akinobu.mita@gmail.com>
Date: 2012-11-22 18:26:55
Also in: lkml

2012/11/22 Johannes Berg [off-list ref]:
This idea has been floating around in my head for a long time now ...

I was thinking: what if we could do fault injection during regular
testing, at least on those code paths that are not supposed to have side
effects when they fail? Now obviously this isn't all code paths, and
many probably erroneously *do* have side effects even if they're not
supposed to, but it does apply to a number of code paths.
It sounds interesting. I have never thought of this idea.
So I decided to play with this, and the result it the patch below. It
adds a new knob "recoverable-only" to the slab and page_alloc fault
attributes. If enabled, then a single fault can be injected if the task
executing it is in a "recoverable section", this is implemented by some
new fields in struct task_struct and the (very ugly!) macro
FAULT_INJECT_CALL_RECOVERABLE_FUNCTION.
I suggest introducing a pair of function like:

void fault_recoverable_enable(unsigned long fault_ids);
void fault_recoverable_disable();

fault_recoverable_enable() sets current task's recoverable state to the
value specified with the argument.  fault_recoverable_disable() resets
the recoverable state.

I think this can be more readable than FAULT_INJECT_CALL_RECOVERABLE_FUNCTION
macro.  In case of nl80211_remain_on_channel(), you can just put
them in exit and entrance:

fault_recoverable_enable(FAULT_ATTR_SLAB | FAULT_ATTR_PAGE_ALLOC);
...
fault_recoverable_disable();

return err;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help