tape: lock media_catalog file to to get a consistent view with load_catalog
This commit is contained in:
parent
0d5e990a62
commit
7116a2d9da
@ -231,7 +231,12 @@ impl MediaCatalog {
|
|||||||
pending: Vec::new(),
|
pending: Vec::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let (found_magic_number, _) = me.load_catalog(&mut file, media_id.media_set_label.as_ref())?;
|
// Note: lock file, to get a consistent view with load_catalog
|
||||||
|
nix::fcntl::flock(file.as_raw_fd(), nix::fcntl::FlockArg::LockExclusive)?;
|
||||||
|
let result = me.load_catalog(&mut file, media_id.media_set_label.as_ref());
|
||||||
|
nix::fcntl::flock(file.as_raw_fd(), nix::fcntl::FlockArg::Unlock)?;
|
||||||
|
|
||||||
|
let (found_magic_number, _) = result?;
|
||||||
|
|
||||||
if !found_magic_number {
|
if !found_magic_number {
|
||||||
me.pending.extend(&Self::PROXMOX_BACKUP_MEDIA_CATALOG_MAGIC_1_1);
|
me.pending.extend(&Self::PROXMOX_BACKUP_MEDIA_CATALOG_MAGIC_1_1);
|
||||||
@ -372,9 +377,18 @@ impl MediaCatalog {
|
|||||||
|
|
||||||
match self.file {
|
match self.file {
|
||||||
Some(ref mut file) => {
|
Some(ref mut file) => {
|
||||||
file.write_all(&self.pending)?;
|
let pending = &self.pending;
|
||||||
|
// Note: lock file, to get a consistent view with load_catalog
|
||||||
|
nix::fcntl::flock(file.as_raw_fd(), nix::fcntl::FlockArg::LockExclusive)?;
|
||||||
|
let result: Result<(), Error> = proxmox::try_block!({
|
||||||
|
file.write_all(pending)?;
|
||||||
file.flush()?;
|
file.flush()?;
|
||||||
file.sync_data()?;
|
file.sync_data()?;
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
nix::fcntl::flock(file.as_raw_fd(), nix::fcntl::FlockArg::Unlock)?;
|
||||||
|
|
||||||
|
result?;
|
||||||
}
|
}
|
||||||
None => bail!("media catalog not writable (opened read only)"),
|
None => bail!("media catalog not writable (opened read only)"),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user