tests: skip when large buf register fails

Registering lots of memory will fail for non-privileged users, so skip
tests if that happens.

Signed-off-by: Pavel Begunkov <[email protected]>
Link: https://lore.kernel.org/r/682c09c1d153cd4dfe505ded6069b294e98078e3.1629913874.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <[email protected]>
diff --git a/test/helpers.c b/test/helpers.c
index 930d82a..975e7cb 100644
--- a/test/helpers.c
+++ b/test/helpers.c
@@ -114,3 +114,22 @@
 	p.flags = flags;
 	return t_create_ring_params(depth, ring, &p);
 }
+
+enum t_setup_ret t_register_buffers(struct io_uring *ring,
+				    const struct iovec *iovecs,
+				    unsigned nr_iovecs)
+{
+	int ret;
+
+	ret = io_uring_register_buffers(ring, iovecs, nr_iovecs);
+	if (!ret)
+		return T_SETUP_OK;
+
+	if ((ret == -EPERM || ret == -ENOMEM) && geteuid()) {
+		fprintf(stdout, "too large non-root buffer registration, skip\n");
+		return T_SETUP_SKIP;
+	}
+
+	fprintf(stderr, "buffer register failed: %s\n", strerror(-ret));
+	return ret;
+}