+ down(&nodemgr_ud_class.sem);
+ count = 0;
+ list_for_each_entry(cdev, &nodemgr_ud_class.children, node) {
+ ud = container_of(cdev, struct unit_directory, class_dev);
+ if (ud->ne == ne)
+ count++;
+ }
+ if (!count) {
+ up(&nodemgr_ud_class.sem);
+ mutex_unlock(&nodemgr_serialize_remove_uds);
+ return;
+ }
+ unreg = kcalloc(count, sizeof(*unreg), GFP_KERNEL);
+ if (!unreg) {
+ HPSB_ERR("NodeMgr: out of memory in nodemgr_remove_uds");
+ up(&nodemgr_ud_class.sem);
+ mutex_unlock(&nodemgr_serialize_remove_uds);
+ return;
+ }
+ i = 0;
+ list_for_each_entry(cdev, &nodemgr_ud_class.children, node) {
+ ud = container_of(cdev, struct unit_directory, class_dev);
+ if (ud->ne == ne) {
+ BUG_ON(i >= count);
+ unreg[i++] = ud;
+ }
+ }
+ up(&nodemgr_ud_class.sem);