Skip to content

Commit 310784e

Browse files
jiangliubergwolf
authored andcommitted
ptfs: rename InodeAltKey to InodeIds
Rename InodeAltKey to InodeIds and move it into inode_store.rs Signed-off-by: Jiang Liu <[email protected]>
1 parent 6b758d2 commit 310784e

File tree

2 files changed

+93
-103
lines changed

2 files changed

+93
-103
lines changed

src/passthrough/inode_store.rs

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,32 @@ use std::collections::BTreeMap;
55
use std::sync::Arc;
66

77
use super::file_handle::FileHandle;
8-
use super::{FileOrHandle, Inode, InodeAltKey, InodeData};
8+
use super::{FileOrHandle, Inode, InodeData, InodeStat};
9+
10+
#[derive(Clone, Copy, Default, PartialOrd, Ord, PartialEq, Eq, Debug)]
11+
/// Identify an inode in `PassthroughFs` by `InodeId`.
12+
pub struct InodeId {
13+
pub ino: libc::ino64_t,
14+
pub dev: libc::dev_t,
15+
pub mnt: u64,
16+
}
17+
18+
impl InodeId {
19+
#[inline]
20+
pub(super) fn from_stat(ist: &InodeStat) -> Self {
21+
let st = ist.get_stat();
22+
InodeId {
23+
ino: st.st_ino,
24+
dev: st.st_dev,
25+
mnt: ist.get_mnt_id(),
26+
}
27+
}
28+
}
929

1030
#[derive(Default)]
1131
pub struct InodeStore {
1232
data: BTreeMap<Inode, Arc<InodeData>>,
13-
by_ids: BTreeMap<InodeAltKey, Inode>,
33+
by_id: BTreeMap<InodeId, Inode>,
1434
by_handle: BTreeMap<Arc<FileHandle>, Inode>,
1535
}
1636

