Projects STRLCPY criu Commits 69befdde
🤬
  • cgroup-v2: make new field cg_set optional

    The new field cg_set is currently marked as required which causes backward
    compatibility problem when using newer CRIU version to restore dumped image
    from older version. This commit makes this field optional and reworks the
    logic to fallback to use cg_set from task_core when it is not in
    thread_core.
    
    Signed-off-by: Bui Quang Minh <[email protected]>
  • Loading...
  • Bui Quang Minh committed with Andrei Vagin 1 year ago
    69befdde
    1 parent 529f2989
  • ■ ■ ■ ■ ■ ■
    criu/cr-dump.c
    skipped 810 lines
    811 811   goto err;
    812 812   }
    813 813   
     814 + core->thread_core->has_cg_set = true;
    814 815   cg_set = &core->thread_core->cg_set;
    815 816   ret = dump_thread_cgroup(item, cg_set, info, -1);
    816 817   if (ret)
    skipped 619 lines
    1436 1437   return -1;
    1437 1438   }
    1438 1439   
     1440 + core->thread_core->has_cg_set = true;
    1439 1441   if (dump_thread_cgroup(item, &core->thread_core->cg_set, info, i))
    1440 1442   return -1;
    1441 1443   }
    skipped 854 lines
  • ■ ■ ■ ■ ■ ■
    criu/cr-restore.c
    skipped 1353 lines
    1354 1354   * Zombie tasks' cgroup is not dumped/restored.
    1355 1355   * cg_set == 0 is skipped in prepare_task_cgroup()
    1356 1356   */
    1357  - if (item->pid->state == TASK_DEAD)
     1357 + if (item->pid->state == TASK_DEAD) {
    1358 1358   rsti(item)->cg_set = 0;
    1359  - else
    1360  - rsti(item)->cg_set = ca.core->thread_core->cg_set;
     1359 + } else {
     1360 + if (ca.core->thread_core->has_cg_set)
     1361 + rsti(item)->cg_set = ca.core->thread_core->cg_set;
     1362 + else
     1363 + rsti(item)->cg_set = ca.core->tc->cg_set;
     1364 + }
    1361 1365   
    1362 1366   if (ca.core->tc->has_stop_signo)
    1363 1367   item->pid->stop_signo = ca.core->tc->stop_signo;
    skipped 2460 lines
    3824 3828   thread_args[i].clear_tid_addr = CORE_THREAD_ARCH_INFO(tcore)->clear_tid_addr;
    3825 3829   core_get_tls(tcore, &thread_args[i].tls);
    3826 3830   
    3827  - if (rsti(current)->cg_set != tcore->thread_core->cg_set) {
     3831 + if (tcore->thread_core->has_cg_set && rsti(current)->cg_set != tcore->thread_core->cg_set) {
    3828 3832   thread_args[i].cg_set = tcore->thread_core->cg_set;
    3829 3833   thread_args[i].cgroupd_sk = dup(get_service_fd(CGROUPD_SK));
    3830 3834   } else {
    skipped 124 lines
  • ■ ■ ■ ■
    images/core.proto
    skipped 105 lines
    106 106   optional string comm = 13;
    107 107   optional uint64 blk_sigset_extended = 14;
    108 108   optional rseq_entry rseq_entry = 15;
    109  - required uint32 cg_set = 16;
     109 + optional uint32 cg_set = 16;
    110 110  }
    111 111   
    112 112  message task_rlimits_entry {
    skipped 27 lines
Please wait...
Page is in error, reload to recover