r = safe_atolu_full(attr, 10, &dev_port);
if (r < 0)
log_device_debug_errno(dev, r, "Failed to parse attribute dev_port, ignoring: %m");
+
/* With older kernels IP-over-InfiniBand network interfaces sometimes erroneously
* provide the port number in the 'dev_id' sysfs attribute instead of 'dev_port',
* which thus stays initialized as 0. */
if (dev_port == 0 &&
- sd_device_get_sysattr_value(dev, "type", &attr) >= 0) {
- unsigned long type;
-
- r = safe_atolu_full(attr, 10, &type);
+ info->iftype == ARPHRD_INFINIBAND &&
+ sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) {
+ r = safe_atolu_full(attr, 10, &dev_port);
if (r < 0)
- log_device_debug_errno(dev, r, "Failed to parse attribute type, ignoring: %m");
- else if (type == ARPHRD_INFINIBAND &&
- sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) {
- r = safe_atolu_full(attr, 10, &dev_port);
- if (r < 0)
- log_device_debug_errno(dev, r, "Failed to parse attribute dev_id, ignoring: %m");
- }
+ log_device_debug_errno(dev, r, "Failed to parse attribute dev_id, ignoring: %m");
}
}