diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-01-06 21:45:43 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-01-06 21:45:43 -0600 |
| commit | 0f45ef90df6d036aec2077b702fdf465f61c16d6 (patch) | |
| tree | 0abaef4cf55aa8aecc3ae985858bf870f6836e01 /src/ops/inode.rs | |
| parent | f0e7c0997553ab356d5aa683d5322ab2de575188 (diff) | |
Implement Bmap
Diffstat (limited to '')
| -rw-r--r-- | src/ops/inode.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ops/inode.rs b/src/ops/inode.rs index fa5d461..8f155e6 100644 --- a/src/ops/inode.rs +++ b/src/ops/inode.rs @@ -3,15 +3,25 @@ use crate::{io::Stat, private_trait::Sealed, proto, Done, Ino, Operation, Reply, pub enum Forget {} pub enum Getattr {} +pub enum Bmap {} pub trait RequestForget<'o>: Operation<'o> { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a>; } +pub trait RequestBlock<'o>: Operation<'o> { + fn block(request: &Request<'o, Self>) -> u64; + fn block_size(request: &Request<'o, Self>) -> u32; +} + pub trait ReplyStat<'o>: Operation<'o> { fn stat(reply: Reply<'o, Self>, inode: &impl Stat) -> Done<'o>; } +pub trait ReplyBlock<'o>: Operation<'o> { + fn block(reply: Reply<'o, Self>, block: u64) -> Done<'o>; +} + pub enum ForgetList<'a> { Single(Option<(Ino, u64)>), Batch(std::slice::Iter<'a, proto::ForgetOne>), @@ -19,6 +29,7 @@ pub enum ForgetList<'a> { impl Sealed for Forget {} impl Sealed for Getattr {} +impl Sealed for Bmap {} impl<'o> Operation<'o> for Forget { type RequestBody = proto::OpcodeSelect< @@ -35,6 +46,11 @@ impl<'o> Operation<'o> for Getattr { type ReplyState = (); } +impl<'o> Operation<'o> for Bmap { + type RequestBody = &'o proto::BmapIn; + type ReplyState = (); +} + impl<'o> RequestForget<'o> for Forget { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a> { use {proto::OpcodeSelect::*, ForgetList::*}; @@ -86,3 +102,19 @@ impl<'o> ReplyStat<'o> for Getattr { }) } } + +impl<'o> RequestBlock<'o> for Bmap { + fn block(request: &Request<'o, Self>) -> u64 { + request.body.block + } + + fn block_size(request: &Request<'o, Self>) -> u32 { + request.body.block_size + } +} + +impl<'o> ReplyBlock<'o> for Bmap { + fn block(reply: Reply<'o, Self>, block: u64) -> Done<'o> { + reply.single(&proto::BmapOut { block }) + } +} |
