mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
Fix libsysfs issue with relying on the detach_state file to be
present in order to traverse the tree properly. Based on a patch from Daniel Stekloff <dsteklof@us.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
60f4473352
commit
b479b4887f
@ -383,7 +383,7 @@ struct sysfs_device *sysfs_open_device(const char *bus, const char *bus_id)
|
||||
*/
|
||||
struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
|
||||
{
|
||||
char ppath[SYSFS_PATH_MAX], *tmp;
|
||||
char ppath[SYSFS_PATH_MAX], dpath[SYSFS_PATH_MAX], *tmp;
|
||||
|
||||
if (!dev) {
|
||||
errno = EINVAL;
|
||||
@ -394,6 +394,7 @@ struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
|
||||
return (dev->parent);
|
||||
|
||||
memset(ppath, 0, SYSFS_PATH_MAX);
|
||||
memset(dpath, 0, SYSFS_PATH_MAX);
|
||||
safestrcpy(ppath, dev->path);
|
||||
tmp = strrchr(ppath, '/');
|
||||
if (!tmp) {
|
||||
@ -410,16 +411,14 @@ struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
|
||||
}
|
||||
*tmp = '\0';
|
||||
|
||||
/*
|
||||
* All "devices" have the "detach_state" attribute - validate here
|
||||
*/
|
||||
safestrcat(ppath, "/detach_state");
|
||||
if (sysfs_path_is_file(ppath)) {
|
||||
/* Make sure we're not at the top of the device tree */
|
||||
sysfs_get_mnt_path(dpath, SYSFS_PATH_MAX);
|
||||
safestrcat(dpath, "/" SYSFS_DEVICES_NAME);
|
||||
if (strcmp(dpath, ppath) == 0) {
|
||||
dprintf("Device at %s does not have a parent\n", dev->path);
|
||||
return NULL;
|
||||
}
|
||||
tmp = strrchr(ppath, '/');
|
||||
*tmp = '\0';
|
||||
|
||||
dev->parent = sysfs_open_device_path(ppath);
|
||||
if (!dev->parent) {
|
||||
dprintf("Error opening device %s's parent at %s\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user