From: Darrick J. Wong Date: Wed, 20 Dec 2023 16:53:46 +0000 (-0800) Subject: xfs_scrub: handle spurious wakeups in scan_fs_tree X-Git-Tag: v6.6.0~5^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=817d1b67b6da0a1e2ac94c73ac12fcdb10be1d1e;p=xfsprogs-dev.git xfs_scrub: handle spurious wakeups in scan_fs_tree Coverity reminded me that the pthread_cond_wait can wake up and return without the predicate variable (sft.nr_dirs > 0) actually changing. Therefore, one has to retest the condition after each wakeup. Coverity-id: 1554280 Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- diff --git a/scrub/vfs.c b/scrub/vfs.c index 577eb6dc3..3c1825a75 100644 --- a/scrub/vfs.c +++ b/scrub/vfs.c @@ -263,7 +263,7 @@ scan_fs_tree( * about to tear everything down. */ pthread_mutex_lock(&sft.lock); - if (sft.nr_dirs) + while (sft.nr_dirs > 0) pthread_cond_wait(&sft.wakeup, &sft.lock); assert(sft.nr_dirs == 0); pthread_mutex_unlock(&sft.lock);