]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
chrt: use SCHED_FLAG_RESET_ON_FORK for sched_setattr()
authorKarel Zak <kzak@redhat.com>
Thu, 1 Oct 2020 08:40:27 +0000 (10:40 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 1 Oct 2020 08:40:27 +0000 (10:40 +0200)
Reviewed by many people, used for years (but probably nobody uses
SCHED_DEADLINE with reset-on-fork), but we all missed:

- sched_setscheduler() uses SCHED_RESET_ON_FORK (0x40000000)
- sched_setattr() uses SCHED_FLAG_RESET_ON_FORK (0x01)

Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1883013
Signed-off-by: Karel Zak <kzak@redhat.com>
schedutils/chrt.c

index 299c99221ecce4bc81ce0eb5778c2d49db4eb820..dbc630fc1f2aa797f9fe75a6aff22b62d7a6fb4b 100644 (file)
@@ -123,7 +123,7 @@ struct chrt_ctl {
        uint64_t period;
 
        unsigned int all_tasks : 1,             /* all threads of the PID */
-                    reset_on_fork : 1,         /* SCHED_RESET_ON_FORK */
+                    reset_on_fork : 1,         /* SCHED_RESET_ON_FORK or SCHED_FLAG_RESET_ON_FORK */
                     altered : 1,               /* sched_set**() used */
                     verbose : 1;               /* verbose output */
 };
@@ -385,9 +385,10 @@ static int set_sched_one(struct chrt_ctl *ctl, pid_t pid)
        sa.sched_period   = ctl->period;
        sa.sched_deadline = ctl->deadline;
 
-# ifdef SCHED_RESET_ON_FORK
+# ifdef SCHED_FLAG_RESET_ON_FORK
+       /* Don't use SCHED_RESET_ON_FORK for sched_setattr()! */
        if (ctl->reset_on_fork)
-               sa.sched_flags |= SCHED_RESET_ON_FORK;
+               sa.sched_flags |= SCHED_FLAG_RESET_ON_FORK;
 # endif
        errno = 0;
        return sched_setattr(pid, &sa, 0);