[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