idr test suite: Improve reporting from idr_find_test_1
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 1 Apr 2021 11:50:42 +0000 (07:50 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 1 Apr 2021 11:50:42 +0000 (07:50 -0400)
Instead of just reporting an assertion failure, report enough information
that we can start diagnosing exactly went wrong.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
tools/testing/radix-tree/idr-test.c

index 6ce7460f3c7a9caf60da686f22693bd2ebba0346..ca24f6839d50c49f585414620ec93af6d19422dd 100644 (file)
@@ -296,6 +296,10 @@ static void *idr_throbber(void *arg)
        return NULL;
 }
 
+/*
+ * There are always either 1 or 2 objects in the IDR.  If we find nothing,
+ * or we find something at an ID we didn't expect, that's a bug.
+ */
 void idr_find_test_1(int anchor_id, int throbber_id)
 {
        pthread_t throbber;
@@ -311,7 +315,12 @@ void idr_find_test_1(int anchor_id, int throbber_id)
                int id = 0;
                void *entry = idr_get_next(&find_idr, &id);
                rcu_read_unlock();
-               BUG_ON(entry != xa_mk_value(id));
+               if ((id != anchor_id && id != throbber_id) ||
+                   entry != xa_mk_value(id)) {
+                       printf("%s(%d, %d): %p at %d\n", __func__, anchor_id,
+                               throbber_id, entry, id);
+                       abort();
+               }
                rcu_read_lock();
        } while (time(NULL) < start + 11);
        rcu_read_unlock();