[Devel] [PATCH hci-8.1 v10 00/13] Add per-VE failcount support

Konstantin Khorenko khorenko at virtuozzo.com
Fri Sep 25 19:53:21 MSK 2026


This patchset introduces per-VE failcount support.
We have several resources that have per-VE limits, the users might
want to know what limit hits make operations fail.

- Patch 1 is cosmetic, nothing special.
- Patches 2-4 change mount number and limit processing, unifying it
  with other resources. VE selftest is updated in patch 3.
- Patch 5 removes copy-pasted resource accessors by generating them
  with macros.
- Patch 6 is a split-out fix: ve0 was left without aio defaults when
  aio_nr/aio_max_nr moved into ve_struct.
- Patch 7 adds the ve.failcount file and the helpers.
- Patches 8-12 add one failcounter each: netns, mnt, netif,
  bpf_prog, aio.
- Patch 13 introduces new VE selftest that checks mounts accounting,
  limits and failcount updates.

NOTE: for running the new selftest this series should be applied on
top of "[PATCH VZ10 v3 0/3] Improvements for ve selftests".

https://virtuozzo.atlassian.net/browse/VSTOR-135520

v9: <cover.1789491989.git.vladimir.riabchun at virtuozzo.com>

Changes since v9 (respin by khorenko@):
 - Dropped v9 patch 7 "ve/printk: Don't use ve log outside task
   context": get_exec_env() being unreliable in interrupt context is
   a pre-existing problem, it will be fixed properly in a separate
   series under VSTOR-146839.
 - Dropped the neigh_tbl failcounter: neigh_alloc() can run in
   softirq, and ve_failcount_inc() writes to the ve log, which must
   not be used outside task context. Without the dropped printk
   patch this would leak messages to an unrelated CT dmesg. The
   counter will be added together with the ve_printk fix.
 - Split "ve: Introduce per-VE failcount" into a patch adding the
   infrastructure and one patch per counter, so each counter can be
   reviewed and reverted on its own.
 - Made the ve0 aio initialization a separate fix with a Fixes tag:
   the host has been running with aio_max_nr == 0 since
   aio_nr/aio_max_nr became per-VE, so io_setup() on the host fails
   until fs.aio-max-nr is raised by hand.
 - Patch 1 no longer moves the umh_running_helpers/umh_helpers_waitq
   ve0 initializers under #ifdef CONFIG_X86: the fields and their
   users are arch-independent, and a whitespace patch must not
   change the generated code.
 - Dropped the old mount limit warning in alloc_vfsmnt(), otherwise
   every failed mount would be reported twice; the message printed
   by ve_failcount_inc() also names the counter to look at.
 - Fixed wait_on_mnt_avail() in the selftest: the delay was kept in
   tv_nsec, and nanosleep() rejects values of 1s and above with
   EINVAL, so the wait gave up early with a misleading error instead
   of using the whole timeout. The delay is now normalized into
   tv_sec/tv_nsec.
 - Moved ve_failcount_inc() in ioctx_alloc() out of aio_nr_lock:
   the counter is an atomic and does not need the lock, no point in
   printing to two log buffers under it.
 - Reworded several subjects and commit messages.

Changes since v8:
 - Added new patch 7 to fix logs leakage from interrupts.
   We are fine if we miss some failure logs in container
   dmesg - CT can check failcounts anyway, and bringing
   new ratelimited printks with specified VE is too hard
   for such a small thing.
 - Selftest in patch 8 got major rework:
   1. Correct mmap error handling.
   2. Dropped mnt_cost value. Let's force 1, it is expected
      value in fresh mount+VE namespaces.
   3. Proper solution for pending mount destructions. It used
      to be just sleep(1) which may not be enoght on loaded
      machines. Instead, issue rcu_barrier and wait on mnt_avail_nr.
      Since we forced mnt_cost == 1, it know precisely what the
      new value should be.

Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>

---
Vladimir Riabchun (13):
      ve/ve.{h, c}: farewell to spaces as indents
      ve/fs: count available mounts instead of used ones
      selftests/ve: update ve_ns_owner_test
      ve: make mount limit configurable per VE
      ve/ve.c: generate VE resource accessors using macros
      ve/aio: initialize aio fields in ve0
      ve: introduce per-VE failcounter infrastructure
      ve: add netns failcounter
      ve: add mnt failcounter
      ve: add netif failcounter
      ve: add bpf_prog failcounter
      ve: add aio failcounter
      selftests/ve: add mount accounting selftest

 fs/aio.c                                           |   1 +
 fs/namespace.c                                     |  82 +--
 include/linux/ve.h                                 |  34 +-
 kernel/bpf/syscall.c                               |   1 +
 kernel/ve/ve.c                                     | 274 +++++-----
 kernel/ve/veowner.c                                |  19 -
 net/core/dev.c                                     |  10 +-
 net/core/net_namespace.c                           |   4 +-
 tools/testing/selftests/ve/.gitignore              |   1 +
 tools/testing/selftests/ve/Makefile                |   1 +
 .../selftests/ve/ve_mount_accounting_test.c        | 554 +++++++++++++++++++++
 tools/testing/selftests/ve/ve_ns_owner_test.c      |  37 +-
 tools/testing/selftests/ve/ve_selftest.h           |  21 +
 13 files changed, 816 insertions(+), 223 deletions(-)
---
base-commit: 03a6f36081f7055a2e41f9b79306a3ab0103d883
change-id: 20260925-b4-kh-ve_fail-6271523cb384

Best regards,
--  
Konstantin Khorenko <khorenko at virtuozzo.com>



More information about the Devel mailing list