Skip to content

Commit d1ba277

Browse files
htejungregkh
authored andcommitted
sysfs, driver-core: remove unused {sysfs|device}_schedule_callback_owner()
All device_schedule_callback_owner() users are converted to use device_remove_file_self(). Remove now unused {sysfs|device}_schedule_callback_owner(). Signed-off-by: Tejun Heo <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent bdbb0a1 commit d1ba277

File tree

4 files changed

+1
-144
lines changed

4 files changed

+1
-144
lines changed

drivers/base/core.c

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -615,39 +615,6 @@ void device_remove_bin_file(struct device *dev,
615615
}
616616
EXPORT_SYMBOL_GPL(device_remove_bin_file);
617617

618-
/**
619-
* device_schedule_callback_owner - helper to schedule a callback for a device
620-
* @dev: device.
621-
* @func: callback function to invoke later.
622-
* @owner: module owning the callback routine
623-
*
624-
* Attribute methods must not unregister themselves or their parent device
625-
* (which would amount to the same thing). Attempts to do so will deadlock,
626-
* since unregistration is mutually exclusive with driver callbacks.
627-
*
628-
* Instead methods can call this routine, which will attempt to allocate
629-
* and schedule a workqueue request to call back @func with @dev as its
630-
* argument in the workqueue's process context. @dev will be pinned until
631-
* @func returns.
632-
*
633-
* This routine is usually called via the inline device_schedule_callback(),
634-
* which automatically sets @owner to THIS_MODULE.
635-
*
636-
* Returns 0 if the request was submitted, -ENOMEM if storage could not
637-
* be allocated, -ENODEV if a reference to @owner isn't available.
638-
*
639-
* NOTE: This routine won't work if CONFIG_SYSFS isn't set! It uses an
640-
* underlying sysfs routine (since it is intended for use by attribute
641-
* methods), and if sysfs isn't available you'll get nothing but -ENOSYS.
642-
*/
643-
int device_schedule_callback_owner(struct device *dev,
644-
void (*func)(struct device *), struct module *owner)
645-
{
646-
return sysfs_schedule_callback(&dev->kobj,
647-
(void (*)(void *)) func, dev, owner);
648-
}
649-
EXPORT_SYMBOL_GPL(device_schedule_callback_owner);
650-
651618
static void klist_children_get(struct klist_node *n)
652619
{
653620
struct device_private *p = to_device_private_parent(n);

fs/sysfs/file.c

Lines changed: 0 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -453,95 +453,3 @@ void sysfs_remove_bin_file(struct kobject *kobj,
453453
kernfs_remove_by_name(kobj->sd, attr->attr.name);
454454
}
455455
EXPORT_SYMBOL_GPL(sysfs_remove_bin_file);
456-
457-
struct sysfs_schedule_callback_struct {
458-
struct list_head workq_list;
459-
struct kobject *kobj;
460-
void (*func)(void *);
461-
void *data;
462-
struct module *owner;
463-
struct work_struct work;
464-
};
465-
466-
static struct workqueue_struct *sysfs_workqueue;
467-
static DEFINE_MUTEX(sysfs_workq_mutex);
468-
static LIST_HEAD(sysfs_workq);
469-
static void sysfs_schedule_callback_work(struct work_struct *work)
470-
{
471-
struct sysfs_schedule_callback_struct *ss = container_of(work,
472-
struct sysfs_schedule_callback_struct, work);
473-
474-
(ss->func)(ss->data);
475-
kobject_put(ss->kobj);
476-
module_put(ss->owner);
477-
mutex_lock(&sysfs_workq_mutex);
478-
list_del(&ss->workq_list);
479-
mutex_unlock(&sysfs_workq_mutex);
480-
kfree(ss);
481-
}
482-
483-
/**
484-
* sysfs_schedule_callback - helper to schedule a callback for a kobject
485-
* @kobj: object we're acting for.
486-
* @func: callback function to invoke later.
487-
* @data: argument to pass to @func.
488-
* @owner: module owning the callback code
489-
*
490-
* sysfs attribute methods must not unregister themselves or their parent
491-
* kobject (which would amount to the same thing). Attempts to do so will
492-
* deadlock, since unregistration is mutually exclusive with driver
493-
* callbacks.
494-
*
495-
* Instead methods can call this routine, which will attempt to allocate
496-
* and schedule a workqueue request to call back @func with @data as its
497-
* argument in the workqueue's process context. @kobj will be pinned
498-
* until @func returns.
499-
*
500-
* Returns 0 if the request was submitted, -ENOMEM if storage could not
501-
* be allocated, -ENODEV if a reference to @owner isn't available,
502-
* -EAGAIN if a callback has already been scheduled for @kobj.
503-
*/
504-
int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
505-
void *data, struct module *owner)
506-
{
507-
struct sysfs_schedule_callback_struct *ss, *tmp;
508-
509-
if (!try_module_get(owner))
510-
return -ENODEV;
511-
512-
mutex_lock(&sysfs_workq_mutex);
513-
list_for_each_entry_safe(ss, tmp, &sysfs_workq, workq_list)
514-
if (ss->kobj == kobj) {
515-
module_put(owner);
516-
mutex_unlock(&sysfs_workq_mutex);
517-
return -EAGAIN;
518-
}
519-
mutex_unlock(&sysfs_workq_mutex);
520-
521-
if (sysfs_workqueue == NULL) {
522-
sysfs_workqueue = create_singlethread_workqueue("sysfsd");
523-
if (sysfs_workqueue == NULL) {
524-
module_put(owner);
525-
return -ENOMEM;
526-
}
527-
}
528-
529-
ss = kmalloc(sizeof(*ss), GFP_KERNEL);
530-
if (!ss) {
531-
module_put(owner);
532-
return -ENOMEM;
533-
}
534-
kobject_get(kobj);
535-
ss->kobj = kobj;
536-
ss->func = func;
537-
ss->data = data;
538-
ss->owner = owner;
539-
INIT_WORK(&ss->work, sysfs_schedule_callback_work);
540-
INIT_LIST_HEAD(&ss->workq_list);
541-
mutex_lock(&sysfs_workq_mutex);
542-
list_add_tail(&ss->workq_list, &sysfs_workq);
543-
mutex_unlock(&sysfs_workq_mutex);
544-
queue_work(sysfs_workqueue, &ss->work);
545-
return 0;
546-
}
547-
EXPORT_SYMBOL_GPL(sysfs_schedule_callback);

