diff options
Diffstat (limited to 'src/ops')
| -rw-r--r-- | src/ops/mod.rs | 2 | ||||
| -rw-r--r-- | src/ops/rw.rs | 52 |
2 files changed, 51 insertions, 3 deletions
diff --git a/src/ops/mod.rs b/src/ops/mod.rs index bc486b1..de13ac6 100644 --- a/src/ops/mod.rs +++ b/src/ops/mod.rs @@ -15,7 +15,7 @@ pub use dir::{BufferedReaddir, Lookup, Readdir}; pub use entry::{Forget, Getattr, Link, Mkdir, Rmdir, Symlink, Unlink}; pub use global::{Init, Statfs}; pub use open::{Access, Open, Opendir, Release, Releasedir}; -pub use rw::{Flush, Read, Readlink, Write}; +pub use rw::{Flush, Fsync, Fsyncdir, Read, Readlink, Write}; pub use xattr::{Getxattr, Listxattr, Removexattr, Setxattr}; mod dir; 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; |
