Raises the minimum Go required to build scoutfs-notifyd to 1.26
(current upstream Go as of Feb 2026). The source uses no language
features beyond basic stdlib; the bump is a policy decision to
track current Go rather than a technical need.
No distro currently packages Go 1.26 in its stable repos, so
scoutfs-build's CI now fetches the official linux tarball from
go.dev and caches it in /var/cache/scoutfs on the runner host
(keyed by version + arch). Builds remain hermetic after that
single fetch: CGO_ENABLED=0, GOPROXY=off, no module dependencies.
Changes:
utils/notifyd/go.mod go 1.21 -> go 1.26
utils/scoutfs-utils.spec.in golang >= 1.21 -> golang >= 1.26
The kmod patches (1 and 2) and the daemon source are unchanged.
Two changes from v1.29-notify-2:
1. kmod: fix a latent ring-size compile error. The record struct was
56 bytes with an _pad[6] trailer, which meant
NOTIFY_RING_BYTES / sizeof(record) = 1170 events per ring —
not a power of two, so the BUILD_BUG_ON in notify_setup would
have fired. Bumped _pad to 14 bytes so the record is 64 bytes,
capacity is 1024, and every record is cache-line aligned. Wire
ABI bumped accordingly; no deployed consumers yet.
2. scoutfs-notifyd: rewritten in Go using the standard library
only. Three goroutines (reader / accept / broadcaster) with
channel communication replace the single-thread epoll + ioctl
loop from the C version. Slow-client handling is done by
setting an in-the-past write deadline; the broadcaster drops
clients whose kernel send buffer is full.
Packaging changes: utils/Makefile now invokes "go build" with
CGO_ENABLED=0 and GOPROXY=off; utils/scoutfs-utils.spec.in adds
BuildRequires: golang >= 1.21.
Reworks the series to Option B from the design discussion: no mount
options, no sysfs toggles, single well-known socket per scoutfs
volume at /run/scoutfs/<fsid>/notify.sock.
Changes vs v1.29-notify-1:
- Kmod: dropped notify_events / notify_ring_kb mount options and
their sysfs attrs. Ring is always allocated at mount with a
compile-time 64 KiB size. notify_enabled is now flipped by the
ioctl handler on reader attach / detach, so emit hooks are
zero-cost unless a watcher is connected.
- New third patch: scoutfs-notifyd userspace relay. Single-threaded
epoll daemon that drains the ioctl and broadcasts each record as
a SOCK_SEQPACKET message to connected clients. Shipped with a
systemd template unit and man page.
- Packaging: utils/Makefile and scoutfs-utils.spec.in install the
daemon at /usr/sbin/scoutfs-notifyd and the unit at
/usr/lib/systemd/system/scoutfs-notifyd@.service.
Patches 1 and 2 have been re-scoped; re-apply expected to succeed
on scoutfs v1.29.
Two-patch series that layers an observer-only file-access
notification stream onto scoutfs. See README.md for the design
summary and rebase workflow.
Base: scoutfs v1.29