[PATCH] erofs-utils: lib/diskbuf: fix MT data race in erofs_diskbuf_reserve()
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Apr 2 16:53:41 AEDT 2026
On 2026/4/2 13:04, Utkal Singh wrote:
> Two threads calling erofs_diskbuf_reserve() concurrently can both
> observe strm->locked == false and both advance tailoffset, silently
How?
> producing an incorrect offset in the output image. Add a
> pthread_mutex_t to serialize access.
>
> The commit path also gains the missing strm->locked = false reset;
> without it, locked was set once and never cleared, making the flag
> a latch rather than a guard.
>
> libpthread is already a build requirement (-lpthread in
> lib/Makefile.am) and pthread_mutex_t is used identically in
> lib/workqueue.c and lib/compress.c, so no build system changes
> are required.
>
> Fixes: 13f7268 ("erofs-utils: lib: introduce multi-threaded I/O framework")
> Signed-off-by: Utkal Singh <singhutkal015 at gmail.com>
> ---
> lib/diskbuf.c | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/lib/diskbuf.c b/lib/diskbuf.c
> index 0bf42da..ccfeaa4 100644
> --- a/lib/diskbuf.c
> +++ b/lib/diskbuf.c
> @@ -2,6 +2,7 @@
> #include "erofs/diskbuf.h"
> #include "erofs/internal.h"
> #include "erofs/print.h"
> +#include <pthread.h>
> #include <stdio.h>
> #include <errno.h>
> #include <sys/stat.h>
> @@ -15,6 +16,7 @@ static struct erofs_diskbufstrm {
> int fd;
> unsigned int alignsize;
> bool locked;
> + pthread_mutex_t lock;
Do you ever notice erofs_mutex_t and include/erofs/lock.h?
By the way, I sincerely hope you pay less attention
of this project since I've told you the reasons in
emails before.
It won't help with your gsoc proposal. Thanks for
your efforts and contributions to the EROFS project.
Thanks,
Gao Xiang
More information about the Linux-erofs
mailing list