Received: by 10.223.176.5 with SMTP id f5csp1026280wra; Fri, 2 Feb 2018 09:56:23 -0800 (PST) X-Google-Smtp-Source: AH8x2276GPXBylCb7to6JnoKIb/JR+Z5Pxq0Un6V8n5ICCOMY0lUeEdMNOfKFg4ZW4XuYwQzgwF3 X-Received: by 10.101.68.199 with SMTP id g7mr587994pgs.21.1517594183691; Fri, 02 Feb 2018 09:56:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517594183; cv=none; d=google.com; s=arc-20160816; b=aDX1O74Sv70MKE4Js5zOo+8M9GPvIOlnb4e+FJWnJCO9wWlK54bc/h0cbAINC82W+Q zSqakQ9PXCDKv6EYmo+fW+RuvvAOgZlzJRG3qwIcvNon/HVcqgxIbPZepD5+90HngUGw bXCCB5jvAUx0mjb5UCd91iTl2LmDKd0YwsLj8UyCiTEyTy1cndsr3hlpf3CO7OA6mgms AMaHfnc+3CdCU7xLdaECX6C3ly6ujlLvPDB8Vd4MiaE8haCSvK2VmfEJFbJ9mhRoZN/9 5RzjR+kCyGvWwLeu+qPqBrUzqdkl9xK23luptlzerGARgrhgnpIfG0d2BZ1MKCeSvs9R z0xA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=+ZX2Tgy5uw2ERv2iQE70junXds+np6t38kuLmQW6OyU=; b=rse94lBSW/T3a2/UxAaXrBH2P/A8/65sNroM9/o9rhv3hz3tNK86hJwqJ78DVQwX2d YEp05Kn2TgwtqfoLtcJrF+l6M8X8sfbgczQ/hSMA0OuaICIe0X27DthZwP4txET2ZvOb SKjBOmA9QGmXv6r2Ffk+UiH2bBdpHXFrjdQA1PdyUdZanxgpXLuVFmmu6/+1mNEwz0DB yDmBr3fGoVVMHckCX5TIThNVjN5ryuCL270BUEdxS8KbzKdYV5Jrz06qIYqueibMczC5 a1brQH51JS7vkVFW9gxQbbWkLpiesgYVFPXA4wOTmM9xyUHn6dzsOQjgmh1Xrja1+Oiy TF4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=gHT6/ugF; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z5-v6si2112079pln.677.2018.02.02.09.56.09; Fri, 02 Feb 2018 09:56:23 -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=fail header.i=@gmail.com header.s=20161025 header.b=gHT6/ugF; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753565AbeBBRy5 (ORCPT + 99 others); Fri, 2 Feb 2018 12:54:57 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:36898 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753415AbeBBRyX (ORCPT ); Fri, 2 Feb 2018 12:54:23 -0500 Received: by mail-qt0-f195.google.com with SMTP id d54so31947386qtd.4; Fri, 02 Feb 2018 09:54:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=+ZX2Tgy5uw2ERv2iQE70junXds+np6t38kuLmQW6OyU=; b=gHT6/ugFvrj3Aod70zNkn9yfHvcw9egIgELOIKhJLpQUvHAgR7uG/cwS/5/IMQKFCI UVMJ/INuMrfbCiskrUyd+baz7RemS6KEQGQomdlrfLUFVZoYOGVUlCT3/cwsYRijtVo7 kY2vMI+eIzoXJmp+fwKBMOFtqkTfH/NMOsWecsu7zMkCiTnXlK0Zvdq6rAk+K7Pu9lyE tbKo+w8wvBELgRvz/lKa3QWfxDtH91pdw8BJNRJlgz0qM64vbCBN8IXFcr6UOi+XZAqt ttlHwSwGC1ntsnZT9pZZn/9j446Pd31o6HinJGEcJ68gBpOXZuZSmoEPV/pKdbZKKUqF lX7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=+ZX2Tgy5uw2ERv2iQE70junXds+np6t38kuLmQW6OyU=; b=TuCNCV/XrY7e4LoYjRt60dN1e8OtNmheNFqn5fAILTsx4SDmvPoZA1Sn5ny5NdeBsF dQttNgKyq+wSuVbE7p25Y1PKLRvq83c6VmJoa0WNkOwDoyp1jTePmqFmInk1HmZZiHbj cplQi+tgFNfGn/Oey87J281lrRJ2E/5thjFH1RzE852TMe3UYOyCCK9l88inrYoZVcID oglMAHJKX3fl5CsX/lvNBNEWz0CfoveH9B2n4LaouOTK0YqYiEqB2YozskqPna06eU+Q fEh0eCVpD9IxkVvBbgl4jshDTPetCWxwq37Xv7+8QJmPeFQj8sH0GY+JlAyYaHpXwBY9 a6EQ== X-Gm-Message-State: AKwxytd/7lcwfc2m4aILWP+kbYfmrZh8wCCZnDpIfe99RHFznTIEgrhu jjk3JCYLKBzu1PlO0NVe9wI= X-Received: by 10.200.57.75 with SMTP id t11mr65036634qtb.325.1517594061930; Fri, 02 Feb 2018 09:54:21 -0800 (PST) Received: from localhost (dhcp-ec-8-6b-ed-7a-cf.cpe.echoes.net. [72.28.5.223]) by smtp.gmail.com with ESMTPSA id k20sm1630813qtj.72.2018.02.02.09.54.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Feb 2018 09:54:21 -0800 (PST) Date: Fri, 2 Feb 2018 09:54:14 -0800 From: Tejun Heo To: Jens Axboe , Miklos Szeredi Cc: Joshua Miller , kernel-team@fb.com, Johannes Weiner , Jan Kara , stable@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 2/2] FUSE: fix congested state leak on aborted connections Message-ID: <20180202175414.GM1121507@devbig577.frc2.facebook.com> References: <20180202175328.GL1121507@devbig577.frc2.facebook.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180202175328.GL1121507@devbig577.frc2.facebook.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If a connection gets aborted while congested, FUSE can leave nr_wb_congested[] stuck until reboot causing wait_iff_congested() to wait spuriously which can lead to severe performance degradation. The leak is caused by gating congestion state clearing with fc->connected test in request_end(). This was added way back in 2009 by 26c3679101db ("fuse: destroy bdi on umount"). While the commit description doesn't explain why the test was added, it most likely was to avoid dereferencing bdi after it got destroyed. Since then, bdi lifetime rules have changed many times and now we're always guaranteed to have access to the bdi while the superblock is alive (fc->sb). Drop fc->connected conditional to avoid leaking congestion states. Signed-off-by: Tejun Heo Reported-by: Joshua Miller Cc: Johannes Weiner Cc: Miklos Szeredi Cc: Jan Kara Cc: stable@vger.kernel.org --- fs/fuse/dev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -381,8 +381,7 @@ static void request_end(struct fuse_conn if (!fc->blocked && waitqueue_active(&fc->blocked_waitq)) wake_up(&fc->blocked_waitq); - if (fc->num_background == fc->congestion_threshold && - fc->connected && fc->sb) { + if (fc->num_background == fc->congestion_threshold && fc->sb) { clear_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC); clear_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC); }