diff --git a/libbpf b/libbpf
index f85efa2b43d09b3ce5ee446e55ea7e74ef8bb366..39635dd04328cf581ed629f0ad0d19a313386bcc 160000
--- a/libbpf
+++ b/libbpf
@@ -1 +1 @@
-Subproject commit f85efa2b43d09b3ce5ee446e55ea7e74ef8bb366
+Subproject commit 39635dd04328cf581ed629f0ad0d19a313386bcc
diff --git a/src/task_bulk.bpf.c b/src/task_bulk.bpf.c
index 187e3550a284b536a54c2e37ce236ded67a4465e..884c9945a76f45e8e7a1f510a410b0a02fd25757 100644
--- a/src/task_bulk.bpf.c
+++ b/src/task_bulk.bpf.c
@@ -19,8 +19,8 @@ int openv(long **ctx)
 
 	for (int i = 0; i < SIZE && i < nr_syscalls; i++) {
 		int fd = bpf_task_sys_open_3((uint64_t) dir, O_TMPFILE | O_RDWR, 0777);
-		if (fd == -1) {
-			err = -1;
+		if (fd < 0) {
+			err = 1;
 			break;
 		}
 		fds[i] = fd;
diff --git a/src/task_bulk.c b/src/task_bulk.c
index c63d2ac24427e9bc4a8ec3b7163baa01743b24cf..dd4d69b91c97df9af6836d8e22c74a4fd5583c11 100644
--- a/src/task_bulk.c
+++ b/src/task_bulk.c
@@ -74,21 +74,22 @@ int main(int argc, char **argv)
 	}
 
 	int nr_syscalls = atoi(argv[4]);
-	if (nr_syscalls < 0) {
+	if (nr_syscalls < 0 || nr_syscalls > SIZE) {
+		fprintf(stderr, "nr_syscalls must be between 0 and %d, but is %d\n", SIZE, nr_syscalls);
 		print_usage(argv);
 		return 1;
 	}
 
 	int err = 0;
-	for (int k = 0; k < nr_init; k++) {
+	for (int k = 0; k < nr_init && !err; k++) {
 		if (user) {
 			int *fds = malloc(sizeof(int) * SIZE);
 			if (fds == NULL) {
 				return 1;
 			}
 
-			for (int j = 0; j < iter; j++) {
-				for (int i = 0; i < SIZE && i < nr_syscalls; i++) {
+			for (int j = 0; j < iter && !err; j++) {
+				for (int i = 0; i < nr_syscalls; i++) {
 					int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
 					if (fd == -1) {
 						perror("open");
@@ -132,14 +133,16 @@ int main(int argc, char **argv)
 			int open_prog_fd = bpf_program__fd(skel->progs.openv);
 			int close_prog_fd = bpf_program__fd(skel->progs.closev);
 
-			for (int j = 0; j < iter; j++) {
+			for (int j = 0; j < iter && !err; j++) {
 				err = syscall(SYS_bpftask, open_prog_fd, NULL);
 				if (err) {
+					fprintf(stderr, "open_prog returned %d\n", err);
 					break;
 				}
 
 				err = syscall(SYS_bpftask, close_prog_fd, NULL);
 				if (err) {
+					fprintf(stderr, "close_prog returned %d\n", err);
 					break;
 				}
 			}
@@ -149,5 +152,8 @@ int main(int argc, char **argv)
 		}
 	}
 
-	return -err;
+	if (err) {
+		fprintf(stderr, "%s: error, exit code %d\n", argv[0], err);
+	}
+	return err;
 }
diff --git a/src/task_bulk.h b/src/task_bulk.h
index 04818fc9cabecd6ac2e4b94d8eab734907ca6b3c..e14de3e6bd8eba428fabc28d7fe1505266931598 100644
--- a/src/task_bulk.h
+++ b/src/task_bulk.h
@@ -1,6 +1,6 @@
 #ifndef __TASK_BULK_H_
 #define __TASK_BULK_H_
 
-#define SIZE 512
+#define SIZE 2048
 
 #endif // __TASK_BULK_H_
diff --git a/src/task_lib.bpf.h b/src/task_lib.bpf.h
index 18c9ef020bc6b19c1ce7baa64b2e1fa8749eefce..dac5d389a5180a6c28a946bcb50c87a7f18b8760 100644
--- a/src/task_lib.bpf.h
+++ b/src/task_lib.bpf.h
@@ -11,6 +11,9 @@
 
 #define NULL ((void *) 0)
 
+#define false ((bool) 0)
+#define true ((bool) 1)
+
 typedef __u64 uint64_t;
 /* BUG: This asserts a 64-bit system. */
 typedef __u64 uintptr_t;