@@ -3542,21 +3542,21 @@ static int cpu_stat_show(struct seq_file *seq, void *v)
3542
3542
static int cgroup_io_pressure_show (struct seq_file * seq , void * v )
3543
3543
{
3544
3544
struct cgroup * cgrp = seq_css (seq )-> cgroup ;
3545
- struct psi_group * psi = cgroup_id (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3545
+ struct psi_group * psi = cgroup_ino (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3546
3546
3547
3547
return psi_show (seq , psi , PSI_IO );
3548
3548
}
3549
3549
static int cgroup_memory_pressure_show (struct seq_file * seq , void * v )
3550
3550
{
3551
3551
struct cgroup * cgrp = seq_css (seq )-> cgroup ;
3552
- struct psi_group * psi = cgroup_id (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3552
+ struct psi_group * psi = cgroup_ino (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3553
3553
3554
3554
return psi_show (seq , psi , PSI_MEM );
3555
3555
}
3556
3556
static int cgroup_cpu_pressure_show (struct seq_file * seq , void * v )
3557
3557
{
3558
3558
struct cgroup * cgrp = seq_css (seq )-> cgroup ;
3559
- struct psi_group * psi = cgroup_id (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3559
+ struct psi_group * psi = cgroup_ino (cgrp ) == 1 ? & psi_system : & cgrp -> psi ;
3560
3560
3561
3561
return psi_show (seq , psi , PSI_CPU );
3562
3562
}
@@ -4400,12 +4400,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it)
4400
4400
}
4401
4401
} while (!css_set_populated (cset ) && list_empty (& cset -> dying_tasks ));
4402
4402
4403
- if (!list_empty (& cset -> tasks ))
4403
+ if (!list_empty (& cset -> tasks )) {
4404
4404
it -> task_pos = cset -> tasks .next ;
4405
- else if (!list_empty (& cset -> mg_tasks ))
4405
+ it -> cur_tasks_head = & cset -> tasks ;
4406
+ } else if (!list_empty (& cset -> mg_tasks )) {
4406
4407
it -> task_pos = cset -> mg_tasks .next ;
4407
- else
4408
+ it -> cur_tasks_head = & cset -> mg_tasks ;
4409
+ } else {
4408
4410
it -> task_pos = cset -> dying_tasks .next ;
4411
+ it -> cur_tasks_head = & cset -> dying_tasks ;
4412
+ }
4409
4413
4410
4414
it -> tasks_head = & cset -> tasks ;
4411
4415
it -> mg_tasks_head = & cset -> mg_tasks ;
@@ -4463,10 +4467,14 @@ static void css_task_iter_advance(struct css_task_iter *it)
4463
4467
else
4464
4468
it -> task_pos = it -> task_pos -> next ;
4465
4469
4466
- if (it -> task_pos == it -> tasks_head )
4470
+ if (it -> task_pos == it -> tasks_head ) {
4467
4471
it -> task_pos = it -> mg_tasks_head -> next ;
4468
- if (it -> task_pos == it -> mg_tasks_head )
4472
+ it -> cur_tasks_head = it -> mg_tasks_head ;
4473
+ }
4474
+ if (it -> task_pos == it -> mg_tasks_head ) {
4469
4475
it -> task_pos = it -> dying_tasks_head -> next ;
4476
+ it -> cur_tasks_head = it -> dying_tasks_head ;
4477
+ }
4470
4478
if (it -> task_pos == it -> dying_tasks_head )
4471
4479
css_task_iter_advance_css_set (it );
4472
4480
} else {
@@ -4485,11 +4493,12 @@ static void css_task_iter_advance(struct css_task_iter *it)
4485
4493
goto repeat ;
4486
4494
4487
4495
/* and dying leaders w/o live member threads */
4488
- if (!atomic_read (& task -> signal -> live ))
4496
+ if (it -> cur_tasks_head == it -> dying_tasks_head &&
4497
+ !atomic_read (& task -> signal -> live ))
4489
4498
goto repeat ;
4490
4499
} else {
4491
4500
/* skip all dying ones */
4492
- if (task -> flags & PF_EXITING )
4501
+ if (it -> cur_tasks_head == it -> dying_tasks_head )
4493
4502
goto repeat ;
4494
4503
}
4495
4504
}
@@ -4595,6 +4604,9 @@ static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos)
4595
4604
struct kernfs_open_file * of = s -> private ;
4596
4605
struct css_task_iter * it = of -> priv ;
4597
4606
4607
+ if (pos )
4608
+ (* pos )++ ;
4609
+
4598
4610
return css_task_iter_next (it );
4599
4611
}
4600
4612
@@ -4610,18 +4622,19 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,
4610
4622
* from position 0, so we can simply keep iterating on !0 *pos.
4611
4623
*/
4612
4624
if (!it ) {
4613
- if (WARN_ON_ONCE ((* pos )++ ))
4625
+ if (WARN_ON_ONCE ((* pos )))
4614
4626
return ERR_PTR (- EINVAL );
4615
4627
4616
4628
it = kzalloc (sizeof (* it ), GFP_KERNEL );
4617
4629
if (!it )
4618
4630
return ERR_PTR (- ENOMEM );
4619
4631
of -> priv = it ;
4620
4632
css_task_iter_start (& cgrp -> self , iter_flags , it );
4621
- } else if (!(* pos )++ ) {
4633
+ } else if (!(* pos )) {
4622
4634
css_task_iter_end (it );
4623
4635
css_task_iter_start (& cgrp -> self , iter_flags , it );
4624
- }
4636
+ } else
4637
+ return it -> cur_task ;
4625
4638
4626
4639
return cgroup_procs_next (s , NULL , NULL );
4627
4640
}
0 commit comments