fill watch: one warning per filesystem (R-1371) — committed, not released
gates / gates (push) Successful in 31s
gates / gates (push) Successful in 31s
On a box whose guest has one data volume the two built-in fill targets, "/" (the controller's overlay on the Docker data volume) and /mnt/sys_drive, are one filesystem. The target list was de-duplicated by path only, so one fill would send two warnings under two names. fillTargets now keeps one target per filesystem; the first stays (app area, system area, drives). The identity is system.FilesystemKey, not st_dev alone: inside the container "/" is an overlay with its own device number, so an overlay path takes the device of a Docker-kept file on the data-root (/etc/hostname, /etc/hosts, /etc/resolv.conf). Measured read-only on demo-hp 9201/9202 and the N100 on 2026-11-10. Tests: TestR1371_* (3), TestFilesystemKey_* (2). Red seen three times. No version, no image, no floor: it waits for a release session. Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
1 parent
da060d7e7f
commit
844f19f11e
11 files changed
+438
-22
No files matched your search
@@ -0,0 +1,24 @@
|
||||
//go:build linux
|
||||
|
||||
package system
|
||||
|
||||
import "syscall"
|
||||
|
||||
// overlayMagic is statfs's f_type for an overlay filesystem (OVERLAYFS_SUPER_MAGIC, linux/magic.h).
|
||||
const overlayMagic = 0x794c7630
|
||||
|
||||
func statDev(path string) (uint64, bool) {
|
||||
var st syscall.Stat_t
|
||||
if err := syscall.Stat(path, &st); err != nil {
|
||||
return 0, false
|
||||
}
|
||||
return uint64(st.Dev), true
|
||||
}
|
||||
|
||||
func isOverlayFS(path string) (isOverlay, ok bool) {
|
||||
var st syscall.Statfs_t
|
||||
if err := syscall.Statfs(path, &st); err != nil {
|
||||
return false, false
|
||||
}
|
||||
return int64(st.Type) == overlayMagic, true
|
||||
}
|
||||
Reference in new issue
Block a user