Hi Tejun, Thanks for tracking this down and fixing it.
On 7/18/07, Tejun Heo <[EMAIL PROTECTED]> wrote:
There is a subtle bug in sysfs_create_link() failure path. When symlink creation fails because there's already a node with the same name, the target sysfs_dirent is put twice - once by failure path of sysfs_create_link() and once more when the symlink is released.
The "symlink" is released? But the creation of the symlink is precisely what failed here ... did it not?
Fix it by making only the symlink node responsible for putting target_sd.
And again ... the changelog sounds confusing indeed, perhaps I'm not familiar enough with sysfs symlink-related terminology/semantics. Care to elaborate?
sd = sysfs_new_dirent(name, S_IFLNK|S_IRWXUGO, SYSFS_KOBJ_LINK); if (!sd) goto out_put; + sd->s_elem.symlink.target_sd = target_sd; + target_sd = NULL; /* reference is now owned by the symlink */
Wow. This looks like a very mysterious way to fix a mysterious bug :-) BTW I just looked over at sysfs_create_link() and ... it looks quite ... unnecessarily complicated/obfuscated ... Thanks again, Satyam - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/