Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp568273pxv; Fri, 9 Jul 2021 04:30:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxyfz+Z7YL7huLUu4hSZnFebbd+MTCM7u4DKenfIoE4XdQhtRdY4jKcq5o3KSlXmPyHtFI/ X-Received: by 2002:a17:906:fad5:: with SMTP id lu21mr37701188ejb.469.1625830225850; Fri, 09 Jul 2021 04:30:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625830225; cv=none; d=google.com; s=arc-20160816; b=cidCnXjelbWZ3ohGXl7MgqqCBRtgXmndxjCVbD1QlI8BoSnWIkz7tUn7+xyNx4I6yY TVrQDQl597NeZSwqg4lCXNyBgzTD0qNyccm33LGwj7fjRhQXkWJ74J7OKNSKTj0OHp+K vPQtWDGAxyyDlHJ19q6fMjBOdeYug89UxZKg1NCmdFeXZbnMlU+T1uJ/N9J/JjFSn8od ktxoFEO6nlZUh9Tq0fwuqRg8lGE8GMIBuuzMCZEEs+/2IyJFP6ezQnGWYAopSBIPfutg 8gfzD58gdVTyqpDNm2vVWe9ybubcYr08dwtQb+CKckV4hBTtm13FoE6zZ4Tt7adUCSxS 7AAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=wTbGnuKSf0w+U6qJZrDRBkicmtkQO5iEcPQTwx3qaD4=; b=M8gvwOQK3I2ZmW6J0PeyWU80dchyG9KZnnga3/a/8aBJVPYVugRdvdkxY1WoOeOChO 0+gEYIxhmYImSuOwlm+Nx2astCfMeMzlypdMLBPQB/0IkXrTKXgS/2xjoaedvppRv4i4 5ViOhdhfECWBeo79ecG1rFNfbP+PDb2AsHhXfp+9s788nw5Xxr5wBccdXZJF0cO7xJ6i 9fSqODMCWl6zeT927ojqL+9aqEfr1od1iWMgA6iYaAorVdPc4iv9TGneeEJ+8NWSy9qe S5oP35XTm0rJi1wtcGdV0W8xaVuho1y1N4isk4G9waKP0UwS1JYCFB6N/OiaKqx02sCo vjwA== 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gs43si6736241ejc.415.2021.07.09.04.30.01; Fri, 09 Jul 2021 04:30:25 -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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230471AbhGILbr (ORCPT + 99 others); Fri, 9 Jul 2021 07:31:47 -0400 Received: from mail-ot1-f50.google.com ([209.85.210.50]:45811 "EHLO mail-ot1-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230457AbhGILbr (ORCPT ); Fri, 9 Jul 2021 07:31:47 -0400 Received: by mail-ot1-f50.google.com with SMTP id 75-20020a9d08510000b02904acfe6bcccaso9069597oty.12; Fri, 09 Jul 2021 04:29:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=wTbGnuKSf0w+U6qJZrDRBkicmtkQO5iEcPQTwx3qaD4=; b=g+pXASeIk/rftnhIDz/+W5VwMm47ZSEgt7QRqZT99iqzTxlxQvyuCjQYqEAWqrCNtA OtxJwgtYDXSeJ9RXv2rQBRaEdBaNGr1JCfdE0KgRlZRhkOfILn6E2uthPFeTB9URlMAT dyFpL05Wfqyqn9mYkIFwupEC6bUd+JtwZO5xCPm7gfcUiQFpP+JahsiIRt7s7HPIJ2SR q1yrrKwXGnBmAARkD458C/fWUSP+7+bdddzagECa8OFbZXXudqk06rc004kMCSPGWU/6 de9s+x5JwQZ8JACqj8vND3NWaqnS2cHN7jkht8+xqxvcz4SR6UXtEwb/a3tOdFj4ZQAm KLOw== X-Gm-Message-State: AOAM531mcy/fSgz2TfwIh6rtef+A/kx6XQuUjQQcMinfDx6LVQ/llNv1 0IrvNSxHtEUEMCrPTAf8HGOzymazJ9ORCAUnEVY= X-Received: by 2002:a9d:5f19:: with SMTP id f25mr15787861oti.206.1625830141429; Fri, 09 Jul 2021 04:29:01 -0700 (PDT) MIME-Version: 1.0 References: <20210709064341.6206-1-adrian.hunter@intel.com> <20210709064341.6206-2-adrian.hunter@intel.com> In-Reply-To: <20210709064341.6206-2-adrian.hunter@intel.com> From: "Rafael J. Wysocki" Date: Fri, 9 Jul 2021 13:28:49 +0200 Message-ID: Subject: Re: [PATCH V2 1/2] driver core: Add ability to delete device links of unregistered devices To: Adrian Hunter Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Saravana Kannan , "Martin K . Petersen" , "James E . J . Bottomley" , "open list:TARGET SUBSYSTEM" , Avri Altman , Bean Huo , Can Guo , Asutosh Das , Bart Van Assche , Linux PM , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 9, 2021 at 8:43 AM Adrian Hunter wrote: > > 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"); I think that this is needed regardless of the changes in device_link_put_kref(), because if somebody decides to delete a stateless device link before registering the consumer device, sysfs_remove_link() will still complain, won't it? > 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); > + } And here too, if I'm not mistaken. So in that case it would be better to put the above changes into a separate patch and add a Fixes tag to it. > 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 >