ENTRY;
OBD_ALLOC(ns, sizeof(*ns));
- if (!ns) {
- LBUG();
- GOTO(out, NULL);
- }
+ if (!ns)
+ RETURN(NULL);
ns->ns_hash = vmalloc(sizeof(*ns->ns_hash) * RES_HASH_SIZE);
- if (!ns->ns_hash) {
- LBUG();
- GOTO(out, ns);
- }
- obd_memory += sizeof(*ns->ns_hash) * RES_HASH_SIZE;
+ if (!ns->ns_hash)
+ GOTO(out_ns, NULL);
+
+ atomic_add(sizeof(*ns->ns_hash) * RES_HASH_SIZE, &obd_memory);
OBD_ALLOC(ns->ns_name, strlen(name) + 1);
- if (!ns->ns_name) {
- LBUG();
- GOTO(out, ns);
- }
+ if (!ns->ns_name)
+ GOTO(out_hash, NULL);
+
strcpy(ns->ns_name, name);
INIT_LIST_HEAD(&ns->ns_root_list);
ldlm_proc_namespace(ns);
RETURN(ns);
- out:
- if (ns && ns->ns_hash) {
- memset(ns->ns_hash, 0x5a, sizeof(*ns->ns_hash) * RES_HASH_SIZE);
- vfree(ns->ns_hash);
- obd_memory -= sizeof(*ns->ns_hash) * RES_HASH_SIZE;
- }
- if (ns && ns->ns_name)
- OBD_FREE(ns->ns_name, strlen(name) + 1);
- if (ns)
- OBD_FREE(ns, sizeof(*ns));
+out_hash:
+ memset(ns->ns_hash, 0x5a, sizeof(*ns->ns_hash) * RES_HASH_SIZE);
+ vfree(ns->ns_hash);
+ atomic_sub(sizeof(*ns->ns_hash) * RES_HASH_SIZE, &obd_memory);
+out_ns:
+ OBD_FREE(ns, sizeof(*ns));
return NULL;
}
memset(ns->ns_hash, 0x5a, sizeof(*ns->ns_hash) * RES_HASH_SIZE);
vfree(ns->ns_hash /* , sizeof(*ns->ns_hash) * RES_HASH_SIZE */);
- obd_memory -= sizeof(*ns->ns_hash) * RES_HASH_SIZE;
+ atomic_sub(sizeof(*ns->ns_hash) * RES_HASH_SIZE, &obd_memory);
OBD_FREE(ns->ns_name, strlen(ns->ns_name) + 1);
OBD_FREE(ns, sizeof(*ns));
ENTRY;
CDEBUG(D_INFO, "putref res: %p count: %d\n", res,
atomic_read(&res->lr_refcount));
- out:
LASSERT(atomic_read(&res->lr_refcount) >= 0);
}