probe: use exhaustive matches

reviewable/pr1393/r9
Tamir Duberstein 7 days ago
parent 1944c4aa00
commit a4a3c1641f
No known key found for this signature in database

@ -130,8 +130,6 @@ pub(crate) fn attach<T: Link + From<PerfLinkInner>>(
} }
pub(crate) fn detach_debug_fs(event: ProbeEvent) -> Result<(), ProgramError> { pub(crate) fn detach_debug_fs(event: ProbeEvent) -> Result<(), ProgramError> {
use ProbeKind::*;
let tracefs = find_tracefs_path()?; let tracefs = find_tracefs_path()?;
let ProbeEvent { let ProbeEvent {
@ -142,8 +140,12 @@ pub(crate) fn detach_debug_fs(event: ProbeEvent) -> Result<(), ProgramError> {
let result = delete_probe_event(tracefs, event); let result = delete_probe_event(tracefs, event);
result.map_err(|(filename, io_error)| match kind { result.map_err(|(filename, io_error)| match kind {
KProbe | KRetProbe => KProbeError::FileError { filename, io_error }.into(), ProbeKind::KProbe | ProbeKind::KRetProbe => {
UProbe | URetProbe => UProbeError::FileError { filename, io_error }.into(), KProbeError::FileError { filename, io_error }.into()
}
ProbeKind::UProbe | ProbeKind::URetProbe => {
UProbeError::FileError { filename, io_error }.into()
}
}) })
} }
@ -153,25 +155,23 @@ fn create_as_probe(
offset: u64, offset: u64,
pid: Option<u32>, pid: Option<u32>,
) -> Result<crate::MockableFd, ProgramError> { ) -> Result<crate::MockableFd, ProgramError> {
use ProbeKind::*;
let perf_ty = match kind { let perf_ty = match kind {
KProbe | KRetProbe => read_sys_fs_perf_type(kind.pmu()) ProbeKind::KProbe | ProbeKind::KRetProbe => read_sys_fs_perf_type(kind.pmu())
.map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?,
UProbe | URetProbe => read_sys_fs_perf_type(kind.pmu()) ProbeKind::UProbe | ProbeKind::URetProbe => read_sys_fs_perf_type(kind.pmu())
.map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?,
}; };
let ret_bit = match kind { let ret_bit = match kind {
KRetProbe => Some( ProbeKind::KRetProbe => Some(
read_sys_fs_perf_ret_probe(kind.pmu()) read_sys_fs_perf_ret_probe(kind.pmu())
.map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?,
), ),
URetProbe => Some( ProbeKind::URetProbe => Some(
read_sys_fs_perf_ret_probe(kind.pmu()) read_sys_fs_perf_ret_probe(kind.pmu())
.map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?,
), ),
_ => None, ProbeKind::UProbe | ProbeKind::KProbe => None,
}; };
perf_event_open_probe(perf_ty, ret_bit, fn_name, offset, pid) perf_event_open_probe(perf_ty, ret_bit, fn_name, offset, pid)
@ -188,14 +188,12 @@ fn create_as_trace_point(
offset: u64, offset: u64,
pid: Option<u32>, pid: Option<u32>,
) -> Result<(crate::MockableFd, OsString), ProgramError> { ) -> Result<(crate::MockableFd, OsString), ProgramError> {
use ProbeKind::*;
let tracefs = find_tracefs_path()?; let tracefs = find_tracefs_path()?;
let event_alias = match kind { let event_alias = match kind {
KProbe | KRetProbe => create_probe_event(tracefs, kind, name, offset) ProbeKind::KProbe | ProbeKind::KRetProbe => create_probe_event(tracefs, kind, name, offset)
.map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| KProbeError::FileError { filename, io_error })?,
UProbe | URetProbe => create_probe_event(tracefs, kind, name, offset) ProbeKind::UProbe | ProbeKind::URetProbe => create_probe_event(tracefs, kind, name, offset)
.map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?, .map_err(|(filename, io_error)| UProbeError::FileError { filename, io_error })?,
}; };
@ -217,12 +215,9 @@ fn create_probe_event(
) -> Result<OsString, (PathBuf, io::Error)> { ) -> Result<OsString, (PathBuf, io::Error)> {
use std::os::unix::ffi::OsStrExt as _; use std::os::unix::ffi::OsStrExt as _;
use ProbeKind::*;
let events_file_name = tracefs.join(format!("{}_events", kind.pmu()));
let probe_type_prefix = match kind { let probe_type_prefix = match kind {
KProbe | UProbe => 'p', ProbeKind::KProbe | ProbeKind::UProbe => 'p',
KRetProbe | URetProbe => 'r', ProbeKind::KRetProbe | ProbeKind::URetProbe => 'r',
}; };
let mut event_alias = OsString::new(); let mut event_alias = OsString::new();
@ -254,12 +249,13 @@ fn create_probe_event(
probe.push(" "); probe.push(" ");
probe.push(fn_name); probe.push(fn_name);
match kind { match kind {
KProbe => write!(&mut probe, "+{offset}").unwrap(), ProbeKind::KProbe => write!(&mut probe, "+{offset}").unwrap(),
UProbe | URetProbe => write!(&mut probe, ":{offset:#x}").unwrap(), ProbeKind::UProbe | ProbeKind::URetProbe => write!(&mut probe, ":{offset:#x}").unwrap(),
_ => {} ProbeKind::KRetProbe => {}
}; };
probe.push("\n"); probe.push("\n");
let events_file_name = tracefs.join(format!("{}_events", kind.pmu()));
OpenOptions::new() OpenOptions::new()
.append(true) .append(true)
.open(&events_file_name) .open(&events_file_name)

Loading…
Cancel
Save