static int sysfs_getlink(struct dentry *dentry, char * path) { struct sysfs_dirent *sd = dentry->d_fsdata; struct sysfs_dirent *parent_sd = sd->s_parent; struct sysfs_dirent *target_sd = sd->s_symlink.target_sd; int error; mutex_lock(&sysfs_mutex); error = sysfs_get_target_path(parent_sd, target_sd, path); mutex_unlock(&sysfs_mutex); return error; }
static int sysfs_getlink(struct dentry *dentry, char * path) { struct kobject *kobj, *target_kobj; int error = 0; kobj = sysfs_get_kobject(dentry->d_parent); if (!kobj) return -EINVAL; target_kobj = sysfs_get_kobject(dentry); if (!target_kobj) { kobject_put(kobj); return -EINVAL; } down_read(&sysfs_rename_sem); error = sysfs_get_target_path(kobj, target_kobj, path); up_read(&sysfs_rename_sem); kobject_put(kobj); kobject_put(target_kobj); return error; }