Commit | Line | Data |
---|---|---|
b7cdc182 | 1 | /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) |
83f9bb7f MD |
2 | * wrapper/fdtable.c |
3 | * | |
4 | * Copyright (C) 2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
83f9bb7f MD |
5 | */ |
6 | ||
5f4c791e | 7 | #include <lttng/kernel-version.h> |
83f9bb7f | 8 | #include <linux/spinlock.h> |
5a2f5e92 | 9 | #include <wrapper/fdtable.h> |
83f9bb7f | 10 | |
5f4c791e | 11 | #if (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(3,7,0)) |
83f9bb7f MD |
12 | |
13 | /* | |
14 | * Reimplementation of iterate_fd() for kernels between 2.6.32 and 3.6 | |
15 | * (inclusive). | |
16 | */ | |
17 | int lttng_iterate_fd(struct files_struct *files, | |
18 | unsigned int first, | |
19 | int (*cb)(const void *, struct file *, unsigned int), | |
20 | const void *ctx) | |
21 | { | |
22 | struct fdtable *fdt; | |
23 | struct file *filp; | |
24 | unsigned int i; | |
25 | int res = 0; | |
26 | ||
27 | if (!files) | |
28 | return 0; | |
29 | spin_lock(&files->file_lock); | |
30 | fdt = files_fdtable(files); | |
31 | for (i = 0; i < fdt->max_fds; i++) { | |
32 | filp = fcheck_files(files, i); | |
33 | if (!filp) | |
34 | continue; | |
35 | res = cb(ctx, filp, i); | |
36 | if (res) | |
37 | break; | |
38 | } | |
39 | spin_unlock(&files->file_lock); | |
40 | return res; | |
41 | } | |
42 | ||
43 | #endif |