|
@@ -15,6 +15,7 @@
|
|
|
|
|
|
DECLARE_RWSEM(sysfs_rename_sem);
|
|
DECLARE_RWSEM(sysfs_rename_sem);
|
|
spinlock_t sysfs_lock = SPIN_LOCK_UNLOCKED;
|
|
spinlock_t sysfs_lock = SPIN_LOCK_UNLOCKED;
|
|
|
|
+spinlock_t kobj_sysfs_assoc_lock = SPIN_LOCK_UNLOCKED;
|
|
|
|
|
|
static spinlock_t sysfs_ino_lock = SPIN_LOCK_UNLOCKED;
|
|
static spinlock_t sysfs_ino_lock = SPIN_LOCK_UNLOCKED;
|
|
static DEFINE_IDA(sysfs_ino_ida);
|
|
static DEFINE_IDA(sysfs_ino_ida);
|
|
@@ -426,8 +427,13 @@ static void __sysfs_remove_dir(struct dentry *dentry)
|
|
|
|
|
|
void sysfs_remove_dir(struct kobject * kobj)
|
|
void sysfs_remove_dir(struct kobject * kobj)
|
|
{
|
|
{
|
|
- __sysfs_remove_dir(kobj->dentry);
|
|
|
|
|
|
+ struct dentry *d = kobj->dentry;
|
|
|
|
+
|
|
|
|
+ spin_lock(&kobj_sysfs_assoc_lock);
|
|
kobj->dentry = NULL;
|
|
kobj->dentry = NULL;
|
|
|
|
+ spin_unlock(&kobj_sysfs_assoc_lock);
|
|
|
|
+
|
|
|
|
+ __sysfs_remove_dir(d);
|
|
}
|
|
}
|
|
|
|
|
|
int sysfs_rename_dir(struct kobject * kobj, struct dentry *new_parent,
|
|
int sysfs_rename_dir(struct kobject * kobj, struct dentry *new_parent,
|