add filetable state logging at EBADF point
This commit is contained in:
+18
-1
@@ -79,7 +79,24 @@ pub fn openat(
|
||||
let (context, mut token) = current.token_split();
|
||||
let name = context.name;
|
||||
let pipe = context.get_file(fh, &mut token).ok_or_else(|| {
|
||||
info!("openat: EBADF fh={:#x} ctx='{}'", fh.get(), name);
|
||||
let ft = context.files.read(token.token());
|
||||
let raw = fh.get();
|
||||
let stripped = raw & !syscall::UPPER_FDTBL_TAG;
|
||||
let is_upper = raw & syscall::UPPER_FDTBL_TAG != 0;
|
||||
let upper_len = ft.upper_fdtbl.len();
|
||||
let upper_at_idx = if is_upper && stripped < ft.upper_fdtbl.len() {
|
||||
ft.upper_fdtbl[stripped].is_some()
|
||||
} else {
|
||||
false
|
||||
};
|
||||
let upper_present: String = ft.upper_fdtbl.iter().enumerate()
|
||||
.filter(|(_, f)| f.is_some())
|
||||
.map(|(i, _)| i.to_string())
|
||||
.collect::<Vec<_>>().join(",");
|
||||
info!(
|
||||
"openat: EBADF fh={:#x} ctx='{}' is_upper={} idx={} upper_len={} upper_at_idx={} upper_present=[{}]",
|
||||
raw, name, is_upper, stripped, upper_len, upper_at_idx, upper_present
|
||||
);
|
||||
Error::new(EBADF)
|
||||
})?;
|
||||
let desc = pipe.description.read(token.token());
|
||||
|
||||
Reference in New Issue
Block a user