Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8328233ybl; Thu, 16 Jan 2020 14:43:31 -0800 (PST) X-Google-Smtp-Source: APXvYqzfQ+wPUdP+R1Cuc2D4Q2PpC9HERtyopT7RkLMOOkS134ZmlrvPSvmKGQ+jnIoYIf8+IXM+ X-Received: by 2002:a9d:3b23:: with SMTP id z32mr3863854otb.159.1579214611524; Thu, 16 Jan 2020 14:43:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579214611; cv=none; d=google.com; s=arc-20160816; b=WIe5AyN8JpUrKxcdfZJZFfct4dYjchEw6nqn0f1QdwbVJ/KnCNRgo6HSd84nwwGVmh eZcGkv+EVu5qYcS1ZO8AsI+DJpwh2+85rI6l417xJSUL0+RnLNUNoPPj3kQFpTdX7mJ7 rDSJerRdxp8Km5OeMzmuScuqGD/9Cehki03ukHptMOfOg/CyrFp3nnDh3gVkwOLnePmP 6R21gYjhTkZuJ87SKX9eFE/l+nmDGBfrUWmnAncy5KQW4/O7MVt0pnWRV2O6abEbUp5h Y7hVxQr0xCCPn8LYJXOnGyy4tCDKT7aXOKDt77bTVyrai61iyukS1Nwnkw2p6YhKxCTz BXlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lf46t7PKq2kdnV6CEi3Kk7Dz7soP8y+vpVBZ5pr7NQE=; b=IB873K+f2l5+oBgeNUMEV4dzmYYo7+NAfIh7f5xoXRr9VEjA76U9ZLqhUjbVQyKrnA A59BB66XKR8gL3lkOm5VnYePb6DyvaGO6+j9BZa9cWzz5OEf6vWlg3pz4l6bO1NQyRMs XwSCMBIPH2m+Uu0uTGXVq3NkxzdXI6Zu4ReTMH96pKBNRK51AzZ0dtmBjej/qvLL64Id cQ74gEdi6h0nWHUNlQlpXSYoBfnSVxQTUC1fRw8tt/SpPuFvkqXEMeooF7ZmjDOOH9p0 w3VTXArWZdurxmhKG6Hngj+q22gUVktk+5HKdfQWxvxm8oUB15+ken6YZAz3zw7DG0Xu C69g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HaxJGcbI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k14si12454695oig.69.2020.01.16.14.43.18; Thu, 16 Jan 2020 14:43:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HaxJGcbI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394860AbgAPSEb (ORCPT + 99 others); Thu, 16 Jan 2020 13:04:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:57742 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732417AbgAPRkc (ORCPT ); Thu, 16 Jan 2020 12:40:32 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1553024706; Thu, 16 Jan 2020 17:40:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196432; bh=/hDmGflEhq6AeFLHnnAF4uDxCRj0GD0kkhCevuf4HuE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HaxJGcbIKrgc1GSu82/B0dIORT5Rqgn/joSAWqUlOeJRqgQ5HnxjMKDxsDxrcLaHE eBWnqYdBRbNxQyWN0HoZ54gJvNBq9EaPbm55eKHGdZFaXK64Ry6xmyx8I7cv+ceTGM L7VxF8AtOWhpWqI33Lsl1ZBWRy9Bqn9LYOXQTwc8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Filipe Manana , Nikolay Borisov , David Sterba , Sasha Levin , linux-btrfs@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 198/251] Btrfs: fix hang when loading existing inode cache off disk Date: Thu, 16 Jan 2020 12:35:47 -0500 Message-Id: <20200116173641.22137-158-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Filipe Manana [ Upstream commit 7764d56baa844d7f6206394f21a0e8c1f303c476 ] If we are able to load an existing inode cache off disk, we set the state of the cache to BTRFS_CACHE_FINISHED, but we don't wake up any one waiting for the cache to be available. This means that anyone waiting for the cache to be available, waiting on the condition that either its state is BTRFS_CACHE_FINISHED or its available free space is greather than zero, can hang forever. This could be observed running fstests with MOUNT_OPTIONS="-o inode_cache", in particular test case generic/161 triggered it very frequently for me, producing a trace like the following: [63795.739712] BTRFS info (device sdc): enabling inode map caching [63795.739714] BTRFS info (device sdc): disk space caching is enabled [63795.739716] BTRFS info (device sdc): has skinny extents [64036.653886] INFO: task btrfs-transacti:3917 blocked for more than 120 seconds. [64036.654079] Not tainted 5.2.0-rc4-btrfs-next-50 #1 [64036.654143] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [64036.654232] btrfs-transacti D 0 3917 2 0x80004000 [64036.654239] Call Trace: [64036.654258] ? __schedule+0x3ae/0x7b0 [64036.654271] schedule+0x3a/0xb0 [64036.654325] btrfs_commit_transaction+0x978/0xae0 [btrfs] [64036.654339] ? remove_wait_queue+0x60/0x60 [64036.654395] transaction_kthread+0x146/0x180 [btrfs] [64036.654450] ? btrfs_cleanup_transaction+0x620/0x620 [btrfs] [64036.654456] kthread+0x103/0x140 [64036.654464] ? kthread_create_worker_on_cpu+0x70/0x70 [64036.654476] ret_from_fork+0x3a/0x50 [64036.654504] INFO: task xfs_io:3919 blocked for more than 120 seconds. [64036.654568] Not tainted 5.2.0-rc4-btrfs-next-50 #1 [64036.654617] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [64036.654685] xfs_io D 0 3919 3633 0x00000000 [64036.654691] Call Trace: [64036.654703] ? __schedule+0x3ae/0x7b0 [64036.654716] schedule+0x3a/0xb0 [64036.654756] btrfs_find_free_ino+0xa9/0x120 [btrfs] [64036.654764] ? remove_wait_queue+0x60/0x60 [64036.654809] btrfs_create+0x72/0x1f0 [btrfs] [64036.654822] lookup_open+0x6bc/0x790 [64036.654849] path_openat+0x3bc/0xc00 [64036.654854] ? __lock_acquire+0x331/0x1cb0 [64036.654869] do_filp_open+0x99/0x110 [64036.654884] ? __alloc_fd+0xee/0x200 [64036.654895] ? do_raw_spin_unlock+0x49/0xc0 [64036.654909] ? do_sys_open+0x132/0x220 [64036.654913] do_sys_open+0x132/0x220 [64036.654926] do_syscall_64+0x60/0x1d0 [64036.654933] entry_SYSCALL_64_after_hwframe+0x49/0xbe Fix this by adding a wake_up() call right after setting the cache state to BTRFS_CACHE_FINISHED, at start_caching(), when we are able to load the cache from disk. Fixes: 82d5902d9c681b ("Btrfs: Support reading/writing on disk free ino cache") Reviewed-by: Nikolay Borisov Signed-off-by: Filipe Manana Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- 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 d27014b8bf72..075b59516c8c 100644 --- a/fs/btrfs/inode-map.c +++ b/fs/btrfs/inode-map.c @@ -159,6 +159,7 @@ static void start_caching(struct btrfs_root *root) spin_lock(&root->ino_cache_lock); root->ino_cache_state = BTRFS_CACHE_FINISHED; spin_unlock(&root->ino_cache_lock); + wake_up(&root->ino_cache_wait); return; } -- 2.20.1