@@ -136,8 +136,7 @@ struct bpf_iter_seq_task_file_info {
136
136
};
137
137
138
138
static struct file *
139
- task_file_seq_get_next (struct bpf_iter_seq_task_file_info * info ,
140
- struct task_struct * * task , struct files_struct * * fstruct )
139
+ task_file_seq_get_next (struct bpf_iter_seq_task_file_info * info )
141
140
{
142
141
struct pid_namespace * ns = info -> common .ns ;
143
142
u32 curr_tid = info -> tid , max_fds ;
@@ -150,14 +149,17 @@ task_file_seq_get_next(struct bpf_iter_seq_task_file_info *info,
150
149
* Otherwise, it does not hold any reference.
151
150
*/
152
151
again :
153
- if (* task ) {
154
- curr_task = * task ;
155
- curr_files = * fstruct ;
152
+ if (info -> task ) {
153
+ curr_task = info -> task ;
154
+ curr_files = info -> files ;
156
155
curr_fd = info -> fd ;
157
156
} else {
158
157
curr_task = task_seq_get_next (ns , & curr_tid , true);
159
- if (!curr_task )
158
+ if (!curr_task ) {
159
+ info -> task = NULL ;
160
+ info -> files = NULL ;
160
161
return NULL ;
162
+ }
161
163
162
164
curr_files = get_files_struct (curr_task );
163
165
if (!curr_files ) {
@@ -167,9 +169,8 @@ task_file_seq_get_next(struct bpf_iter_seq_task_file_info *info,
167
169
goto again ;
168
170
}
169
171
170
- /* set *fstruct, *task and info->tid */
171
- * fstruct = curr_files ;
172
- * task = curr_task ;
172
+ info -> files = curr_files ;
173
+ info -> task = curr_task ;
173
174
if (curr_tid == info -> tid ) {
174
175
curr_fd = info -> fd ;
175
176
} else {
@@ -199,8 +200,8 @@ task_file_seq_get_next(struct bpf_iter_seq_task_file_info *info,
199
200
rcu_read_unlock ();
200
201
put_files_struct (curr_files );
201
202
put_task_struct (curr_task );
202
- * task = NULL ;
203
- * fstruct = NULL ;
203
+ info -> task = NULL ;
204
+ info -> files = NULL ;
204
205
info -> fd = 0 ;
205
206
curr_tid = ++ (info -> tid );
206
207
goto again ;
@@ -209,46 +210,25 @@ task_file_seq_get_next(struct bpf_iter_seq_task_file_info *info,
209
210
static void * task_file_seq_start (struct seq_file * seq , loff_t * pos )
210
211
{
211
212
struct bpf_iter_seq_task_file_info * info = seq -> private ;
212
- struct files_struct * files = NULL ;
213
- struct task_struct * task = NULL ;
214
213
struct file * file ;
215
214
216
- file = task_file_seq_get_next (info , & task , & files );
217
- if (!file ) {
218
- info -> files = NULL ;
219
- info -> task = NULL ;
220
- return NULL ;
221
- }
222
-
223
- if (* pos == 0 )
215
+ info -> task = NULL ;
216
+ info -> files = NULL ;
217
+ file = task_file_seq_get_next (info );
218
+ if (file && * pos == 0 )
224
219
++ * pos ;
225
- info -> task = task ;
226
- info -> files = files ;
227
220
228
221
return file ;
229
222
}
230
223
231
224
static void * task_file_seq_next (struct seq_file * seq , void * v , loff_t * pos )
232
225
{
233
226
struct bpf_iter_seq_task_file_info * info = seq -> private ;
234
- struct files_struct * files = info -> files ;
235
- struct task_struct * task = info -> task ;
236
- struct file * file ;
237
227
238
228
++ * pos ;
239
229
++ info -> fd ;
240
230
fput ((struct file * )v );
241
- file = task_file_seq_get_next (info , & task , & files );
242
- if (!file ) {
243
- info -> files = NULL ;
244
- info -> task = NULL ;
245
- return NULL ;
246
- }
247
-
248
- info -> task = task ;
249
- info -> files = files ;
250
-
251
- return file ;
231
+ return task_file_seq_get_next (info );
252
232
}
253
233
254
234
struct bpf_iter__task_file {
0 commit comments