@@ -20,7 +40,7 @@ impl InodeStore {
2040
/// The caller needs to ensure that no inode with the same key exists, otherwise the old inode
2141
/// will get lost.
2242
pub fn insert(&mut self, data: Arc<InodeData>) {
23-
self.by_ids.insert(data.altkey, data.inode);
43+
self.by_id.insert(data.id, data.inode);
2444
if let FileOrHandle::Handle(handle) = &data.file_or_handle {
2545
self.by_handle.insert(handle.clone(), data.inode);
2646
}
@@ -31,7 +51,7 @@ impl InodeStore {
3151
pub fn remove(&mut self, inode: &Inode, remove_data_only: bool) -> Option<Arc<InodeData>> {
3252
let data = self.data.remove(inode);
3353
if remove_data_only {
34-
// Don't remove by_ids and by_handle, we need use it to store inode
54+
// Don't remove by_id and by_handle, we need use it to store inode
3555
// record the mapping of inodes using these two structures to ensure
3656
// that the same files always use the same inode
3757
return data;
@@ -41,23 +61,23 @@ impl InodeStore {
4161
if let FileOrHandle::Handle(handle) = &data.file_or_handle {
4262
self.by_handle.remove(handle);
4363
}
44-
self.by_ids.remove(&data.altkey);
64+
self.by_id.remove(&data.id);
4565
}
4666
data
4767
}
4868

4969
pub fn clear(&mut self) {
5070
self.data.clear();
5171
self.by_handle.clear();
52-
self.by_ids.clear();
72+
self.by_id.clear();
5373
}
5474

5575
pub fn get(&self, inode: &Inode) -> Option<&Arc<InodeData>> {
5676
self.data.get(inode)
5777
}
5878

59-
pub fn get_by_ids(&self, ids: &InodeAltKey) -> Option<&Arc<InodeData>> {
60-
let inode = self.inode_by_ids(ids)?;
79+
pub fn get_by_id(&self, id: &InodeId) -> Option<&Arc<InodeData>> {
80+
let inode = self.inode_by_id(id)?;
6181
self.get(inode)
6282
}
6383

@@ -66,8 +86,8 @@ impl InodeStore {
6686
self.get(inode)
6787
}
6888

69-
pub fn inode_by_ids(&self, ids: &InodeAltKey) -> Option<&Inode> {
70-
self.by_ids.get(ids)
89+
pub fn inode_by_id(&self, id: &InodeId) -> Option<&Inode> {
90+
self.by_id.get(id)
7191
}
7292

7393
pub fn inode_by_handle(&self, handle: &FileHandle) -> Option<&Inode> {
@@ -88,7 +108,7 @@ mod test {
88108
impl PartialEq for InodeData {
89109
fn eq(&self, other: &Self) -> bool {
90110
if self.inode != other.inode
91-
|| self.altkey != other.altkey
111+
|| self.id != other.id
92112
|| self.mode != other.mode
93113
|| self.refcount.load(Ordering::Relaxed) != other.refcount.load(Ordering::Relaxed)
94114
{
@@ -142,22 +162,22 @@ mod test {
142162
stat: stat_fd(tmpfile2.as_file().as_raw_fd()).unwrap(),
143163
mnt_id: 0,
144164
};
145-
let ids1 = InodeAltKey::ids_from_stat(&inode_stat1);
146-
let ids2 = InodeAltKey::ids_from_stat(&inode_stat2);
165+
let id1 = InodeId::from_stat(&inode_stat1);
166+
let id2 = InodeId::from_stat(&inode_stat2);
147167
let file_or_handle1 = FileOrHandle::File(tmpfile1.into_file());
148168
let file_or_handle2 = FileOrHandle::File(tmpfile2.into_file());
149169
let data1 = InodeData::new(
150170
inode1,
151171
file_or_handle1,
152172
2,
153-
ids1,
173+
id1,
154174
inode_stat1.get_stat().st_mode,
155175
);
156176
let data2 = InodeData::new(
157177
inode2,
158178
file_or_handle2,
159179
2,
160-
ids2,
180+
id2,
161181
inode_stat2.get_stat().st_mode,
162182
);
163183
let data1 = Arc::new(data1);
@@ -169,39 +189,39 @@ mod test {
169189
assert!(m.get(&1).is_none());
170190

171191
// get just inserted value by key, by id, by handle
172-
assert!(m.get_by_ids(&InodeAltKey::default()).is_none());
192+
assert!(m.get_by_id(&InodeId::default()).is_none());
173193
assert!(m.get_by_handle(&FileHandle::default()).is_none());
174194
assert_eq!(m.get(&inode1).unwrap(), &data1);
175-
assert_eq!(m.get_by_ids(&ids1).unwrap(), &data1);
195+
assert_eq!(m.get_by_id(&id1).unwrap(), &data1);
176196

177197
// insert another value, and check again
178198
m.insert(data2.clone());
179199
assert!(m.get(&1).is_none());
180-
assert!(m.get_by_ids(&InodeAltKey::default()).is_none());
200+
assert!(m.get_by_id(&InodeId::default()).is_none());
181201
assert!(m.get_by_handle(&FileHandle::default()).is_none());
182202
assert_eq!(m.get(&inode1).unwrap(), &data1);
183-
assert_eq!(m.get_by_ids(&ids1).unwrap(), &data1);
203+
assert_eq!(m.get_by_id(&id1).unwrap(), &data1);
184204
assert_eq!(m.get(&inode2).unwrap(), &data2);
185-
assert_eq!(m.get_by_ids(&ids2).unwrap(), &data2);
205+
assert_eq!(m.get_by_id(&id2).unwrap(), &data2);
186206

187207
// remove non-present key
188208
assert!(m.remove(&1, false).is_none());
189209

190210
// remove present key, return its value
191211
assert_eq!(m.remove(&inode1, false).unwrap(), data1.clone());
192212
assert!(m.get(&inode1).is_none());
193-
assert!(m.get_by_ids(&ids1).is_none());
213+
assert!(m.get_by_id(&id1).is_none());
194214
assert_eq!(m.get(&inode2).unwrap(), &data2);
195-
assert_eq!(m.get_by_ids(&ids2).unwrap(), &data2);
215+
assert_eq!(m.get_by_id(&id2).unwrap(), &data2);
196216

197217
// clear the map
198218
m.clear();
199219
assert!(m.get(&1).is_none());
200-
assert!(m.get_by_ids(&InodeAltKey::default()).is_none());
220+
assert!(m.get_by_id(&InodeId::default()).is_none());
201221
assert!(m.get_by_handle(&FileHandle::default()).is_none());
202222
assert!(m.get(&inode1).is_none());
203-
assert!(m.get_by_ids(&ids1).is_none());
223+
assert!(m.get_by_id(&id1).is_none());
204224
assert!(m.get(&inode2).is_none());
205-
assert!(m.get_by_ids(&ids2).is_none());
225+
assert!(m.get_by_id(&id2).is_none());
206226
}
207227
}

0 commit comments

Comments
 (0)