[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v9 19/21] blockjob: protect iostatus field in BlockJob struct
From: |
Emanuele Giuseppe Esposito |
Subject: |
Re: [PATCH v9 19/21] blockjob: protect iostatus field in BlockJob struct |
Date: |
Tue, 19 Jul 2022 15:07:31 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
Am 11/07/2022 um 16:51 schrieb Vladimir Sementsov-Ogievskiy:
> On 7/6/22 23:15, Emanuele Giuseppe Esposito wrote:
>> iostatus is the only field (together with .job) that needs
>> protection using the job mutex.
>>
>> It is set in the main loop (GLOBAL_STATE functions) but read
>> in I/O code (block_job_error_action).
>>
>> In order to protect it, change block_job_iostatus_set_err
>> to block_job_iostatus_set_err_locked(), always called under
>> job lock.
>>
>> Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
>
> Seems, that (and previous) patch should go before 15.
Why?
>
>> ---
>> blockjob.c | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/blockjob.c b/blockjob.c
>> index a2559b97a7..893c8ff08e 100644
>> --- a/blockjob.c
>> +++ b/blockjob.c
>> @@ -367,7 +367,8 @@ BlockJobInfo *block_job_query(BlockJob *job, Error
>> **errp)
>> return block_job_query_locked(job, errp);
>> }
>> -static void block_job_iostatus_set_err(BlockJob *job, int error)
>> +/* Called with job lock held */
>> +static void block_job_iostatus_set_err_locked(BlockJob *job, int error)
>> {
>> if (job->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
>> job->iostatus = error == ENOSPC ?
>> BLOCK_DEVICE_IO_STATUS_NOSPACE :
>> @@ -586,8 +587,8 @@ BlockErrorAction block_job_error_action(BlockJob
>> *job, BlockdevOnError on_err,
>> */
>> job->job.user_paused = true;
>> }
>> + block_job_iostatus_set_err_locked(job, error);
>> }
>> - block_job_iostatus_set_err(job, error);
>> }
>> return action;
>> }
>
>
- Re: [PATCH v9 15/21] job.c: enable job lock/unlock and remove Aiocontext locks, (continued)
- [PATCH v9 13/21] job: detect change of aiocontext within job coroutine, Emanuele Giuseppe Esposito, 2022/07/06
- [PATCH v9 12/21] commit and mirror: create new nodes using bdrv_get_aio_context, and not the job aiocontext, Emanuele Giuseppe Esposito, 2022/07/06
- [PATCH v9 03/21] job.c: API functions not used outside should be static, Emanuele Giuseppe Esposito, 2022/07/06
- [PATCH v9 10/21] block/mirror.c: use of job helpers in drivers to avoid TOC/TOU, Emanuele Giuseppe Esposito, 2022/07/06
- [PATCH v9 19/21] blockjob: protect iostatus field in BlockJob struct, Emanuele Giuseppe Esposito, 2022/07/06
[PATCH v9 07/21] blockjob: introduce block_job _locked() APIs, Emanuele Giuseppe Esposito, 2022/07/06
[PATCH v9 01/21] job.c: make job_mutex and job_lock/unlock() public, Emanuele Giuseppe Esposito, 2022/07/06
[PATCH v9 20/21] blockjob: remove unused functions, Emanuele Giuseppe Esposito, 2022/07/06
[PATCH v9 04/21] aio-wait.h: introduce AIO_WAIT_WHILE_UNLOCKED, Emanuele Giuseppe Esposito, 2022/07/06
[PATCH v9 08/21] jobs: add job lock in find_* functions, Emanuele Giuseppe Esposito, 2022/07/06