[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 02/13] block-copy: Fix missing graph lock
|
From: |
Kevin Wolf |
|
Subject: |
[PULL 02/13] block-copy: Fix missing graph lock |
|
Date: |
Mon, 5 Aug 2024 23:08:40 +0200 |
The graph lock needs to be held when calling bdrv_co_pdiscard(). Fix
block_copy_task_entry() to take it for the call.
WITH_GRAPH_RDLOCK_GUARD() was implemented in a weak way because of
limitations in clang's Thread Safety Analysis at the time, so that it
only asserts that the lock is held (which allows calling functions that
require the lock), but we never deal with the unlocking (so even after
the scope of the guard, the compiler assumes that the lock is still
held). This is why the compiler didn't catch this locking error.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20240627181245.281403-2-kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/block-copy.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/block/block-copy.c b/block/block-copy.c
index 7e3b378528..cc618e4561 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -595,7 +595,9 @@ static coroutine_fn int block_copy_task_entry(AioTask *task)
if (s->discard_source && ret == 0) {
int64_t nbytes =
MIN(t->req.offset + t->req.bytes, s->len) - t->req.offset;
- bdrv_co_pdiscard(s->source, t->req.offset, nbytes);
+ WITH_GRAPH_RDLOCK_GUARD() {
+ bdrv_co_pdiscard(s->source, t->req.offset, nbytes);
+ }
}
return ret;
--
2.45.2
- [PULL 00/13] Block layer patches, Kevin Wolf, 2024/08/05
- [PULL 01/13] qapi-block-core: Clean up blockdev-snapshot-internal-sync doc, Kevin Wolf, 2024/08/05
- [PULL 02/13] block-copy: Fix missing graph lock,
Kevin Wolf <=
- [PULL 05/13] scsi-block: Don't skip callback for sgio error status/driver_status, Kevin Wolf, 2024/08/05
- [PULL 06/13] scsi-disk: Add warning comments that host_status errors take a shortcut, Kevin Wolf, 2024/08/05
- [PULL 03/13] block/graph-lock: Make WITH_GRAPH_RDLOCK_GUARD() fully checked, Kevin Wolf, 2024/08/05
- [PULL 04/13] scsi-disk: Use positive return value for status in dma_readv/writev, Kevin Wolf, 2024/08/05
- [PULL 08/13] vvfat: Fix bug in writing to middle of file, Kevin Wolf, 2024/08/05
- [PULL 07/13] scsi-disk: Always report RESERVATION_CONFLICT to guest, Kevin Wolf, 2024/08/05
- [PULL 10/13] vvfat: Fix wrong checks for cluster mappings invariant, Kevin Wolf, 2024/08/05
- [PULL 09/13] vvfat: Fix usage of `info.file.offset`, Kevin Wolf, 2024/08/05
- [PULL 13/13] iotests/024: exclude 'backing file format' field from the output, Kevin Wolf, 2024/08/05
- [PULL 11/13] vvfat: Fix reading files with non-continuous clusters, Kevin Wolf, 2024/08/05