All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tobin C. Harding" <tobin@kernel.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>,
	Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>,
	Petr Mladek <pmladek@suse.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Tobin C. Harding" <tobin@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Joe Lawrence <joe.lawrence@redhat.com>,
	live-patching@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC PATCH 4/5] kobject: Add kobject initialized predicate
Date: Thu,  2 May 2019 12:31:41 +1000	[thread overview]
Message-ID: <20190502023142.20139-5-tobin@kernel.org> (raw)
In-Reply-To: <20190502023142.20139-1-tobin@kernel.org>

A call to kobject_init() is required to be paired with a call to
kobject_put() in order to correctly free up the kobject.  During cleanup
functions it would be useful to know if a kobject was initialized in
order to correctly pair the call to kobject_put().  For example this is
necessary if we attempt to initialize multiple objects on a list and one
fails - in order to correctly do cleanup we need to know which objects
have been initialized.

Add a predicate kobject_is_initialized() to the kobject API.  This
function maintains the kobject layer of abstraction; simply returns
kobj->state_initialized.

Signed-off-by: Tobin C. Harding <tobin@kernel.org>
---
 include/linux/kobject.h |  2 ++
 lib/kobject.c           | 12 ++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 1ab0d624fb36..65a317b65d9c 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -100,6 +100,8 @@ int kobject_init_and_add(struct kobject *kobj,
 			 struct kobj_type *ktype, struct kobject *parent,
 			 const char *fmt, ...);
 
+extern bool kobject_is_initialized(struct kobject *kobj);
+
 extern void kobject_del(struct kobject *kobj);
 
 extern struct kobject * __must_check kobject_create(void);
diff --git a/lib/kobject.c b/lib/kobject.c
index 0181f102cd1c..ecddf417f452 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -366,6 +366,18 @@ void kobject_init(struct kobject *kobj, struct kobj_type *ktype)
 }
 EXPORT_SYMBOL(kobject_init);
 
+/**
+ * kobject_is_initialized() - Kobject initialized predicate.
+ * @kobj: The kobject to query
+ *
+ * Return: True if @kobj has been initialized.
+ */
+bool kobject_is_initialized(struct kobject *kobj)
+{
+	return kobj->state_initialized;
+}
+EXPORT_SYMBOL(kobject_is_initialized);
+
 static __printf(3, 0) int kobject_add_varg(struct kobject *kobj,
 					   struct kobject *parent,
 					   const char *fmt, va_list vargs)
-- 
2.21.0


  parent reply	other threads:[~2019-05-02  2:40 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-02  2:31 [RFC PATCH 0/5] kobject: Add and use init predicate Tobin C. Harding
2019-05-02  2:31 ` [RFC PATCH 1/5] livepatch: Fix kobject memleak Tobin C. Harding
2019-05-02  7:22   ` Greg Kroah-Hartman
2019-05-02  8:46   ` Petr Mladek
2019-05-02  2:31 ` [RFC PATCH 2/5] kobject: Remove docstring reference to kset Tobin C. Harding
2019-05-02  7:20   ` Greg Kroah-Hartman
2019-05-02  2:31 ` [RFC PATCH 3/5] kobject: Fix kernel-doc comment first line Tobin C. Harding
2019-05-02  7:20   ` Greg Kroah-Hartman
2019-05-02  7:38   ` Johan Hovold
2019-05-02  8:25     ` Tobin C. Harding
2019-05-02  8:39       ` Johan Hovold
2019-05-03  1:40         ` Tobin C. Harding
2019-05-03  1:46           ` Randy Dunlap
2019-05-03 12:23             ` Jonathan Corbet
2019-05-03  7:56           ` Johan Hovold
2019-05-03  8:05             ` Petr Mladek
2019-05-06 23:00             ` Tobin C. Harding
2019-05-07  9:38               ` Johan Hovold
2019-05-02  2:31 ` Tobin C. Harding [this message]
2019-05-02  2:31 ` [RFC PATCH 5/5] livepatch: Do not manually track kobject initialization Tobin C. Harding
2019-05-02  7:12   ` Greg Kroah-Hartman
2019-05-02  7:30     ` Petr Mladek
2019-05-02  7:42       ` Greg Kroah-Hartman
2019-05-02  8:31       ` Tobin C. Harding
2019-05-02  8:51         ` Petr Mladek
2019-05-02 11:42 ` [RFC PATCH 0/5] kobject: Add and use init predicate Miroslav Benes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190502023142.20139-5-tobin@kernel.org \
    --to=tobin@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jikos@kernel.org \
    --cc=joe.lawrence@redhat.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=pmladek@suse.com \
    --cc=rafael@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.