diff options
Diffstat (limited to 'src/ops/rw.rs')
| -rw-r--r-- | src/ops/rw.rs | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/src/ops/rw.rs b/src/ops/rw.rs index cf2e286..4f5bad4 100644 --- a/src/ops/rw.rs +++ b/src/ops/rw.rs @@ -1,14 +1,18 @@ use super::{ - traits::{ReplyGather, ReplyOk, RequestData, RequestHandle, RequestOffset, RequestSize}, + traits::{ + ReplyGather, ReplyOk, RequestData, RequestFlags, RequestHandle, RequestOffset, RequestSize, + }, FromRequest, }; -use crate::{private_trait::Sealed, proto, Done, Operation, Reply, Request}; +use crate::{io::FsyncFlags, private_trait::Sealed, proto, Done, Operation, Reply, Request}; pub enum Readlink {} pub enum Read {} pub enum Write {} +pub enum Fsync {} pub enum Flush {} +pub enum Fsyncdir {} pub struct WriteState { size: u32, @@ -21,7 +25,9 @@ pub trait ReplyAll<'o>: Operation<'o> { impl Sealed for Readlink {} impl Sealed for Read {} impl Sealed for Write {} +impl Sealed for Fsync {} impl Sealed for Flush {} +impl Sealed for Fsyncdir {} impl<'o> Operation<'o> for Readlink { type RequestBody = (); @@ -38,11 +44,21 @@ impl<'o> Operation<'o> for Write { type ReplyState = WriteState; } +impl<'o> Operation<'o> for Fsync { + type RequestBody = &'o proto::FsyncIn; + type ReplyState = (); +} + impl<'o> Operation<'o> for Flush { type RequestBody = &'o proto::FlushIn; type ReplyState = (); } +impl<'o> Operation<'o> for Fsyncdir { + type RequestBody = &'o proto::FsyncdirIn; + type ReplyState = (); +} + impl<'o> ReplyGather<'o> for Readlink {} impl<'o> RequestHandle<'o> for Read { @@ -93,6 +109,22 @@ impl<'o> ReplyAll<'o> for Write { } } +impl<'o> RequestHandle<'o> for Fsync { + fn handle(request: &Request<'o, Self>) -> u64 { + request.body.fh + } +} + +impl<'o> RequestFlags<'o> for Fsync { + type Flags = FsyncFlags; + + fn flags(request: &Request<'o, Self>) -> Self::Flags { + FsyncFlags::from_bits_truncate(request.body.fsync_flags) + } +} + +impl<'o> ReplyOk<'o> for Fsync {} + impl<'o> RequestHandle<'o> for Flush { fn handle(request: &Request<'o, Self>) -> u64 { request.body.fh @@ -101,6 +133,22 @@ impl<'o> RequestHandle<'o> for Flush { impl<'o> ReplyOk<'o> for Flush {} +impl<'o> RequestHandle<'o> for Fsyncdir { + fn handle(request: &Request<'o, Self>) -> u64 { + request.body.fsync_in.fh + } +} + +impl<'o> RequestFlags<'o> for Fsyncdir { + type Flags = FsyncFlags; + + fn flags(request: &Request<'o, Self>) -> Self::Flags { + FsyncFlags::from_bits_truncate(request.body.fsync_in.fsync_flags) + } +} + +impl<'o> ReplyOk<'o> for Fsyncdir {} + impl<'o> FromRequest<'o, Write> for WriteState { fn from_request(request: &Request<'o, Write>) -> Self { let (body, data) = request.body; |
