On 12/11/2019 13:55, David Sterba wrote:
> On Tue, Nov 12, 2019 at 08:41:50PM +0800, Qu Wenruo wrote:
>>
>>
>> On 2019/11/12 下午8:24, Johannes Thumshirn wrote:
>>> Now that the preparation work is done, remove the temporary BUG_ON() in
>>> close_fs_devices() and return an error instead.
>>>
>>> Signed-off-by: Johannes Thumshirn <jthumshirn@xxxxxxx>
>>> ---
>>> fs/btrfs/volumes.c | 7 ++++++-
>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
>>> index be1fd935edf7..844333b96075 100644
>>> --- a/fs/btrfs/volumes.c
>>> +++ b/fs/btrfs/volumes.c
>>> @@ -1128,7 +1128,12 @@ static int close_fs_devices(struct btrfs_fs_devices *fs_devices)
>>> mutex_lock(&fs_devices->device_list_mutex);
>>> list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list) {
>>> ret = btrfs_close_one_device(device);
>>> - BUG_ON(ret); /* -ENOMEM */
>>> + if (ret) {
>>> + mutex_unlock(&fs_devices->device_list_mutex);
>>> + return ret;
>>> + }
>>> + fs_devices->opened--;
>>> + fs_devices->seeding--;
>>
>> This seeding-- doesn't look safe to me.
>
> Yeah, same here, it could be correct in the sense that it's 1 -> 0
> exactly once, but otherwise its a bool, and handled in a special way.
Yeah it looks like an overlook on my side, I'll correct it in the next
revision.
--
Johannes Thumshirn SUSE Labs Filesystems
jthumshirn@xxxxxxx +49 911 74053 689
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5
90409 Nürnberg
Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850