| From foo@baz Wed Aug 22 09:42:09 CEST 2018 |
| From: Taeung Song <treeze.taeung@gmail.com> |
| Date: Wed, 4 Jul 2018 22:36:38 +0900 |
| Subject: samples/bpf: Check the error of write() and read() |
| |
| From: Taeung Song <treeze.taeung@gmail.com> |
| |
| [ Upstream commit 02a2f000a3629274bfad60bfc4de9edec49e63e7 ] |
| |
| test_task_rename() and test_urandom_read() |
| can be failed during write() and read(), |
| So check the result of them. |
| |
| Reviewed-by: David Laight <David.Laight@ACULAB.COM> |
| Signed-off-by: Taeung Song <treeze.taeung@gmail.com> |
| Acked-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| samples/bpf/test_overhead_user.c | 19 +++++++++++++++---- |
| 1 file changed, 15 insertions(+), 4 deletions(-) |
| |
| --- a/samples/bpf/test_overhead_user.c |
| +++ b/samples/bpf/test_overhead_user.c |
| @@ -6,6 +6,7 @@ |
| */ |
| #define _GNU_SOURCE |
| #include <sched.h> |
| +#include <errno.h> |
| #include <stdio.h> |
| #include <sys/types.h> |
| #include <asm/unistd.h> |
| @@ -44,8 +45,13 @@ static void test_task_rename(int cpu) |
| exit(1); |
| } |
| start_time = time_get_ns(); |
| - for (i = 0; i < MAX_CNT; i++) |
| - write(fd, buf, sizeof(buf)); |
| + for (i = 0; i < MAX_CNT; i++) { |
| + if (write(fd, buf, sizeof(buf)) < 0) { |
| + printf("task rename failed: %s\n", strerror(errno)); |
| + close(fd); |
| + return; |
| + } |
| + } |
| printf("task_rename:%d: %lld events per sec\n", |
| cpu, MAX_CNT * 1000000000ll / (time_get_ns() - start_time)); |
| close(fd); |
| @@ -63,8 +69,13 @@ static void test_urandom_read(int cpu) |
| exit(1); |
| } |
| start_time = time_get_ns(); |
| - for (i = 0; i < MAX_CNT; i++) |
| - read(fd, buf, sizeof(buf)); |
| + for (i = 0; i < MAX_CNT; i++) { |
| + if (read(fd, buf, sizeof(buf)) < 0) { |
| + printf("failed to read from /dev/urandom: %s\n", strerror(errno)); |
| + close(fd); |
| + return; |
| + } |
| + } |
| printf("urandom_read:%d: %lld events per sec\n", |
| cpu, MAX_CNT * 1000000000ll / (time_get_ns() - start_time)); |
| close(fd); |