7 Commits

Author SHA1 Message Date
William Gill
f54bf88e50 Document per-version branch model on main README
With the scoutfs-build multi-version pipeline landing, each
supported scoutfs version (v1.28, v1.29, v1.30) has its own
long-lived branch here.  The tag history section is replaced by a
table showing which branch targets which scoutfs version, and the
rebase-for-new-upstream walkthrough is updated to describe creating
a new branch rather than overwriting main.
2026-04-23 09:02:44 -05:00
William Gill
d68cd6c0e8 v1.30-notify-1: rebase patch series onto scoutfs v1.30
Upstream released v1.30 (ad65116 on 2026-04-16 per the scoutfs tag).
The CI's daily cron picked the new tag and failed because our patch
series targeted v1.29.

Rebase was clean: scoutfs v1.30's diff against v1.29 touches btree,
forest, quota, totl, triggers, wkic, and xattr — none of the files
our series modifies.  No daemon, Makefile, or packaging changes;
this is a pure retag.

  git checkout v1.30
  git am --3way <the three existing patches>      # clean apply
  git format-patch v1.30..HEAD

Base bumped: v1.29 -> v1.30.
v1.30-notify-1
2026-04-22 16:14:54 -05:00
William Gill
0d7c6a6203 apply.sh: set executable bit in git index
The file was committed with mode 100644 so Linux clones couldn't
execute it directly; the CI path that invokes it as
  /tmp/scoutfs-notify/apply.sh <target>
was getting 'Permission denied'.  The ci/apply-notify-patches.sh
shim now also chmod +x defensively, but fixing the stored mode
is the right place to handle it.
2026-04-22 16:12:24 -05:00
William Gill
7c98bac36d v1.29-notify-4: bump Go toolchain minimum to 1.26
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.
v1.29-notify-4
2026-04-22 14:41:14 -05:00
William Gill
25a2182c45 v1.29-notify-3: rewrite daemon in Go, fix record size
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.
2026-04-22 14:34:12 -05:00
William Gill
94a4fd53c6 v1.29-notify-2: drop config surface, add scoutfs-notifyd
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.
2026-04-22 13:59:44 -05:00
William Gill
50b9e27f75 Initial scoutfs-notify patch series for 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
2026-04-22 10:21:21 -05:00