diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-28 19:47:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-28 19:47:34 -0400 |
commit | 89fbb69c4f285019ba5e029963dc11cc6beb078a (patch) | |
tree | d918cd1ba0ef9afa692cef281afee2f6d6634a1e /drivers/infiniband/core/sysfs.c | |
parent | 7efe5d7c3e3a82e43b0f8fb29c6797317bce7a9a (diff) | |
parent | 4cce3390c998600f6648e075e475cf8f6dd8cebe (diff) |
Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband
Diffstat (limited to 'drivers/infiniband/core/sysfs.c')
-rw-r--r-- | drivers/infiniband/core/sysfs.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index 211ba3223f6..7ce7a6c782f 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c | |||
@@ -65,6 +65,11 @@ struct port_table_attribute { | |||
65 | int index; | 65 | int index; |
66 | }; | 66 | }; |
67 | 67 | ||
68 | static inline int ibdev_is_alive(const struct ib_device *dev) | ||
69 | { | ||
70 | return dev->reg_state == IB_DEV_REGISTERED; | ||
71 | } | ||
72 | |||
68 | static ssize_t port_attr_show(struct kobject *kobj, | 73 | static ssize_t port_attr_show(struct kobject *kobj, |
69 | struct attribute *attr, char *buf) | 74 | struct attribute *attr, char *buf) |
70 | { | 75 | { |
@@ -74,6 +79,8 @@ static ssize_t port_attr_show(struct kobject *kobj, | |||
74 | 79 | ||
75 | if (!port_attr->show) | 80 | if (!port_attr->show) |
76 | return -EIO; | 81 | return -EIO; |
82 | if (!ibdev_is_alive(p->ibdev)) | ||
83 | return -ENODEV; | ||
77 | 84 | ||
78 | return port_attr->show(p, port_attr, buf); | 85 | return port_attr->show(p, port_attr, buf); |
79 | } | 86 | } |
@@ -581,6 +588,9 @@ static ssize_t show_node_type(struct class_device *cdev, char *buf) | |||
581 | { | 588 | { |
582 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 589 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); |
583 | 590 | ||
591 | if (!ibdev_is_alive(dev)) | ||
592 | return -ENODEV; | ||
593 | |||
584 | switch (dev->node_type) { | 594 | switch (dev->node_type) { |
585 | case IB_NODE_CA: return sprintf(buf, "%d: CA\n", dev->node_type); | 595 | case IB_NODE_CA: return sprintf(buf, "%d: CA\n", dev->node_type); |
586 | case IB_NODE_SWITCH: return sprintf(buf, "%d: switch\n", dev->node_type); | 596 | case IB_NODE_SWITCH: return sprintf(buf, "%d: switch\n", dev->node_type); |
@@ -595,6 +605,9 @@ static ssize_t show_sys_image_guid(struct class_device *cdev, char *buf) | |||
595 | struct ib_device_attr attr; | 605 | struct ib_device_attr attr; |
596 | ssize_t ret; | 606 | ssize_t ret; |
597 | 607 | ||
608 | if (!ibdev_is_alive(dev)) | ||
609 | return -ENODEV; | ||
610 | |||
598 | ret = ib_query_device(dev, &attr); | 611 | ret = ib_query_device(dev, &attr); |
599 | if (ret) | 612 | if (ret) |
600 | return ret; | 613 | return ret; |
@@ -612,6 +625,9 @@ static ssize_t show_node_guid(struct class_device *cdev, char *buf) | |||
612 | struct ib_device_attr attr; | 625 | struct ib_device_attr attr; |
613 | ssize_t ret; | 626 | ssize_t ret; |
614 | 627 | ||
628 | if (!ibdev_is_alive(dev)) | ||
629 | return -ENODEV; | ||
630 | |||
615 | ret = ib_query_device(dev, &attr); | 631 | ret = ib_query_device(dev, &attr); |
616 | if (ret) | 632 | if (ret) |
617 | return ret; | 633 | return ret; |