On Fri, 01 Feb 2013 09:31:33 +0900, Tsutomu Itoh wrote:
> Hi,
>
> On 2013/01/31 16:58, Miao Xie wrote:
>> On wed, 30 Jan 2013 23:55:34 -0600, Eric Sandeen wrote:
>>> if you move the fail_block_groups: target above the comment, does that fix it?
>>> (although I don't know yet what started IO . . . )
>>>
>>> like this:
>>>
>>> From: Eric Sandeen <sandeen@xxxxxxxxxx>
>>>
>>> Make sure that we are always done with the btree_inode's mapping
>>> before we shut down the worker threads in open_ctree() error
>>> cases.
>>
>>
>> I reviewed your patch again, and found it just fix the above problem, it still
>> have similar problems which are not fixed.
>>
>> How about this one?
>
> Thanks Eric and Miao.
> But I can not reproduce this problem, yet.
> ('Btrfs: too many missing devices, writeable mount is not allowed' messages was
> displayed, but not panic)
> So, I can not test your patch, sorry.
>
> Can you please explain similar problems, Miao?
Before missing device check, there are several places where we read the metadata,
such as reading chunk tree root, btrfs_read_chunk_tree, those functions may fail
after submit a bio. If we don't wait until the bio end, and just stop the workers,
the same problem will happen.
(invalidate_inode_pages2() will wait until the bio end, because it need lock the pages
which are going to be invalidated, and the page is locked if it is under disk read IO)
Thanks
Miao
>
> Thanks,
> Tsutomu
>
>>
>> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
>> index 0c31d07..d8fd711 100644
>> --- a/fs/btrfs/disk-io.c
>> +++ b/fs/btrfs/disk-io.c
>> @@ -2728,13 +2728,13 @@ fail_cleaner:
>> * kthreads
>> */
>> filemap_write_and_wait(fs_info->btree_inode->i_mapping);
>> - invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
>>
>> fail_block_groups:
>> btrfs_free_block_groups(fs_info);
>>
>> fail_tree_roots:
>> free_root_pointers(fs_info, 1);
>> + invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
>>
>> fail_sb_buffer:
>> btrfs_stop_workers(&fs_info->generic_worker);
>> @@ -2755,7 +2755,6 @@ fail_alloc:
>> fail_iput:
>> btrfs_mapping_tree_free(&fs_info->mapping_tree);
>>
>> - invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
>> iput(fs_info->btree_inode);
>> fail_bdi:
>> bdi_destroy(&fs_info->bdi);
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html