diff --git a/kernel/src/fs/epoll/epoll_file.rs b/kernel/src/fs/epoll/epoll_file.rs index e9f21bdc..a23fb99f 100644 --- a/kernel/src/fs/epoll/epoll_file.rs +++ b/kernel/src/fs/epoll/epoll_file.rs @@ -344,22 +344,6 @@ impl FileLike for EpollFile { return_errno_with_message!(Errno::EINVAL, "epoll files do not support ioctl"); } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.pollee.register_observer(observer, mask); - Ok(()) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.pollee.unregister_observer(observer) - } - fn metadata(&self) -> Metadata { // This is a dummy implementation. // TODO: Add "anonymous inode fs" and link `EpollFile` to it. diff --git a/kernel/src/fs/file_handle.rs b/kernel/src/fs/file_handle.rs index a67b8cae..0b749d52 100644 --- a/kernel/src/fs/file_handle.rs +++ b/kernel/src/fs/file_handle.rs @@ -5,7 +5,6 @@ //! Opened File Handle use crate::{ - events::{IoEvents, Observer}, fs::{ device::Device, utils::{AccessMode, FallocMode, InodeMode, IoctlCmd, Metadata, SeekFrom, StatusFlags}, @@ -101,22 +100,6 @@ pub trait FileLike: Pollable + Send + Sync + Any { return_errno_with_message!(Errno::EOPNOTSUPP, "fallocate is not supported"); } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - return_errno_with_message!(Errno::EINVAL, "register_observer is not supported") - } - - #[must_use] - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - None - } - fn as_socket(self: Arc) -> Option> { None } diff --git a/kernel/src/fs/pipe.rs b/kernel/src/fs/pipe.rs index ca002190..67a2dcba 100644 --- a/kernel/src/fs/pipe.rs +++ b/kernel/src/fs/pipe.rs @@ -7,7 +7,7 @@ use super::{ utils::{AccessMode, Channel, Consumer, InodeMode, InodeType, Metadata, Producer, StatusFlags}, }; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, prelude::*, process::{ signal::{PollHandle, Pollable}, @@ -104,21 +104,6 @@ impl FileLike for PipeReader { rdev: 0, } } - - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.consumer.register_observer(observer, mask) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.consumer.unregister_observer(observer) - } } pub struct PipeWriter { @@ -188,21 +173,6 @@ impl FileLike for PipeWriter { rdev: 0, } } - - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.producer.register_observer(observer, mask) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.producer.unregister_observer(observer) - } } fn check_status_flags(status_flags: StatusFlags) -> Result<()> { diff --git a/kernel/src/net/socket/ip/datagram/mod.rs b/kernel/src/net/socket/ip/datagram/mod.rs index 69e08ec5..b2d8b76d 100644 --- a/kernel/src/net/socket/ip/datagram/mod.rs +++ b/kernel/src/net/socket/ip/datagram/mod.rs @@ -8,7 +8,7 @@ use takeable::Takeable; use self::{bound::BoundDatagram, unbound::UnboundDatagram}; use super::{common::get_ephemeral_endpoint, UNSPECIFIED_LOCAL_ENDPOINT}; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::{ file_handle::FileLike, utils::{InodeMode, Metadata, StatusFlags}, @@ -259,22 +259,6 @@ impl FileLike for DatagramSocket { Ok(()) } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.pollee.register_observer(observer, mask); - Ok(()) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.pollee.unregister_observer(observer) - } - fn metadata(&self) -> Metadata { // This is a dummy implementation. // TODO: Add "SockFS" and link `DatagramSocket` to it. diff --git a/kernel/src/net/socket/ip/stream/mod.rs b/kernel/src/net/socket/ip/stream/mod.rs index b3a10cf2..e1910a12 100644 --- a/kernel/src/net/socket/ip/stream/mod.rs +++ b/kernel/src/net/socket/ip/stream/mod.rs @@ -14,7 +14,7 @@ use util::TcpOptionSet; use super::UNSPECIFIED_LOCAL_ENDPOINT; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::{ file_handle::FileLike, utils::{InodeMode, Metadata, StatusFlags}, @@ -416,22 +416,6 @@ impl FileLike for StreamSocket { Some(self) } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.pollee.register_observer(observer, mask); - Ok(()) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.pollee.unregister_observer(observer) - } - fn metadata(&self) -> Metadata { // This is a dummy implementation. // TODO: Add "SockFS" and link `StreamSocket` to it. diff --git a/kernel/src/net/socket/unix/stream/connected.rs b/kernel/src/net/socket/unix/stream/connected.rs index 36493bb5..6da2d224 100644 --- a/kernel/src/net/socket/unix/stream/connected.rs +++ b/kernel/src/net/socket/unix/stream/connected.rs @@ -5,7 +5,7 @@ use core::ops::Deref; use ostd::sync::PreemptDisabled; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::utils::{Channel, Consumer, Producer}, net::socket::{ unix::{addr::UnixSocketAddrBound, UnixSocketAddr}, @@ -96,25 +96,6 @@ impl Connected { combine_io_events(mask, reader_events, writer_events) } - - pub(super) fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.reader.register_observer(observer.clone(), mask)?; - self.writer.register_observer(observer, mask)?; - Ok(()) - } - - pub(super) fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - let reader_observer = self.reader.unregister_observer(observer); - let writer_observer = self.writer.unregister_observer(observer); - reader_observer.or(writer_observer) - } } pub(super) fn combine_io_events( diff --git a/kernel/src/net/socket/unix/stream/init.rs b/kernel/src/net/socket/unix/stream/init.rs index 2472d1ea..2766ba1d 100644 --- a/kernel/src/net/socket/unix/stream/init.rs +++ b/kernel/src/net/socket/unix/stream/init.rs @@ -7,7 +7,7 @@ use super::{ listener::Listener, }; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, net::socket::{ unix::addr::{UnixSocketAddr, UnixSocketAddrBound}, SockShutdownCmd, @@ -122,25 +122,4 @@ impl Init { // Meanwhile, it is in `IoEvents::ALWAYS_POLL`, so we always return it. combine_io_events(mask, reader_events, writer_events) | IoEvents::HUP } - - pub(super) fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - // To avoid loss of events, this must be compatible with - // `Connected::poll`/`Listener::poll`. - self.reader_pollee.register_observer(observer.clone(), mask); - self.writer_pollee.register_observer(observer, mask); - Ok(()) - } - - pub(super) fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - let reader_observer = self.reader_pollee.unregister_observer(observer); - let writer_observer = self.writer_pollee.unregister_observer(observer); - reader_observer.or(writer_observer) - } } diff --git a/kernel/src/net/socket/unix/stream/listener.rs b/kernel/src/net/socket/unix/stream/listener.rs index 44360254..e9c3139e 100644 --- a/kernel/src/net/socket/unix/stream/listener.rs +++ b/kernel/src/net/socket/unix/stream/listener.rs @@ -10,7 +10,7 @@ use super::{ UnixStreamSocket, }; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::file_handle::FileLike, net::socket::{ unix::addr::{UnixSocketAddrBound, UnixSocketAddrKey}, @@ -84,25 +84,6 @@ impl Listener { combine_io_events(mask, reader_events, writer_events) } - - pub(super) fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.backlog.register_observer(observer.clone(), mask)?; - self.writer_pollee.register_observer(observer, mask); - Ok(()) - } - - pub(super) fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - let reader_observer = self.backlog.unregister_observer(observer); - let writer_observer = self.writer_pollee.unregister_observer(observer); - reader_observer.or(writer_observer) - } } impl Drop for Listener { @@ -229,22 +210,6 @@ impl Backlog { fn poll(&self, mask: IoEvents, poller: Option<&mut PollHandle>) -> IoEvents { self.pollee.poll(mask, poller) } - - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.pollee.register_observer(observer, mask); - Ok(()) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.pollee.unregister_observer(observer) - } } impl Backlog { diff --git a/kernel/src/net/socket/unix/stream/socket.rs b/kernel/src/net/socket/unix/stream/socket.rs index 41902581..93eefd2a 100644 --- a/kernel/src/net/socket/unix/stream/socket.rs +++ b/kernel/src/net/socket/unix/stream/socket.rs @@ -10,7 +10,7 @@ use super::{ listener::{get_backlog, Backlog, Listener}, }; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::{ file_handle::FileLike, utils::{InodeMode, Metadata, StatusFlags}, @@ -194,29 +194,6 @@ impl FileLike for UnixStreamSocket { Ok(()) } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - match self.state.read().as_ref() { - State::Init(init) => init.register_observer(observer, mask), - State::Listen(listen) => listen.register_observer(observer, mask), - State::Connected(connected) => connected.register_observer(observer, mask), - } - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - match self.state.read().as_ref() { - State::Init(init) => init.unregister_observer(observer), - State::Listen(listen) => listen.unregister_observer(observer), - State::Connected(connected) => connected.unregister_observer(observer), - } - } - fn metadata(&self) -> Metadata { // This is a dummy implementation. // TODO: Add "SockFS" and link `UnixStreamSocket` to it. diff --git a/kernel/src/syscall/eventfd.rs b/kernel/src/syscall/eventfd.rs index 24893899..e79df51d 100644 --- a/kernel/src/syscall/eventfd.rs +++ b/kernel/src/syscall/eventfd.rs @@ -18,7 +18,7 @@ use ostd::sync::WaitQueue; use super::SyscallReturn; use crate::{ - events::{IoEvents, Observer}, + events::IoEvents, fs::{ file_handle::FileLike, file_table::{FdFlags, FileDesc}, @@ -242,22 +242,6 @@ impl FileLike for EventFile { Ok(()) } - fn register_observer( - &self, - observer: Weak>, - mask: IoEvents, - ) -> Result<()> { - self.pollee.register_observer(observer, mask); - Ok(()) - } - - fn unregister_observer( - &self, - observer: &Weak>, - ) -> Option>> { - self.pollee.unregister_observer(observer) - } - fn metadata(&self) -> Metadata { // This is a dummy implementation. // TODO: Add "anonymous inode fs" and link `EventFile` to it.