aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/kernel/bpf/bpf_iter.c
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2020-05-13 11:02:18 -0700
committerAlexei Starovoitov <ast@kernel.org>2020-05-13 12:30:50 -0700
commit2e3ed68bfcd9c5ca2cf8b88ba23a34992ccd0b1f (patch)
tree7a6512153de614c5ef0f5ef361da4ba3d19d5b7b /kernel/bpf/bpf_iter.c
parentbpf: Change btf_iter func proto prefix to "bpf_iter_" (diff)
downloadwireguard-linux-2e3ed68bfcd9c5ca2cf8b88ba23a34992ccd0b1f.tar.xz
wireguard-linux-2e3ed68bfcd9c5ca2cf8b88ba23a34992ccd0b1f.zip
bpf: Add comments to interpret bpf_prog return values
Add a short comment in bpf_iter_run_prog() function to explain how bpf_prog return value is converted to seq_ops->show() return value: bpf_prog return seq_ops()->show() return 0 0 1 -EAGAIN When show() return value is -EAGAIN, the current bpf_seq_read() will end. If the current seq_file buffer is empty, -EAGAIN will return to user space. Otherwise, the buffer will be copied to user space. In both cases, the next bpf_seq_read() call will try to show the same object which returned -EAGAIN previously. Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andriin@fb.com> Link: https://lore.kernel.org/bpf/20200513180218.2949517-1-yhs@fb.com
Diffstat (limited to '')
-rw-r--r--kernel/bpf/bpf_iter.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/bpf/bpf_iter.c b/kernel/bpf/bpf_iter.c
index 30efd15cd4a0..0a45a6cdfabd 100644
--- a/kernel/bpf/bpf_iter.c
+++ b/kernel/bpf/bpf_iter.c
@@ -526,5 +526,11 @@ int bpf_iter_run_prog(struct bpf_prog *prog, void *ctx)
migrate_enable();
rcu_read_unlock();
+ /* bpf program can only return 0 or 1:
+ * 0 : okay
+ * 1 : retry the same object
+ * The bpf_iter_run_prog() return value
+ * will be seq_ops->show() return value.
+ */
return ret == 0 ? 0 : -EAGAIN;
}