diff --git a/audit/internal/collector/storage.go b/audit/internal/collector/storage.go index 5336a03..008528d 100644 --- a/audit/internal/collector/storage.go +++ b/audit/internal/collector/storage.go @@ -38,11 +38,22 @@ func bestEffortRescanHotplugStorage() { for _, path := range hostPaths { // SAS HBAs (e.g. smartpqi) block indefinitely in sas_user_scan when // written to — SAS topology is discovered by the driver itself. + // Detect via two methods: (1) sas_host class registration, and + // (2) driver proc_name — smartpqi uses scsi_transport_sas but does + // not register a sas_host object, so (1) alone misses it. host := filepath.Base(filepath.Dir(path)) if _, err := os.Stat("/sys/class/sas_host/" + host); err == nil { slog.Info("storage: scsi host scan skipped (SAS host)", "path", path) continue } + if procName, err := os.ReadFile("/sys/class/scsi_host/" + host + "/proc_name"); err == nil { + switch strings.TrimSpace(string(procName)) { + case "smartpqi", "hpsa": + slog.Info("storage: scsi host scan skipped (SAS transport driver)", + "path", path, "driver", strings.TrimSpace(string(procName))) + continue + } + } if err := hotplugWriteFile(path, []byte("- - -\n"), 0644); err != nil { slog.Info("storage: scsi host scan write failed", "path", path, "err", err) continue