diag(kernel): log non-ENOENT openat + openat_into failures
This commit is contained in:
+31
-1
@@ -90,6 +90,7 @@ pub fn openat(
|
||||
let new_description = {
|
||||
let scheme = scheme::get_scheme(token.token(), scheme_id)?;
|
||||
|
||||
let dbg_uid = caller_ctx.uid;
|
||||
let res = scheme.kopenat(
|
||||
number,
|
||||
StrOrBytes::from_str(&path_buf),
|
||||
@@ -99,6 +100,24 @@ pub fn openat(
|
||||
token,
|
||||
);
|
||||
|
||||
// Red Bear diagnostic (2026-07-15): log non-ENOENT open failures to
|
||||
// trace getty's EACCES on /scheme/rand and redoxfs's pipe open failure.
|
||||
if let Err(ref e) = res {
|
||||
if e.errno != ENOENT {
|
||||
let pid = context::current().read(token.token()).pid;
|
||||
error!(
|
||||
"openat_err: pid={} base_scheme={} base_number={} path={:?} flags={:#x} uid={} errno={}",
|
||||
pid,
|
||||
scheme_id.get(),
|
||||
number,
|
||||
path_buf.as_str(),
|
||||
flags,
|
||||
dbg_uid,
|
||||
e.errno
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
match res? {
|
||||
OpenResult::SchemeLocal(number, internal_flags) => {
|
||||
FileDescriptor {
|
||||
@@ -148,9 +167,20 @@ pub fn openat_into(
|
||||
(desc.scheme, desc.number)
|
||||
};
|
||||
let caller_ctx = context::current().read(token.token()).caller_ctx();
|
||||
let dbg_uid = caller_ctx.uid;
|
||||
let new_description = {
|
||||
let scheme = scheme::get_scheme(token.token(), scheme_id)?;
|
||||
let res = scheme.kopenat(number, StrOrBytes::from_str(&path_buf), flags, fcntl_flags, caller_ctx, token)?;
|
||||
let res0 = scheme.kopenat(number, StrOrBytes::from_str(&path_buf), flags, fcntl_flags, caller_ctx, token);
|
||||
if let Err(ref e) = res0 {
|
||||
if e.errno != ENOENT {
|
||||
let pid = context::current().read(token.token()).pid;
|
||||
error!(
|
||||
"openat_into_err: pid={} base_scheme={} base_number={} path={:?} flags={:#x} uid={} errno={}",
|
||||
pid, scheme_id.get(), number, path_buf.as_str(), flags, dbg_uid, e.errno
|
||||
);
|
||||
}
|
||||
}
|
||||
let res = res0?;
|
||||
match res {
|
||||
OpenResult::SchemeLocal(number, internal_flags) => {
|
||||
FileDescriptor {
|
||||
|
||||
Reference in New Issue
Block a user