- struct proc_dir_entry *nodemap_proc_entry;
- int rc = 0;
-
- if (is_default)
- nodemap_proc_entry =
- lprocfs_register(name, proc_lustre_nodemap_root,
- lprocfs_default_nodemap_vars,
- nodemap);
+ struct nodemap_pde *nm_entry;
+ int rc = 0;
+
+ OBD_ALLOC_PTR(nm_entry);
+ if (nm_entry == NULL)
+ GOTO(out, rc = -ENOMEM);
+
+ nm_entry->npe_proc_entry = proc_mkdir(nodemap->nm_name,
+ proc_lustre_nodemap_root);
+ if (IS_ERR(nm_entry->npe_proc_entry))
+ GOTO(out, rc = PTR_ERR(nm_entry->npe_proc_entry));
+
+ snprintf(nm_entry->npe_name, sizeof(nm_entry->npe_name), "%s",
+ nodemap->nm_name);
+
+ /* Use the nodemap name as stored on the PDE as the private data. This
+ * is so a nodemap struct can be replaced without updating the proc
+ * entries.
+ */
+ rc = lprocfs_add_vars(nm_entry->npe_proc_entry,
+ (is_default ? lprocfs_default_nodemap_vars :
+ lprocfs_nodemap_vars),
+ nm_entry->npe_name);
+ if (rc != 0)
+ lprocfs_remove(&nm_entry->npe_proc_entry);