[pbs-devel] [PATCH proxmox-backup 2/4] client: pxar: skip directory entries on stale file handle
Christian Ebner
c.ebner at proxmox.com
Tue Nov 5 15:01:51 CET 2024
Skip over the entries when a stale file handle is encountered during
generation of the entry list of a directory entry.
This will lead to the directory not being backed up if the directory
itself was invalidated, as then reading all child entries will fail
also, or the directory is backed up without entries which have been
invalidated.
Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
pbs-client/src/pxar/create.rs | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
index a2b9b3e30..8685e8d42 100644
--- a/pbs-client/src/pxar/create.rs
+++ b/pbs-client/src/pxar/create.rs
@@ -638,15 +638,30 @@ impl Archiver {
Ok(Some(MatchType::Exclude)) => continue,
Ok(_) => (),
Err(err) if err.not_found() => continue,
+ Err(Errno::ESTALE) => {
+ log::warn!("stale file handle, skip {full_path:?}");
+ continue;
+ }
Err(err) => {
return Err(err).with_context(|| format!("stat failed on {full_path:?}"))
}
}
- let stat = stat_results
- .map(Ok)
- .unwrap_or_else(get_file_mode)
- .with_context(|| format!("stat failed on {full_path:?}"))?;
+ let stat = match stat_results {
+ Some(mode) => mode,
+ None => match get_file_mode() {
+ Ok(mode) => mode,
+ Err(Errno::ESTALE) => {
+ log::warn!("stale file handle, skip {full_path:?}");
+ continue;
+ }
+ Err(err) => {
+ return Err(
+ Error::from(err).context(format!("stat failed on {full_path:?}"))
+ )
+ }
+ },
+ };
self.entry_counter += 1;
if self.entry_counter > self.entry_limit {
--
2.39.5
More information about the pbs-devel
mailing list