Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp116691imu; Wed, 19 Dec 2018 14:48:05 -0800 (PST) X-Google-Smtp-Source: AFSGD/WaeD7ertJLvrerHQdtXdvoUIiklPW9Gl0uFu7IgWNvARPRpZ+r1gGyEncMKXD8bx5cRzpg X-Received: by 2002:a62:34c6:: with SMTP id b189mr22743781pfa.229.1545259685171; Wed, 19 Dec 2018 14:48:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545259685; cv=none; d=google.com; s=arc-20160816; b=Wa2PWMEUBwcuQ+XV2MM6OgMvEmvcRbQgiIjwZIUWgc2GLHU3Rb4MMSCCaShZBVqdBP 1a8Jg7xOnDEBcXzTywO63yqYrQD4/4V7vzPjRu2CZNuzrR1faY3KE9BXeBb9JTo5i0hw 9b4IJuvJX3n9aE96NlMYAxXOGbC0psf/3qp8+w/gUxIJLrJwH1zcD8E9Nl0/PcTe112x P9NTBYOrdOMcf69VJQi4szo2JCuVU7XIHBLewiF4eCe9FzKkQtJw1HR72BnBQDWCS+Qx 7vq96Sicj07/svjurF0iBCFdCo2peYeDzclAT3BWS9PvhZNdnHpC2QP0TEq2zZJDlceb 1CNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=0eHvRoBrCDiLr1EMXsJ+QvqbIlFS3bCPji7tPHogKgc=; b=AVw8zfbFpBqbIRqLkB5Kp0Jz51l8Qq6AOEZKPPXbhU0Bb+KFksJbrWs32TJj6vrRCS N4FLtvoIoSOtI4+APIb1vwRNYeYlO7ZEtBj37qaSsGNt4z7LukRxzkcqsp9/QgBHF9Ow euVsN7N5dwAmC4VTNBmc7bLS6/GLfEZDVrTjXaBlwiIPBpryydIoRShnemw2rrgWJ4pp COPrRrdSNSsUbxnrDGPKvSNi7PYff46i6aWimKr0IImFafQopVRuk3w6NXV5bgwOFRjB 8e12LK7nH+usMlHgnKR/PmUNjeUtQIoyBP9/WJEier6rz0DMtFczNuUORkzWHRvzgbNw we0w== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (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 q3si17834022plb.209.2018.12.19.14.47.49; Wed, 19 Dec 2018 14:48:05 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728216AbeLSWn0 (ORCPT + 99 others); Wed, 19 Dec 2018 17:43:26 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:37779 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726716AbeLSWn0 (ORCPT ); Wed, 19 Dec 2018 17:43:26 -0500 Received: by mail-qt1-f196.google.com with SMTP id t33so21413862qtt.4; Wed, 19 Dec 2018 14:43:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0eHvRoBrCDiLr1EMXsJ+QvqbIlFS3bCPji7tPHogKgc=; b=fy0N6wUPp50tDVcOX59zVOQeJW924Mx2/hmJTP7Bwp1I/TA9l8eFl/6iApRFcU+Tao jyjyllsTU0AFLqQvTrBO4AegWxfVGLbY5AK/lPJ+5Djd8nxTwleZTcLSZWdFSC8Wdtvc AN7N/P9Jxe7q1HdxDTCb1nEguI2hFH+torUP/bzx4o+gK+6iT6ZBmy8ZO0QHhjP0zMuK JnF7W/i1URob9mmVCISzQl+ELwrnuM+LlbRC3q2pOzzHBLdcly+V/xjJF2M8Ho2rsdf5 y9cGT6jnjCAhIsICtWNYRq4Qr/T0uwTgxEvisUJjuVFNlkFIeROYuKG9A/V3MaYA5oZ5 m+SA== X-Gm-Message-State: AA+aEWZDeDkuH+7E12jblphi2EBScM1dx1J0pNIbzx1bZheoQ2kv8XCG rLEKGwd4YQs8uoII3GSkIu4= X-Received: by 2002:a0c:b044:: with SMTP id l4mr23755408qvc.80.1545259405124; Wed, 19 Dec 2018 14:43:25 -0800 (PST) Received: from dennisz-mbp.thefacebook.com ([199.201.65.2]) by smtp.gmail.com with ESMTPSA id o34sm2297817qte.4.2018.12.19.14.43.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 19 Dec 2018 14:43:24 -0800 (PST) From: Dennis Zhou To: Jens Axboe , Tejun Heo Cc: kernel-team@fb.com, linux-block@vger.kernel.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Dennis Zhou Subject: [PATCH] blkcg: clean up blkg_tryget_closest() Date: Wed, 19 Dec 2018 16:43:21 -0600 Message-Id: <20181219224321.32624-1-dennis@kernel.org> X-Mailer: git-send-email 2.13.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The implementation of blkg_tryget_closest() wasn't super obvious and became a point of suspicion when debugging [1]. So let's clean it up so it's obviously not the problem. [1] https://lore.kernel.org/linux-block/a7e97e4b-0dd8-3a54-23b7-a0f27b17fde8@kernel.dk/ Signed-off-by: Dennis Zhou --- include/linux/blk-cgroup.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index f025fd1e22e6..76c61318fda5 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -499,22 +499,33 @@ static inline void blkg_get(struct blkcg_gq *blkg) */ static inline bool blkg_tryget(struct blkcg_gq *blkg) { - return percpu_ref_tryget(&blkg->refcnt); + return blkg && percpu_ref_tryget(&blkg->refcnt); } /** * blkg_tryget_closest - try and get a blkg ref on the closet blkg * @blkg: blkg to get * - * This walks up the blkg tree to find the closest non-dying blkg and returns - * the blkg that it did association with as it may not be the passed in blkg. + * This needs to be called rcu protected. As the failure mode here is to walk + * up the blkg tree, this ensure that the blkg->parent pointers are always + * valid. This returns the blkg that it ended up taking a reference on or %NULL + * if no reference was taken. */ static inline struct blkcg_gq *blkg_tryget_closest(struct blkcg_gq *blkg) { - while (blkg && !percpu_ref_tryget(&blkg->refcnt)) + struct blkcg_gq *ret_blkg = NULL; + + WARN_ON_ONCE(!rcu_read_lock_held()); + + while (blkg) { + if (blkg_tryget(blkg)) { + ret_blkg = blkg; + break; + } blkg = blkg->parent; + } - return blkg; + return ret_blkg; } /** -- 2.17.1