Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb4c6903 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Revert "kobject: introduce kobj_completion"



This reverts commit eee03164.

Jeff writes:
	I have no objections to reverting it. There were concerns from
	Al Viro that it'd be tough to get right by callers and I had
	assumed it got dropped after that. I had planned on using it in
	my btrfs sysfs exports patchset but came up with a better way.

Cc: Jeff Mahoney <jeffm@suse.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5bd2010f
Loading
Loading
Loading
Loading

include/linux/kobj_completion.h

deleted100644 → 0
+0 −18
Original line number Diff line number Diff line
#ifndef _KOBJ_COMPLETION_H_
#define _KOBJ_COMPLETION_H_

#include <linux/kobject.h>
#include <linux/completion.h>

struct kobj_completion {
	struct kobject kc_kobj;
	struct completion kc_unregister;
};

#define kobj_to_kobj_completion(kobj) \
	container_of(kobj, struct kobj_completion, kc_kobj)

void kobj_completion_init(struct kobj_completion *kc, struct kobj_type *ktype);
void kobj_completion_release(struct kobject *kobj);
void kobj_completion_del_and_wait(struct kobj_completion *kc);
#endif /* _KOBJ_COMPLETION_H_ */
+0 −50
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@
 */

#include <linux/kobject.h>
#include <linux/kobj_completion.h>
#include <linux/string.h>
#include <linux/export.h>
#include <linux/stat.h>
@@ -781,55 +780,6 @@ const struct sysfs_ops kobj_sysfs_ops = {
	.store	= kobj_attr_store,
};

/**
 * kobj_completion_init - initialize a kobj_completion object.
 * @kc: kobj_completion
 * @ktype: type of kobject to initialize
 *
 * kobj_completion structures can be embedded within structures with different
 * lifetime rules.  During the release of the enclosing object, we can
 * wait on the release of the kobject so that we don't free it while it's
 * still busy.
 */
void kobj_completion_init(struct kobj_completion *kc, struct kobj_type *ktype)
{
	init_completion(&kc->kc_unregister);
	kobject_init(&kc->kc_kobj, ktype);
}
EXPORT_SYMBOL_GPL(kobj_completion_init);

/**
 * kobj_completion_release - release a kobj_completion object
 * @kobj: kobject embedded in kobj_completion
 *
 * Used with kobject_release to notify waiters that the kobject has been
 * released.
 */
void kobj_completion_release(struct kobject *kobj)
{
	struct kobj_completion *kc = kobj_to_kobj_completion(kobj);
	complete(&kc->kc_unregister);
}
EXPORT_SYMBOL_GPL(kobj_completion_release);

/**
 * kobj_completion_del_and_wait - release the kobject and wait for it
 * @kc: kobj_completion object to release
 *
 * Delete the kobject from sysfs and drop the reference count.  Then wait
 * until any other outstanding references are also dropped.  This routine
 * is only necessary once other references may have been taken on the
 * kobject.  Typically this happens when the kobject has been published
 * to sysfs via kobject_add.
 */
void kobj_completion_del_and_wait(struct kobj_completion *kc)
{
	kobject_del(&kc->kc_kobj);
	kobject_put(&kc->kc_kobj);
	wait_for_completion(&kc->kc_unregister);
}
EXPORT_SYMBOL_GPL(kobj_completion_del_and_wait);

/**
 * kset_register - initialize and add a kset.
 * @k: kset.