Repository navigation
NoMount v2.1.1
·
165 commits
to master
since this release
Immutable
release. Only release title and notes can be modified.
NoMount v2.1.1 is here!🎉
This release is all about performance and stability. The hot paths got heavily optimized (rule lookup, directory iteration, path redirection), memory management was cleaned up (fewer allocations and misc), and the LKM now loads on more kernels than ever.
The commit count hit 555 on this release. Thanks to everyone who's been testing, reporting and contributing along the way 💙
Small Changelog:
There are too many changes made in this release, so I will only highlight the most relevant and important ones here:
-
kernel/:
- Massive hot-path optimization pass, rule lookups, directory iteration and dentry revalidation are noticeably faster, especially on devices with hundreds of active rules.
- Rule storage was reworked so each directory now uses a single packed allocation for its rules and their path strings, instead of one allocation per rule. Big win on fragmentation and cache locality.
- Virtual inodes are now fully decoupled from rules. A rule can be replaced or removed without touching the inodes that already reference its target, which removes a whole class of lifetime bugs.
- Deferred freeing switched from a shared
synchronize_rcu()queue to per-objectcall_rcu(). Clearing rules no longer blocks concurrent writers for milliseconds, and hot load / hot unload is now near-instant. NM_CMD_ADD_RULEtakes the write mutex once per batch instead of once per rule. Boot-time rule injection and hot loading are significantly faster.- New RCU scope guard (
rcu_guard()) used across the module. Read-side sections are now guaranteed to be released on every exit path. - Child bloom filters now scale with directory size (up to 16Kb for pathological cases) and are skipped entirely for directories with one or two children. UID exclusion got its own 256-bit prefilter, so
nomount_is_uid_blockedshort-circuits most of the time. - VFS hooks are now installed before publishing children, and unpublished topology rules are freed on error. Fixes a class of partial-state bugs during rule creation.
- Removed a redundant pass of directory cache pruning per rule, and skipped the dentry lock in the no-op path of dentry ops hijacking.
- The LKM now builds and loads on OSS kernels (LineageOS and similar) that ship without CONFIG_PAGE_PINNER.
-
userspace/:
nm list --jsonnow escapes paths correctly, so rule listings are valid JSON even when a path contains special characters.nm listnow propagates kernel-side query failures to the CLI exit code instead of silently returning an empty list.
-
webui/:
- Added a Skip / Unskip button on each module card. Skip creates
skip_mountin the module directory so NoMount will skip it in the next boot; Unskip deletes that file. - The Material You palette is now computed in JavaScript from a single seed color. Theme changes (including system light/dark and AMOLED) apply instantly inside the WebUI without needing a reload, and Custom Colors now produce a proper M3 palette instead of an HSL approximation (Theme bugs from previous release has been fixed!).
theme.jsonis now authoritative andlocalStorageis just a warm cache. Editing the theme on disk and reloading the WebUI now correctly adopts the new values.- Navigation history was reworked into a single state machine. The Android back gesture now closes modals and dialogs consistently.
- Crowdin was added for translations, added German translation and small adjustments to others languages.
- Added a Skip / Unskip button on each module card. Skip creates
-
module/:
- Split the boot into two phases:
post-fs-data.shnow loads the LKM (if needed) andmetamount.shhandles rule injection. This lets other modules callnm rule addfrom their ownpost-fs-data.shwithout racing against NoMount's own injection. - Rule path generation was extracted into a shared
rule-paths.shscript, used by both the boot pipeline and the WebUI's hot load/unload routines.
- Split the boot into two phases:
and a lot of other misc changes :)
New Contributors
Full Changelog: v2.1.0...v2.1.1