include/linux/device.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -566,12 +566,6 @@ extern int __must_check device_create_bin_file(struct device *dev,
566566
const struct bin_attribute *attr);
567567
extern void device_remove_bin_file(struct device *dev,
568568
const struct bin_attribute *attr);
569-
extern int device_schedule_callback_owner(struct device *dev,
570-
void (*func)(struct device *dev), struct module *owner);
571-
572-
/* This is a macro to avoid include problems with THIS_MODULE */
573-
#define device_schedule_callback(dev, func) \
574-
device_schedule_callback_owner(dev, func, THIS_MODULE)
575569

576570
/* device resource management */
577571
typedef void (*dr_release_t)(struct device *dev, void *res);
@@ -931,10 +925,7 @@ extern int device_online(struct device *dev);
931925
extern struct device *__root_device_register(const char *name,
932926
struct module *owner);
933927

934-
/*
935-
* This is a macro to avoid include problems with THIS_MODULE,
936-
* just as per what is done for device_schedule_callback() above.
937-
*/
928+
/* This is a macro to avoid include problems with THIS_MODULE */
938929
#define root_device_register(name) \
939930
__root_device_register(name, THIS_MODULE)
940931

include/linux/sysfs.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,6 @@ struct sysfs_ops {
178178

179179
#ifdef CONFIG_SYSFS
180180

181-
int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
182-
void *data, struct module *owner);
183-
184181
int __must_check sysfs_create_dir_ns(struct kobject *kobj, const void *ns);
185182
void sysfs_remove_dir(struct kobject *kobj);
186183
int __must_check sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
@@ -249,12 +246,6 @@ int __must_check sysfs_init(void);
249246

250247
#else /* CONFIG_SYSFS */
251248

252-
static inline int sysfs_schedule_callback(struct kobject *kobj,
253-
void (*func)(void *), void *data, struct module *owner)
254-
{
255-
return -ENOSYS;
256-
}
257-
258249
static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
259250
{
260251
return 0;

0 commit comments

Comments
 (0)