Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp372163pxv; Thu, 8 Jul 2021 23:44:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzsEz73XIuCcr7JOfksAHIm6B84CSyaHlJBuqKIidw76bvUU2rCZKv2VvmmIWiT9bZjhfji X-Received: by 2002:a05:6e02:1bed:: with SMTP id y13mr6801000ilv.166.1625813088911; Thu, 08 Jul 2021 23:44:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625813088; cv=none; d=google.com; s=arc-20160816; b=k5Cg++f0TCIarqKJDBBCE0mid6rC7R9rG8er8Muapq6fAo25d7BZNW8OB3PbQcEWPL +FWKf0S3f1FbncKz9ywC5lTds3HrdY/ArwQBCrn5ZreH/d+PCHKErGXnoHyKyXbLVed/ fmeW2PbJzB3JdJD1amuwlaBLKQE4TuliIF3aQqwIhT1ExyZ74UJEI8G1I/L1PlOWsX8l na9UNhYFR2nqOZJuGbQAZVGB9tkh+VG/TB2veWvGK1z0ex/xnhu3B67/0yrMl1QbWqMv f62UOoUBu/hwSK8YJjlPn9q1U8oZa4lcMs0jjTShaU6HMt3eM9m5148QwtaG53b7oxv8 mt+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:organization:references:in-reply-to:message-id :date:subject:cc:to:from; bh=lTOYZ+DJgHyM30S+9/0j3zJLM3rvEVFz4svxVMERvZ8=; b=hqiEmGAtSs74y+WCq26ja8mEEDLOLakm9uNUbt6MBa1KFkyp94PfCrP/7/tVL1hUrd C9rAbnI5m3CD8sKoglb45J/o0tCwG0VveWNJLalSStIJn1KJiOzdWanBhjdZbosowM1V +LTZKegGzEX3c/CEAjUkMu322mKzKXEsYhIQs1kCasJXK3yTbCtBrIBLf7qHs8EA+fM/ L9987FG1Pn1NJxmDBwwb5+k68O7Tjo51PxJ1Vh3zM5y0FaiTpWP+k2l7bdmOH94YAcKn YsVTzeUKBgJLgkXZVCBiD/bMLuLzQ/HqGh50qsM9+v/c41wuEZxNp7Wjv2e1HSqWyNAN nc6g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t10si5392340ilf.122.2021.07.08.23.44.36; Thu, 08 Jul 2021 23:44:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231127AbhGIGqT (ORCPT + 99 others); Fri, 9 Jul 2021 02:46:19 -0400 Received: from mga05.intel.com ([192.55.52.43]:41600 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230494AbhGIGqR (ORCPT ); Fri, 9 Jul 2021 02:46:17 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="295293993" X-IronPort-AV: E=Sophos;i="5.84,226,1620716400"; d="scan'208";a="295293993" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 23:43:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,226,1620716400"; d="scan'208";a="648869602" Received: from ahunter-desktop.fi.intel.com ([10.237.72.79]) by fmsmga005.fm.intel.com with ESMTP; 08 Jul 2021 23:43:31 -0700 From: Adrian Hunter To: "Rafael J . Wysocki" Cc: Greg Kroah-Hartman , Saravana Kannan , "Martin K . Petersen" , "James E . J . Bottomley" , linux-scsi@vger.kernel.org, Avri Altman , Bean Huo , Can Guo , Asutosh Das , Bart Van Assche , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH V2 1/2] driver core: Add ability to delete device links of unregistered devices Date: Fri, 9 Jul 2021 09:43:40 +0300 Message-Id: <20210709064341.6206-2-adrian.hunter@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709064341.6206-1-adrian.hunter@intel.com> References: <20210709064341.6206-1-adrian.hunter@intel.com> Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Managed device links are deleted by device_del(). However it is possible to add a device link to a consumer before device_add(), and then discover an error prevents the device from being used. In that case normally references to the device would be dropped and the device would be deleted. However the device link holds a reference to the device, so the device link and device remain indefinitely. Amend device link removal to accept removal of a link with an unregistered consumer device. To make that work nicely, the devlink_remove_symlinks() function must be amended to cope with the absence of the consumer's sysfs presence, otherwise sysfs_remove_link() will generate a warning. Suggested-by: Rafael J. Wysocki Fixes: b294ff3e34490 ("scsi: ufs: core: Enable power management for wlun") Signed-off-by: Adrian Hunter --- drivers/base/core.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index ea5b85354526..24bacdb315c6 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -562,7 +562,8 @@ static void devlink_remove_symlinks(struct device *dev, struct device *con = link->consumer; char *buf; - sysfs_remove_link(&link->link_dev.kobj, "consumer"); + if (device_is_registered(con)) + sysfs_remove_link(&link->link_dev.kobj, "consumer"); sysfs_remove_link(&link->link_dev.kobj, "supplier"); len = max(strlen(dev_bus_name(sup)) + strlen(dev_name(sup)), @@ -575,8 +576,10 @@ static void devlink_remove_symlinks(struct device *dev, return; } - snprintf(buf, len, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup)); - sysfs_remove_link(&con->kobj, buf); + if (device_is_registered(con)) { + snprintf(buf, len, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup)); + sysfs_remove_link(&con->kobj, buf); + } snprintf(buf, len, "consumer:%s:%s", dev_bus_name(con), dev_name(con)); sysfs_remove_link(&sup->kobj, buf); kfree(buf); @@ -885,6 +888,8 @@ static void device_link_put_kref(struct device_link *link) { if (link->flags & DL_FLAG_STATELESS) kref_put(&link->kref, __device_link_del); + else if (!device_is_registered(link->consumer)) + __device_link_del(&link->kref); else WARN(1, "Unable to drop a managed device link reference\n"); } -- 2.17.1