[pbs-devel] [PATCH proxmox-backup 3/6] verify: never hold mutex lock in async scope on corrupt chunk rename

Fabian Grünbichler f.gruenbichler at proxmox.com
Mon Oct 27 11:59:37 CET 2025


On October 16, 2025 3:18 pm, Christian Ebner wrote:
> Holding a mutex lock across async await boundaries is prone to
> deadlock [0]. Renaming a corrupt chunk requires however async API
> calls in case of datastores backed by S3.
> 
> Fix this by simply not hold onto the mutex lock guarding the corrupt
> chunk list during chunk verification tasks when calling the rename
> method. If the chunk is already present in this list, there will be
> no other verification task operating on that exact chunk anyways.
> 
> [0] https://docs.rs/tokio/latest/tokio/sync/struct.Mutex.html#which-kind-of-mutex-should-you-use
> 
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>

please send this one as patch #1, it fixes a bug and is independent from
the rest of the cleanup, AFAICT?

> ---
>  src/backup/verify.rs | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/src/backup/verify.rs b/src/backup/verify.rs
> index 39f36cd95..b1066f6f5 100644
> --- a/src/backup/verify.rs
> +++ b/src/backup/verify.rs
> @@ -265,8 +265,7 @@ impl VerifyWorker {
>  
>      fn add_corrupt_chunk(&self, digest: [u8; 32], errors: Arc<AtomicUsize>, message: &str) {
>          // Panic on poisoned mutex
> -        let mut corrupt_chunks = self.corrupt_chunks.lock().unwrap();
> -        corrupt_chunks.insert(digest);
> +        self.corrupt_chunks.lock().unwrap().insert(digest);
>          error!(message);
>          errors.fetch_add(1, Ordering::SeqCst);
>          match self.datastore.rename_corrupted_chunk(&digest) {
> -- 
> 2.47.3
> 
> 
> 
> _______________________________________________
> pbs-devel mailing list
> pbs-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
> 
> 
> 




More information about the pbs-devel mailing list