Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1836475imm; Mon, 3 Sep 2018 10:41:41 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaW2zSUeryOKWXZM0KJCdWrFbuVgXGSaaR4G2MPnK3I11V0riYGyotnbclFrC3vHlyJKoDh X-Received: by 2002:a17:902:8f93:: with SMTP id z19-v6mr29169068plo.263.1535996501035; Mon, 03 Sep 2018 10:41:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535996501; cv=none; d=google.com; s=arc-20160816; b=ugpMrlotBOvD3qnMEfNUVfPm/YZ0OyzpzoV2dI8NtTrkYn9Tnl6HZE9kYchddc9cHf SPTsCMTPyfgab81bUjXl8XY/tK5YK+DYvnZipvsOFvlopyK2f2OveX1+IR+uMKtFQLuR 3r/wp7SYfl66DJ1OwtZCPBo42VhZyxmAAwpMST8PI+mkSqeqYgH5Wh7Ur+GHJpc61iJ/ t9xMEQoMblYDDAUpXTrS5bdAMAx6kBWgXwJYRPDIwyU/lDqoBOmitHV4bPlIpqnTRo8l BbeZkEiCTpcOBWbCpBphYw1p1mx1BKCjGgmE0jhgawcv8gkuHXD7hIlk1h839UckeMdt bSfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=9fBvXtWhIWKM3gG3GdB9DVa+AWiv+589qEL6cOjop4o=; b=OFxbx2JL/Ywdsi3eYSSnY3XDzLOceIVpg7QNWxXZFvHFMJak3aTfMAA2FU6E0LKavc hti+FsYrjeQ8gJD7M9w0LsmaM4AcFF0+5ROlTM9v897Qc6InTRs2zSo/Liw2eKR9FdEd 3nEn4Xna9x/g9lN1UheaK9v4m+EtP3c4onLlpfZ7oi7yZsAVgoMYIZ1411h2dB6tziti 6DFXfmMLUOBxgx67ql1BJiP6d/Nt+Z/hhRtiDTncrjrCkRJLOOKbrCDRPNaXJ/eankte wYDCjX5xR3rOLbQewPcZdqMgPwZ6YXcsFo1Ich+qHvVxZ1Q6uYn6w6YFyklELRsQWAN2 dkFQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z64-v6si7311461pgb.185.2018.09.03.10.41.25; Mon, 03 Sep 2018 10:41:41 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731872AbeICWBc (ORCPT + 99 others); Mon, 3 Sep 2018 18:01:32 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:49368 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727545AbeICWBb (ORCPT ); Mon, 3 Sep 2018 18:01:31 -0400 Received: from localhost (ip-213-127-74-90.ip.prioritytelecom.net [213.127.74.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id B71C1BAE; Mon, 3 Sep 2018 17:40:19 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bart Van Assche , Tejun Heo , "Martin K. Petersen" Subject: [PATCH 4.18 108/123] scsi: sysfs: Introduce sysfs_{un,}break_active_protection() Date: Mon, 3 Sep 2018 18:57:32 +0200 Message-Id: <20180903165724.080663882@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180903165719.499675257@linuxfoundation.org> References: <20180903165719.499675257@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Bart Van Assche commit 2afc9166f79b8f6da5f347f48515215ceee4ae37 upstream. Introduce these two functions and export them such that the next patch can add calls to these functions from the SCSI core. Signed-off-by: Bart Van Assche Acked-by: Tejun Heo Acked-by: Greg Kroah-Hartman Cc: Signed-off-by: Martin K. Petersen Signed-off-by: Greg Kroah-Hartman --- fs/sysfs/file.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/sysfs.h | 14 ++++++++++++++ 2 files changed, 58 insertions(+) --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c @@ -406,6 +406,50 @@ int sysfs_chmod_file(struct kobject *kob EXPORT_SYMBOL_GPL(sysfs_chmod_file); /** + * sysfs_break_active_protection - break "active" protection + * @kobj: The kernel object @attr is associated with. + * @attr: The attribute to break the "active" protection for. + * + * With sysfs, just like kernfs, deletion of an attribute is postponed until + * all active .show() and .store() callbacks have finished unless this function + * is called. Hence this function is useful in methods that implement self + * deletion. + */ +struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj, + const struct attribute *attr) +{ + struct kernfs_node *kn; + + kobject_get(kobj); + kn = kernfs_find_and_get(kobj->sd, attr->name); + if (kn) + kernfs_break_active_protection(kn); + return kn; +} +EXPORT_SYMBOL_GPL(sysfs_break_active_protection); + +/** + * sysfs_unbreak_active_protection - restore "active" protection + * @kn: Pointer returned by sysfs_break_active_protection(). + * + * Undo the effects of sysfs_break_active_protection(). Since this function + * calls kernfs_put() on the kernfs node that corresponds to the 'attr' + * argument passed to sysfs_break_active_protection() that attribute may have + * been removed between the sysfs_break_active_protection() and + * sysfs_unbreak_active_protection() calls, it is not safe to access @kn after + * this function has returned. + */ +void sysfs_unbreak_active_protection(struct kernfs_node *kn) +{ + struct kobject *kobj = kn->parent->priv; + + kernfs_unbreak_active_protection(kn); + kernfs_put(kn); + kobject_put(kobj); +} +EXPORT_SYMBOL_GPL(sysfs_unbreak_active_protection); + +/** * sysfs_remove_file_ns - remove an object attribute with a custom ns tag * @kobj: object we're acting for * @attr: attribute descriptor --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -237,6 +237,9 @@ int __must_check sysfs_create_files(stru const struct attribute **attr); int __must_check sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr, umode_t mode); +struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj, + const struct attribute *attr); +void sysfs_unbreak_active_protection(struct kernfs_node *kn); void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, const void *ns); bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr); @@ -350,6 +353,17 @@ static inline int sysfs_chmod_file(struc return 0; } +static inline struct kernfs_node * +sysfs_break_active_protection(struct kobject *kobj, + const struct attribute *attr) +{ + return NULL; +} + +static inline void sysfs_unbreak_active_protection(struct kernfs_node *kn) +{ +} + static inline void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, const void *ns)