global: fault handlers cope with simultaneous faults now.
This fix deals with the problem that arose due to installing
the fault handlers with the `SA_RESETHAND` flag which instructs
the kernel to restore the default handler for a signal upon
entry to its handler. Unfortunately, in a situation when more
than one fault happens the same time (which may happen if e.g.
two `tp_osd_tp` threads run into the same, buggy path),
the default handler can interrupt-and-exit-the-process when
our original one is still executing.
The problem can be demonstrated with
```
rados bench -p test-pool 1 write -b 4096 --no-cleanup
```
and following instrumentation in `ceph-osd`:
```diff
diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc
index
626e8ccefbd..
cde46776d53 100644
--- a/src/osd/PrimaryLogPG.cc
+++ b/src/osd/PrimaryLogPG.cc
@@ -6617,6 +6617,7 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
++ctx->num_write;
result = 0;
{ // write
+ *((int*)((int)ceph_gettid() % 0x42)) = 0xdeadbeef;
__u32 seq = oi.truncate_seq;
tracepoint(osd, do_osd_op_pre_write, soid.oid.name.c_str(), soid.snap.val, oi.size, seq, op.extent.offset, op.extent.length, op.extent.truncate_size, op.extent.truncate_seq);
if (op.extent.length != osd_op.indata.length()) {
```
Fixes: https://tracker.ceph.com/issues/50647
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>