mirror of
https://github.com/torvalds/linux
synced 2024-09-19 18:46:35 +00:00
dm vdo indexer-volume: fix missing mutex_lock in process_entry
Must mutex_lock after dm_bufio_read, before dm_bufio_read error handling, otherwise process_entry error path will return without volume->read_threads_mutex held. This fixes potential double mutex_unlock. Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Signed-off-by: Susan LeGendre-McGhee <slegendr@redhat.com> Signed-off-by: Matthew Sakai <msakai@redhat.com>
This commit is contained in:
parent
b259c1a60c
commit
444d3f0bfd
|
@ -556,6 +556,7 @@ static int process_entry(struct volume *volume, struct queued_read *entry)
|
||||||
|
|
||||||
mutex_unlock(&volume->read_threads_mutex);
|
mutex_unlock(&volume->read_threads_mutex);
|
||||||
page_data = dm_bufio_read(volume->client, page_number, &page->buffer);
|
page_data = dm_bufio_read(volume->client, page_number, &page->buffer);
|
||||||
|
mutex_lock(&volume->read_threads_mutex);
|
||||||
if (IS_ERR(page_data)) {
|
if (IS_ERR(page_data)) {
|
||||||
result = -PTR_ERR(page_data);
|
result = -PTR_ERR(page_data);
|
||||||
uds_log_warning_strerror(result,
|
uds_log_warning_strerror(result,
|
||||||
|
@ -564,7 +565,6 @@ static int process_entry(struct volume *volume, struct queued_read *entry)
|
||||||
cancel_page_in_cache(&volume->page_cache, page_number, page);
|
cancel_page_in_cache(&volume->page_cache, page_number, page);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
mutex_lock(&volume->read_threads_mutex);
|
|
||||||
|
|
||||||
if (entry->invalid) {
|
if (entry->invalid) {
|
||||||
uds_log_warning("Page %u invalidated after read", page_number);
|
uds_log_warning("Page %u invalidated after read", page_number);
|
||||||
|
|
Loading…
Reference in a new issue