Skip to content

Commit 60f5021

Browse files
committed
Update the free cluster count when unmounting.
Also decrement the free cluster count when allocating a cluster.
1 parent 7ed6189 commit 60f5021

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

src/fat/volume.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,7 @@ impl FatVolume {
10421042
Err(e) => return Err(e),
10431043
};
10441044
debug!("Next free cluster is {:?}", self.next_free_cluster);
1045+
// Record that we've allocated a cluster
10451046
if let Some(ref mut number_free_cluster) = self.free_clusters_count {
10461047
*number_free_cluster -= 1;
10471048
};

src/volume_mgr.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ where
334334
/// You can't close it if there are any files or directories open on it.
335335
pub fn close_volume(&self, volume: RawVolume) -> Result<(), Error<D::Error>> {
336336
let mut data = self.data.try_borrow_mut().map_err(|_| Error::LockError)?;
337+
let data = data.deref_mut();
337338

338339
for f in data.open_files.iter() {
339340
if f.raw_volume == volume {
@@ -349,6 +350,12 @@ where
349350

350351
let volume_idx = data.get_volume_by_id(volume)?;
351352

353+
match &mut data.open_volumes[volume_idx].volume_type {
354+
VolumeType::Fat(fat) => {
355+
fat.update_info_sector(&mut data.block_cache)?;
356+
}
357+
}
358+
352359
data.open_volumes.swap_remove(volume_idx);
353360

354361
Ok(())

0 commit comments

Comments
 (0)