Downgrade locks to read

This commit is contained in:
Wildan M
2026-04-29 21:26:44 +07:00
parent ab08d47aa8
commit ba28216ae8
6 changed files with 15 additions and 15 deletions
+2 -2
View File
@@ -1004,7 +1004,7 @@ pub fn bulk_add_fds(
return Ok(0);
}
let current_lock = context::current();
let mut current = current_lock.write(token.token());
let mut current = current_lock.read(token.token());
let (current, mut token) = current.token_split();
let files: Vec<FileDescriptor> = descriptions
@@ -1048,7 +1048,7 @@ pub fn bulk_insert_fds(
.read_usize()?;
let current_lock = context::current();
let mut current = current_lock.write(token.token());
let mut current = current_lock.read(token.token());
let (current, mut token) = current.token_split();
if first_fd == usize::MAX {
+1 -1
View File
@@ -65,7 +65,7 @@ impl UnmapResult {
};
let (scheme_id, number) = {
let desc = description.write(token.token());
let desc = description.read(token.token());
(desc.scheme, desc.number)
};
+2 -2
View File
@@ -181,8 +181,8 @@ impl KernelScheme for AcpiScheme {
Ok(OpenResult::SchemeLocal(fd, int_flags))
}
fn fsize(&self, id: usize, token: &mut CleanLockToken) -> Result<u64> {
let mut handles = HANDLES.write(token.token());
let handle = handles.get_mut(id)?;
let mut handles = HANDLES.read(token.token());
let handle = handles.get(id)?;
if handle.stat {
return Err(Error::new(EBADF));
+6 -6
View File
@@ -633,8 +633,8 @@ impl KernelScheme for ProcScheme {
) -> Result<usize> {
// TODO: simplify
let handle = {
let mut handles = HANDLES.write(token.token());
let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?;
let mut handles = HANDLES.read(token.token());
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;
handle.clone()
};
@@ -667,8 +667,8 @@ impl KernelScheme for ProcScheme {
// Don't hold a global lock during the context switch later on
let handle = {
let mut handles = HANDLES.write(token.token());
let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?;
let mut handles = HANDLES.read(token.token());
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;
handle.clone()
};
@@ -696,8 +696,8 @@ impl KernelScheme for ProcScheme {
}
fn fsize(&self, id: usize, token: &mut CleanLockToken) -> Result<u64> {
let mut handles = HANDLES.write(token.token());
let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?;
let mut handles = HANDLES.read(token.token());
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;
handle.fsize()
}
+3 -3
View File
@@ -165,7 +165,7 @@ impl KernelScheme for SysScheme {
if matches!(kind, Kind::Wr(_)) {
return Ok(0);
}
let is_data_none = data_lock.write(token.token()).is_none();
let is_data_none = data_lock.read(token.token()).is_none();
if is_data_none {
let new_data = kind.generate_data(token)?;
let mut data_guard = data_lock.write(token.token());
@@ -218,7 +218,7 @@ impl KernelScheme for SysScheme {
_ => return Err(Error::new(EBADF)),
}
};
let is_data_none = data_lock.write(token.token()).is_none();
let is_data_none = data_lock.read(token.token()).is_none();
if is_data_none {
let new_data = kind.generate_data(token)?;
let mut data_guard = data_lock.write(token.token());
@@ -296,7 +296,7 @@ impl KernelScheme for SysScheme {
}
};
let stat = if let Some((kind, data_lock)) = stat_base {
let is_data_none = data_lock.write(token.token()).is_none();
let is_data_none = data_lock.read(token.token()).is_none();
if is_data_none {
let new_data = kind.generate_data(token)?;
let mut data_guard = data_lock.write(token.token());
+1 -1
View File
@@ -441,7 +441,7 @@ pub fn fcntl(fd: FileHandle, cmd: usize, arg: usize, token: &mut CleanLockToken)
.ok_or(Error::new(EBADF))?;
let (scheme_id, number, flags) = {
let desc = file.description.write(token.token());
let desc = file.description.read(token.token());
(desc.scheme, desc.number, desc.flags)
};