Received: by 10.192.165.156 with SMTP id m28csp959788imm; Mon, 16 Apr 2018 11:30:26 -0700 (PDT) X-Google-Smtp-Source: AIpwx4868sIO1LHN5YeR/X9r4bh6/rOYt8oUmxHSDwn+kBJ1ESliOEBP7gGCu/jZm6Z4Fg332Pcd X-Received: by 10.99.123.83 with SMTP id k19mr6574416pgn.146.1523903426502; Mon, 16 Apr 2018 11:30:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523903426; cv=none; d=google.com; s=arc-20160816; b=l7kLtvpeBEiNrVP8EWHbcc+y78oKu/o3QXHSzkoaJiNpoJ3JaCpYrDQ0IdcTUnuMEk LcB9+uGpIASELJEPhGB6EhYG62AJGe4dtmPxOFelYVIgj7WRprZmUKod19ofiUS3IVek jIIM9iJ9gjX+7Vwf6F/xLFXnd4rGRBp+cfUx1W/Tou0moyU7pHRbvMrTEkkd0tiZRFXI y2VsYhq106eQrV5SKhyU6VsX/qXHn9yYKNq55cqZ/MK4ixSWZSUXuxv6FXnYGeoOvfRy M4uauaRO5tJ30H4lIbW5Vf+ctFSh0K4bGJMmXVfdbuzljUXjE5Tm2Mva2AgHXFaD020t ay2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=y3KZuviGtQhbTxsVYkjVcK7oRO0G3AUM7hpxNRmMoFU=; b=B8YxkAZgvOgVEwJoI8fHyWt40eOMTxMDFG/T0CE9cNC5sxXK/xjpEtcKBlfgae+an0 wXDlIBHq+NSJqVlFxW80AbcleiRBVyFdtshyh2c08smYRE6w73UCo72pwZfyk2By0JkR 2ZV6AM9eUnpq2dY11KcgG72qLlpGthMrOsIda2tjpulNgnW6TnyzTJz9dT73PQ/9RXX8 vmonWt8b1+kpRYUhNWbCfWI3aTVNZmWBNttqrZiW8n0k1G7TtZttZGiqrug42//MIje0 CMJigFDTdQnOdWJtripcBKXV3HT+ThjcClFT4Blu8xVp3JJ+b0PLJGBW2AD5sA42CzPw +4TA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=NEQTb97G; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t2si10127475pgb.338.2018.04.16.11.30.12; Mon, 16 Apr 2018 11:30:25 -0700 (PDT) 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=@google.com header.s=20161025 header.b=NEQTb97G; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753244AbeDPS2u (ORCPT + 99 others); Mon, 16 Apr 2018 14:28:50 -0400 Received: from mail-ot0-f196.google.com ([74.125.82.196]:46217 "EHLO mail-ot0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753182AbeDPS2o (ORCPT ); Mon, 16 Apr 2018 14:28:44 -0400 Received: by mail-ot0-f196.google.com with SMTP id v64-v6so18495305otb.13 for ; Mon, 16 Apr 2018 11:28:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=y3KZuviGtQhbTxsVYkjVcK7oRO0G3AUM7hpxNRmMoFU=; b=NEQTb97GOdlG92deK8pzAq4mGn/Vq+Dp+e9TVXlaBhus1ykh4hKC7dG5Cj4nuIrhBQ jOvuf/mc97FGgKt1o57tA4WLYd1N4Rgb/rde5/UkcEqhMxFVI2+UZYTQiEGvDDX3n09x MBBxuBQSAxrPZQvsBV1aR2oW+hf1tTrTiTrXQwjjeBGBPyVbakI6IGQ5aDOjo2Q1XHJY az39wP4FT2p9S6Tc5JaLEB4UIb2pC9NiWguBue2X+q//FmnHz30Vo7JANIX9afiY2kA9 gjnd52Io3xTAbk4aC5fWuxLkE0Z1RVmbz9JuaHic0Vhts9zlCaz1FST2OMEH/P7xtDzH TRYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=y3KZuviGtQhbTxsVYkjVcK7oRO0G3AUM7hpxNRmMoFU=; b=Oida1IWLLYwXV7D3zpTACthnh7n57JbLLqSKwh5FkRcFtZydr4GINJXNQAbF8bvosr cTKijhKZDdsFdsv6oml+D+S0qWJ+Y/F9xCdBxUfXIa8fgTOFpX6noXO/KXUaVKIeqCju gmsOTK2+RBHp3CrHiO3ckj9Uozk758UZUqqLQvUf0Ji0RF1Xd49XiWNdJb+ik0lElLyz K9kKkSSp86QkD6tf4keLc8/jttoIjZpdqOVd2OWsqlyVGpA0Gfe/o6TqWaK/QX5asw/8 Ux0u8g3G8wiJXm2VVuA/ZsXka18MSatObyTLeDx9tXcR5uKj6rQ+FDpA7xBGqdnF5l9q BPkA== X-Gm-Message-State: ALQs6tArz9kr//55vJE9f/BSEQOLceKmwy2YXUqzMcoRu8OCIWxknTWz qA0oAQaaMeFwM2m1NIHBGl9XE6fqOsX322u++PGy1A== X-Received: by 2002:a9d:58c6:: with SMTP id s6-v6mr10600847oth.188.1523903323439; Mon, 16 Apr 2018 11:28:43 -0700 (PDT) MIME-Version: 1.0 Received: by 10.74.79.198 with HTTP; Mon, 16 Apr 2018 11:28:42 -0700 (PDT) In-Reply-To: <20180415223439.GC30522@ZenIV.linux.org.uk> References: <20180413141430.2788e2562e3e24bd273fe78b@linux-foundation.org> <3362fb2d-85ff-86af-399f-698c986e46cc@suse.com> <20180414080206.GV30522@ZenIV.linux.org.uk> <20180414205846.GW30522@ZenIV.linux.org.uk> <20180415005056.GX30522@ZenIV.linux.org.uk> <20180415204054.GA30522@ZenIV.linux.org.uk> <20180415215455.GB30522@ZenIV.linux.org.uk> <20180415223439.GC30522@ZenIV.linux.org.uk> From: Khazhismel Kumykov Date: Mon, 16 Apr 2018 11:28:42 -0700 Message-ID: Subject: Re: [PATCH] fs/dcache.c: re-add cond_resched() in shrink_dcache_parent() To: Al Viro Cc: Linus Torvalds , Nikolay Borisov , Andrew Morton , linux-fsdevel , Linux Kernel Mailing List , David Rientjes , Goldwyn Rodrigues , Jeff Mahoney , Davidlohr Bueso Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="0000000000004e60090569fb6460" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --0000000000004e60090569fb6460 Content-Type: text/plain; charset="UTF-8" On Sun, Apr 15, 2018 at 3:34 PM, Al Viro wrote: > On Sun, Apr 15, 2018 at 10:54:55PM +0100, Al Viro wrote: >> On Sun, Apr 15, 2018 at 09:40:54PM +0100, Al Viro wrote: >> >> > BTW, the current placement of cond_resched() looks bogus; suppose we >> > have collected a lot of victims and ran into need_resched(). We leave >> > d_walk() and call shrink_dentry_list(). At that point there's a lot >> > of stuff on our shrink list and anybody else running into them will >> > have to keep scanning. Giving up the timeslice before we take care >> > of any of those looks like a bad idea, to put it mildly, and that's >> > precisely what will happen. >> > >> > What about doing that in the end of __dentry_kill() instead? And to >> > hell with both existing call sites - dput() one (before going to >> > the parent) is obviously covered by that (dentry_kill() only returns >> > non-NULL after having called __dentry_kill()) and in shrink_dentry_list() >> > we'll get to it as soon as we go through all dentries that can be >> > immediately kicked off the shrink list. Which, AFAICS, improves the >> > situation, now that shrink_lock_dentry() contains no trylock loops... >> > >> > Comments? >> >> What I mean is something like this (cumulative diff, it'll obviously need >> to be carved up into 3--4 commits): > > ... and carved-up version is in vfs.git#work.dcache. Could syzbot folks > hit it with their reproducers? To me it seems like shrink_dcache_parent could still spin without scheduling similar to before - found > 0 since *someone* is shrinking, but we have 0 entries to shrink - we never call __dentry_kill or schedule, and just spin. And indeed, the syzbot reproducer @vfs#work.dcache hits a softlockup in shrink_dcache_parent. I'd think re-adding cond_resched to shrink_dcache_parent does make the softlockup go way. It seems to fix the reproducer. Although did we want to terminate the loop in shrink_dcache_parent earlier? --0000000000004e60090569fb6460 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIS5wYJKoZIhvcNAQcCoIIS2DCCEtQCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ghBNMIIEXDCCA0SgAwIBAgIOSBtqDm4P/739RPqw/wcwDQYJKoZIhvcNAQELBQAwZDELMAkGA1UE BhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExOjA4BgNVBAMTMUdsb2JhbFNpZ24gUGVy c29uYWxTaWduIFBhcnRuZXJzIENBIC0gU0hBMjU2IC0gRzIwHhcNMTYwNjE1MDAwMDAwWhcNMjEw NjE1MDAwMDAwWjBMMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEiMCAG A1UEAxMZR2xvYmFsU2lnbiBIViBTL01JTUUgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBALR23lKtjlZW/17kthzYcMHHKFgywfc4vLIjfq42NmMWbXkNUabIgS8KX4PnIFsTlD6F GO2fqnsTygvYPFBSMX4OCFtJXoikP2CQlEvO7WooyE94tqmqD+w0YtyP2IB5j4KvOIeNv1Gbnnes BIUWLFxs1ERvYDhmk+OrvW7Vd8ZfpRJj71Rb+QQsUpkyTySaqALXnyztTDp1L5d1bABJN/bJbEU3 Hf5FLrANmognIu+Npty6GrA6p3yKELzTsilOFmYNWg7L838NS2JbFOndl+ce89gM36CW7vyhszi6 6LqqzJL8MsmkP53GGhf11YMP9EkmawYouMDP/PwQYhIiUO0CAwEAAaOCASIwggEeMA4GA1UdDwEB /wQEAwIBBjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwEgYDVR0TAQH/BAgwBgEB/wIB ADAdBgNVHQ4EFgQUyzgSsMeZwHiSjLMhleb0JmLA4D8wHwYDVR0jBBgwFoAUJiSSix/TRK+xsBtt r+500ox4AAMwSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n c3BlcnNvbmFsc2lnbnB0bnJzc2hhMmcyLmNybDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBKDA0MDIG CCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzANBgkqhkiG 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 BQUHMAKGNGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzaHZzbWltZWNhMS5j cnQwHQYDVR0OBBYEFDNntFDpJlP5hZfZPq3fmoQ/ClRPMB8GA1UdIwQYMBaAFMs4ErDHmcB4koyz IZXm9CZiwOA/MEwGA1UdIARFMEMwQQYJKwYBBAGgMgEoMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NodnNtaW1lY2ExLmNybDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMA0GCSqGSIb3DQEBCwUAA4IBAQCcYsdtDsMPCsiWtxWK v0I9QkCnTCRmIAxfU099lmAl6HJIb6EZAYXhG51MDl9iaGIuH+GO5oxO7mt6QXjZkJJRP2vReyw5 vi5ViuNmepeIV0P683cromlJaDnnrTIV8cqxomNphwiRQiX+abmRlZ2+Har0cE2a0g47zpdg/Hby MERF/SR21AUHupZvBsu6329K3W2rg7YbCPX+MnvEgpZKqCyulTjxFyxJ8a8pjBtznVnMrRrTfYRz HfgjoeGEt0kUqvCtVFjEU1tpoYLSys6rl1qk+jX/YW09XZsd18ie8uWVRxG+9KtevbtWe5UPBQ37 UMq8z8vtmD3G2k6o6TQMMYICXjCCAloCAQEwXDBMMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xv YmFsU2lnbiBudi1zYTEiMCAGA1UEAxMZR2xvYmFsU2lnbiBIViBTL01JTUUgQ0EgMQIMD/ndhZX/ YOFoMzvgMA0GCWCGSAFlAwQCAQUAoIHUMC8GCSqGSIb3DQEJBDEiBCCGnx+q0bTGqLX6m781wXpS m3/kpVqORqVURF2EgdzJQzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP Fw0xODA0MTYxODI4NDRaMGkGCSqGSIb3DQEJDzFcMFowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQB FjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwCwYJKoZIhvcNAQEKMAsGCSqGSIb3DQEBBzALBglg hkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEACvlrBZVJ1gFNBpO5kpmqhAZ/b6pso64xqYkhuVyD gydwhKiyrl1m/usrzTdPXxDJ7Bd3D4CRPMvAJ3MM4shSzA6A3CzAT7jk7zS6GWuECo0e8zKfmPtP pd4aafBu1kGbi9LPSfgUIONOgoUhe3HchBIhU4OqlPrUMokF0yr1zGlWgc+M0P/8eQcbSMWdZV/I c9PqNsG7XyumKUbUVMAedqieRQp/+54JAhRQ5sWwxrlIDF7sM5NX4k4r14NUXdYfm58vuOxfBYMr Sz7Jp6sYabYpQVxqMZqzvxK4LmrzE3JZ7WhuqoLcsaVd4XwWugqEXQDekxlf8vpRIzw8AgKmJA== --0000000000004e60090569fb6460--