mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
sysfs: sysfs_add_one WARNs with full path to duplicate filename
sysfs: sysfs_add_one WARNs with full path to duplicate filename As a debugging aid, it can be useful to know the full path to a duplicate file being created in sysfs. We now will display warnings such as: sysfs: cannot create duplicate filename '/foo' when attempting to create multiple files named 'foo' in the sysfs root, or: sysfs: cannot create duplicate filename '/bus/pci/slots/5/foo' when attempting to create multiple files named 'foo' under a given directory in sysfs. The path displayed is always a relative path to sysfs_root. The leading '/' in the path name refers to the sysfs_root mount point, and should not be confused with the "real" '/'. Thanks to Alex Williamson for essentially writing sysfs_pathname. Cc: Alex Williamson <alex.williamson@hp.com> Signed-off-by: Alex Chiang <achiang@hp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f48f3febb2
commit
425cb02912
1 changed files with 30 additions and 2 deletions
|
@ -433,6 +433,26 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_pathname - return full path to sysfs dirent
|
||||||
|
* @sd: sysfs_dirent whose path we want
|
||||||
|
* @path: caller allocated buffer
|
||||||
|
*
|
||||||
|
* Gives the name "/" to the sysfs_root entry; any path returned
|
||||||
|
* is relative to wherever sysfs is mounted.
|
||||||
|
*
|
||||||
|
* XXX: does no error checking on @path size
|
||||||
|
*/
|
||||||
|
static char *sysfs_pathname(struct sysfs_dirent *sd, char *path)
|
||||||
|
{
|
||||||
|
if (sd->s_parent) {
|
||||||
|
sysfs_pathname(sd->s_parent, path);
|
||||||
|
strcat(path, "/");
|
||||||
|
}
|
||||||
|
strcat(path, sd->s_name);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sysfs_add_one - add sysfs_dirent to parent
|
* sysfs_add_one - add sysfs_dirent to parent
|
||||||
* @acxt: addrm context to use
|
* @acxt: addrm context to use
|
||||||
|
@ -458,8 +478,16 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = __sysfs_add_one(acxt, sd);
|
ret = __sysfs_add_one(acxt, sd);
|
||||||
WARN(ret == -EEXIST, KERN_WARNING "sysfs: duplicate filename '%s' "
|
if (ret == -EEXIST) {
|
||||||
"can not be created\n", sd->s_name);
|
char *path = kzalloc(PATH_MAX, GFP_KERNEL);
|
||||||
|
WARN(1, KERN_WARNING
|
||||||
|
"sysfs: cannot create duplicate filename '%s'\n",
|
||||||
|
(path == NULL) ? sd->s_name :
|
||||||
|
strcat(strcat(sysfs_pathname(acxt->parent_sd, path), "/"),
|
||||||
|
sd->s_name));
|
||||||
|
kfree(path);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue