aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2017-09-18 17:14:13 +0000
committerConrad Meyer <cem@FreeBSD.org>2017-09-18 17:14:13 +0000
commit4d367f25014f8ff5241b91f693b97fcc4f6e7de6 (patch)
tree9e61b7f7be930d50acde238b7378c5bf9822e76e
parenteb039c2661bbdc6e61e31c908f1a33b33a553006 (diff)
Notes
-rw-r--r--sys/compat/linsysfs/linsysfs.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/sys/compat/linsysfs/linsysfs.c b/sys/compat/linsysfs/linsysfs.c
index ce1262cd0908..d171d9e2f494 100644
--- a/sys/compat/linsysfs/linsysfs.c
+++ b/sys/compat/linsysfs/linsysfs.c
@@ -252,7 +252,7 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, stru
{
struct scsi_host_queue *scsi_host;
struct pfs_node *sub_dir, *cur_file, *cur_chardev;
- int i, nchildren;
+ int i, nchildren, error;
device_t *children, parent;
devclass_t devclass;
const char *name = NULL;
@@ -353,13 +353,15 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, stru
}
}
- dinfo = device_get_ivars(parent);
- if (dinfo != NULL && dinfo->cfg.baseclass == PCIC_DISPLAY) {
- devclass = device_get_devclass(dev);
- if (devclass != NULL)
- name = devclass_get_name(devclass);
- if (name != NULL && strcmp(name, DRMN_DEV) == 0 &&
- device_get_unit(dev) >= 0) {
+ devclass = device_get_devclass(dev);
+ if (devclass != NULL)
+ name = devclass_get_name(devclass);
+ else
+ name = NULL;
+ if (name != NULL && strcmp(name, DRMN_DEV) == 0 &&
+ device_get_unit(dev) >= 0) {
+ dinfo = device_get_ivars(parent);
+ if (dinfo != NULL && dinfo->cfg.baseclass == PCIC_DISPLAY) {
sprintf(chardevname, "226:%d",
device_get_unit(dev));
cur_chardev = pfs_create_dir(chardev,
@@ -376,10 +378,13 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, stru
}
}
- device_get_children(dev, &children, &nchildren);
- for (i = 0; i < nchildren; i++) {
- if (children[i])
- linsysfs_run_bus(children[i], dir, scsi, chardev, new_path, prefix);
+ error = device_get_children(dev, &children, &nchildren);
+ if (error == 0) {
+ for (i = 0; i < nchildren; i++)
+ if (children[i])
+ linsysfs_run_bus(children[i], dir, scsi,
+ chardev, new_path, prefix);
+ free(children, M_TEMP);
}
if (new_path != path)
free(new_path, M_TEMP);