On 4.07.19 г. 18:25 ч., fdmanana@xxxxxxxxxx wrote:
> From: Filipe Manana <fdmanana@xxxxxxxx>
>
> If we need to start an inode caching thread, because none currently exists
> on disk, we can wake up all waiters as soon as we mark the range starting
> at root's highest objectid + 1 and ending at BTRFS_LAST_FREE_OBJECTID as
> free, so that they don't need to wait for the caching thread to start and
> do some progress. We follow the same approach within the caching thread,
> since as soon as it finds a free range and marks it as free space in the
> cache, it wakes up all waiters. So improve this by adding such a wakeup
> call after marking that initial range as free space.
>
> Fixes: a47d6b70e28040 ("Btrfs: setup free ino caching in a more asynchronous way")
> Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx>
Reviewed-by: Nikolay Borisov <nborisov@xxxxxxxx>
> ---
> fs/btrfs/inode-map.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
> index 4820e05ea6bd..cb107d168019 100644
> --- a/fs/btrfs/inode-map.c
> +++ b/fs/btrfs/inode-map.c
> @@ -175,6 +175,7 @@ static void start_caching(struct btrfs_root *root)
> if (!ret && objectid <= BTRFS_LAST_FREE_OBJECTID) {
> __btrfs_add_free_space(fs_info, ctl, objectid,
> BTRFS_LAST_FREE_OBJECTID - objectid + 1);
> + wake_up(&root->ino_cache_wait);
> }
>
> tsk = kthread_run(caching_kthread, root, "btrfs-ino-cache-%llu",
>