Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp2856753rdb; Wed, 4 Oct 2023 13:44:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEG7Dc1frRoTajTTrA8uLsb8dOaaoIp2CU7B0+mUrk3MSORJcCWwj6NF5ulcavRyDR7Huit X-Received: by 2002:a05:6e02:1a2c:b0:351:20f4:3a28 with SMTP id g12-20020a056e021a2c00b0035120f43a28mr3883139ile.0.1696452299561; Wed, 04 Oct 2023 13:44:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696452299; cv=none; d=google.com; s=arc-20160816; b=FUv4GpuAOWe2Kw6+1APJGSdSNHAh7RK3EN72+ebadfpPA8S0cusi5KaFEQApwRX8Au GJXhwT6vUG5u/LPSzQ8C/b6F0KXlopSEpL5hcL4UT+vnqjOYx6Gtgs1W/NjK7Mg8rx1Y KFaws7BSUEd1Pmnbwv/Ncmg4R6bfVDYOyIOdlYt75tqRzY2LazmBEUqBN4MChFJ8DtKp +QKcH6cgukkHIZZ3LgIDHOs+d8ESr/iFZXBVAPyKyQX9tB9bE15sfFXQyA2SaigBDfxa Jk2EZVYMKD3tSTA63VJRijx/UxdNJrYrnSHSrPrlJv8khXJh9XSYBC3c5LmAcUdJz1AX VM/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=OsTHf1RxRwyrCT7iXJgHTlu9ULLERBCmiy3t5RYublw=; fh=pn4q9TAAs+nPkLUrVr2X+2jTOb4sKtYqv3Sd0C6DA94=; b=yqWydLXX6zeShHq4w/MQKLdT1BkTGR3XPiJaIEmbyfT7dLQciTYXTT++XkYs/jWZ3x f4U8yd8b1wJFt4uridQGmMuOHYIdlRwsR4GsgIAGqlRsO9c1sQwRxO8RRjHTGyePl/ma VLNiX808aUHyd1drBM/ld+rhvpD0n8FNYwA54+5BD41ON0RbvtsjFq9VwSuUNyPGnVfO RM9NyGimRAwilRbrAzUAE4y2JEx++WppFyJsk2jMyimSwAL+PHHVFWqUjuIBHrSl1f3v 9/6bRqPsTqjbjZV8jB6Zc/3QbAQqgpB1V0uqOXu9NjlbtFW9dgfYZ/I+wpWFalor+rDD dBAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=ejpowT72; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id e1-20020a636901000000b00573f7b6999csi4013307pgc.440.2023.10.04.13.44.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Oct 2023 13:44:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=ejpowT72; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id A37A580D5416; Wed, 4 Oct 2023 13:44:56 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233557AbjJDUoo (ORCPT + 99 others); Wed, 4 Oct 2023 16:44:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233548AbjJDUon (ORCPT ); Wed, 4 Oct 2023 16:44:43 -0400 Received: from mail-qt1-x832.google.com (mail-qt1-x832.google.com [IPv6:2607:f8b0:4864:20::832]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41FBAC6 for ; Wed, 4 Oct 2023 13:44:40 -0700 (PDT) Received: by mail-qt1-x832.google.com with SMTP id d75a77b69052e-41983b83e53so1320511cf.2 for ; Wed, 04 Oct 2023 13:44:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1696452279; x=1697057079; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OsTHf1RxRwyrCT7iXJgHTlu9ULLERBCmiy3t5RYublw=; b=ejpowT72cbHCwTCoyvwcjZx8IdYjV2Amscu1qZ3Nn7yKaLvTSp/2yYv9eJICAarjgh ul1YFeWMCtKS9e6tJbz1/EGW8xjp9AsTAYO5E8Pk+Kad/U2P1psPbvuv+KUPipDXc7ca A7xhTdF94WlCzlVhsgpUf7B5ezCaC/P29gYwA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696452279; x=1697057079; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OsTHf1RxRwyrCT7iXJgHTlu9ULLERBCmiy3t5RYublw=; b=dvEgKKbinxyLn3Qr4aQD+H3p097c+M4Xc7HBnp9LNp4GwQ0awzv33ZrK/r9k+ptmMo YTUGmy5qR3R37h/V263y1cK9LNmE4Vi3EFJQvQmNTshPALl+jl6QnMU3hRjMSvzLJDpG U8ypuIkhug6BC7qJ0CDkO1zwjaVhX8cwW3Ocl0AHm8P5QfhwAW7FH8rfivgtQUwP0Mqg z0rVnsKKVQe+RQxpLO+fPtw4T2qNhRECt72oD3b06mjbkpkUXASgjPmk7E4lguN+Ooq/ Vzv3X3ahRETxmMqlekyu9bJQUsdqz25A5PaTrjCCBrA+sN0OjzxT0CsgNqrgqXUorG97 GQ0A== X-Gm-Message-State: AOJu0YxXA59+boV3cqxduzPJ/dvsE2V5Op8fqDnm8yc2fXPKaT2nF24h OIit49f+F7LnnpRPccN6MfID8IxSQUSQmsa5hUaYAg== X-Received: by 2002:a05:622a:548:b0:417:b45b:84c3 with SMTP id m8-20020a05622a054800b00417b45b84c3mr3723369qtx.65.1696452278792; Wed, 04 Oct 2023 13:44:38 -0700 (PDT) Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com. [209.85.160.174]) by smtp.gmail.com with ESMTPSA id w28-20020a05620a149c00b0076ef29f3429sm1525839qkj.120.2023.10.04.13.44.37 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Oct 2023 13:44:37 -0700 (PDT) Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-419768e69dfso100171cf.0 for ; Wed, 04 Oct 2023 13:44:37 -0700 (PDT) X-Received: by 2002:a05:622a:100e:b0:417:5a8c:a104 with SMTP id d14-20020a05622a100e00b004175a8ca104mr69912qte.26.1696452277267; Wed, 04 Oct 2023 13:44:37 -0700 (PDT) MIME-Version: 1.0 References: <20230928015858.1809934-1-linan666@huaweicloud.com> In-Reply-To: <20230928015858.1809934-1-linan666@huaweicloud.com> From: Khazhy Kumykov Date: Wed, 4 Oct 2023 13:44:26 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] blk-throttle: Calculate allowed value only when the throttle is enabled To: linan666@huaweicloud.com Cc: tj@kernel.org, josef@toxicpanda.com, axboe@kernel.dk, yukuai3@huawei.com, cgroups@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linan122@huawei.com, yi.zhang@huawei.com, houtao1@huawei.com, yangerkun@huawei.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=2.7 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 04 Oct 2023 13:44:56 -0700 (PDT) X-Spam-Level: ** On Wed, Sep 27, 2023 at 7:05=E2=80=AFPM wrote: > > From: Li Nan > > When the throttle of bps is not enabled, tg_bps_limit() returns U64_MAX, > which is be used in calculate_bytes_allowed(), and divide 0 error will > happen. > > To fix it, only calculate allowed value when the throttle of bps/iops is > enabled and the value will be used. > > Fixes: e8368b57c006 ("blk-throttle: use calculate_io/bytes_allowed() for = throtl_trim_slice()") > Reported-by: Changhui Zhong > Closes: https://lore.kernel.org/all/CAGVVp+Vt6idZtxfU9jF=3DVSbu145Wi-d-Wn= AZx_hEfOL8yLZgBA@mail.gmail.com > Signed-off-by: Li Nan > --- > block/blk-throttle.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/block/blk-throttle.c b/block/blk-throttle.c > index 38a881cf97d0..3c9a74ab9f0e 100644 > --- a/block/blk-throttle.c > +++ b/block/blk-throttle.c > @@ -730,8 +730,10 @@ static u64 calculate_bytes_allowed(u64 bps_limit, un= signed long jiffy_elapsed) > static inline void throtl_trim_slice(struct throtl_grp *tg, bool rw) > { > unsigned long time_elapsed; > - long long bytes_trim; > - int io_trim; > + long long bytes_trim =3D 0; > + int io_trim =3D 0; > + u64 bps_limit; > + u32 iops_limit; > > BUG_ON(time_before(tg->slice_end[rw], tg->slice_start[rw])); > > @@ -758,11 +760,14 @@ static inline void throtl_trim_slice(struct throtl_= grp *tg, bool rw) > if (!time_elapsed) > return; > > - bytes_trim =3D calculate_bytes_allowed(tg_bps_limit(tg, rw), > - time_elapsed) + > - tg->carryover_bytes[rw]; > - io_trim =3D calculate_io_allowed(tg_iops_limit(tg, rw), time_elap= sed) + > - tg->carryover_ios[rw]; > + bps_limit =3D tg_bps_limit(tg, rw); > + iops_limit =3D tg_iops_limit(tg, rw); > + if (tg->bytes_disp[rw] > 0 && bps_limit !=3D U64_MAX) I don't think this change is sufficient to prevent kernel crash, as a "clever" user could still set the bps_limit to U64_MAX - 1 (or another large value), which probably would still result in the same crash. The comment in mul_u64_u64_div_u64 suggests there's something we can do to better handle the overflow case, but I'm not sure what it's referring to. ("Will generate an #DE when the result doesn't fit u64, could fix with an __ex_table[] entry when it becomes an issue.") Otherwise, we probably need to remove the mul_u64_u64_div_u64 and check for overflow/potential overflow ourselves? Khazhy > + bytes_trim =3D calculate_bytes_allowed(bps_limit, > + time_elapsed) + tg->carryover_bytes[rw]; > + if (tg->io_disp[rw] > 0 && iops_limit !=3D UINT_MAX) > + io_trim =3D calculate_io_allowed(iops_limit, time_elapsed= ) + > + tg->carryover_ios[rw]; > if (bytes_trim <=3D 0 && io_trim <=3D 0) > return; > > -- > 2.39.2 >