difficult to figure out which node is suffering from symbol errors.
This patch addresses the problem by providing a function to build the node
description. If the provided source string for the description contains an
'@' character, the function will substitute the current utsname.
This ensures that even after a fabric has been completely initialized, if
a node's hostname changes, that change will be reflected in the next sweep
of the SM, but also maintains compatibility with existing code since the
behavior is unchanged if the description string does not contain an '@'
character.
Signed-off-by: Michael Heinz <michael.heinz@qlogic.com>
---
drivers/infiniband/core/mad.c | 18 ++++++++++++++++++
include/rdma/ib_mad.h | 8 ++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
@@ -41,6 +41,7 @@
#include "mad_rmpp.h"
#include "smi.h"
#include "agent.h"
+#include "linux/utsname.h"
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("kernel IB MAD API");
@@ -932,6 +933,23 @@ int ib_get_mad_data_offset(u8 mgmt_class)
}
EXPORT_SYMBOL(ib_get_mad_data_offset);
+void ib_build_node_desc(char *dest, char *src)
+{
+ int i;
+ for (i = 0; i < 64;) {
+ if (*src == '@') {
+ char *name = init_utsname()->nodename;
+ for (; *name && (*name != '.') && (i < 64); ++i)
+ *dest++ = *name++;
+ src++;
+ } else {
+ *dest++ = *src++;
+ i++;
+ }
+ }
+}
+EXPORT_SYMBOL(ib_build_node_desc);
+
int ib_is_mad_class_rmpp(u8 mgmt_class)
{
if ((mgmt_class == IB_MGMT_CLASS_SUBN_ADM) ||
@@ -637,6 +637,14 @@ int ib_is_mad_class_rmpp(u8 mgmt_class);
int ib_get_mad_data_offset(u8 mgmt_class);
/**
+ * ib_build_node_desc - copies the node description and replaces
+ * any @ markers with the present system node name.
+ * @dest: destination
+ * @src: source
+ */
+void ib_build_node_desc(char *dest, char *src);
+
+/**
* ib_get_rmpp_segment - returns the data buffer for a given RMPP segment.
* @send_buf: Previously allocated send data buffer.
* @seg_num: number of segment to return