#define MAX_DELAY_US 50000
 #define MIN_DELAY_RANGE_US 5000
 
-static int map_update_retriable(int map_fd, const void *key, const void *value,
-                               int flags, int attempts)
+static bool retry_for_again_or_busy(int err)
+{
+       return (err == EAGAIN || err == EBUSY);
+}
+
+int map_update_retriable(int map_fd, const void *key, const void *value, int flags, int attempts,
+                        retry_for_error_fn need_retry)
 {
        int delay = rand() % MIN_DELAY_RANGE_US;
 
        while (bpf_map_update_elem(map_fd, key, value, flags)) {
-               if (!attempts || (errno != EAGAIN && errno != EBUSY))
+               if (!attempts || !need_retry(errno))
                        return -errno;
 
                if (delay <= MAX_DELAY_US / 2)
                key = value = i;
 
                if (do_update) {
-                       err = map_update_retriable(fd, &key, &value, BPF_NOEXIST, MAP_RETRIES);
+                       err = map_update_retriable(fd, &key, &value, BPF_NOEXIST, MAP_RETRIES,
+                                                  retry_for_again_or_busy);
                        if (err)
                                printf("error %d %d\n", err, errno);
                        assert(err == 0);
-                       err = map_update_retriable(fd, &key, &value, BPF_EXIST, MAP_RETRIES);
+                       err = map_update_retriable(fd, &key, &value, BPF_EXIST, MAP_RETRIES,
+                                                  retry_for_again_or_busy);
                        if (err)
                                printf("error %d %d\n", err, errno);
                        assert(err == 0);
 
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdbool.h>
 
 #define CHECK(condition, tag, format...) ({                            \
        int __ret = !!(condition);                                      \
 
 extern int skips;
 
+typedef bool (*retry_for_error_fn)(int err);
+int map_update_retriable(int map_fd, const void *key, const void *value, int flags, int attempts,
+                        retry_for_error_fn need_retry);
+
 #endif