Hello,hello,Tejun. Nice. But seems I still have different opinion :). If you look at the 'sysfs_do_create_link_sd()'
On Fri, Jul 26, 2013 at 05:59:00PM +0800, Dennis Chen wrote:On 07/26/2013 05:49 PM, Dennis Chen wrote:I don't think sysfs is supposed to handle multiple actors trying to
The patch is trying its best to avoid creating a dir under a parent dir which is removing from
the system:
PATH0 (create a dir under 'PARENT/...') PATH1 (remove the 'PARENT/...')
sysfs_create_dir() { sysfs_remove_dir() {
... ...
if (kobj->parent) spin_lock(&sysfs_assoc_lock);
parent_sd = kobj->parent->sd; <----- kobj->sd = NULL;
else spin_unlock(&sysfs_assoc_lock);
parent_sd = &sysfs_root;
Suppose PATH1 enter the critical section first, then PATH0 begin to execute before kobj->sd
has been reset to NULL, possibly PATH0 will get a non-NULL parent_sd since lack of the
sysfs_assoc_lock protection in PATH0. In this case, PATH0 think it has a valid parent_sd which
can be freed by PATH1 in the followed, refer to the comments in the patch. Maybe we need
to figure out a perfect solution to solve the race condition, although the codes in question are
in slow path...
populate and destroy the directory at the same time at all, so this
seems kinda moot. Do you have a case where this actually matters?
Thanks.