Return the underlying error in ldlm_namespace_new() from
ldlm_namespace_sysfs_register() to the caller instead of NULL.
Otherwise, the callers convert the NULL to -ENOMEM and this
is incorrectly reported as an allocation error to the user.
sysfs: cannot create duplicate filename
'/fs/lustre/ldlm/namespaces/lustre-OST0002-osc-
ffff89f33be70000'
mount.lustre: mount mgs:/lfs at /lfs failed: Cannot allocate memory
Change ldlm_namespace_new() to return errors via PTR_ERR() and
change the callers to use IS_ERR().
Fix associated CERROR() messages to follow proper code style.
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I7d590c7242399549b32b1c4189e46ff8748c8096
Reviewed-on: https://review.whamcloud.com/40851
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
LDLM_NAMESPACE_CLIENT,
LDLM_NAMESPACE_GREEDY,
ns_type);
- if (obd->obd_namespace == NULL) {
- CERROR("Unable to create client namespace - %s\n",
- obd->obd_name);
- GOTO(err_import, rc = -ENOMEM);
+ if (IS_ERR(obd->obd_namespace)) {
+ rc = PTR_ERR(obd->obd_namespace);
+ CERROR("%s: unable to create client namespace: rc = %d\n",
+ obd->obd_name, rc);
+ obd->obd_namespace = NULL;
+ GOTO(err_import, rc);
}
RETURN(rc);
OBD_FREE(cli->cl_mod_tag_bitmap,
BITS_TO_LONGS(OBD_MAX_RIF_MAX) * sizeof(long));
cli->cl_mod_tag_bitmap = NULL;
- RETURN(rc);
+ RETURN(rc);
}
EXPORT_SYMBOL(client_obd_setup);
rc = ldlm_get_ref();
if (rc) {
- CERROR("ldlm_get_ref failed: %d\n", rc);
- RETURN(NULL);
+ CERROR("%s: ldlm_get_ref failed: rc = %d\n", name, rc);
+ RETURN(ERR_PTR(rc));
}
if (ns_type >= ARRAY_SIZE(ldlm_ns_hash_defs) ||
ldlm_ns_hash_defs[ns_type].nsd_bkt_bits == 0) {
- CERROR("Unknown type %d for ns %s\n", ns_type, name);
- GOTO(out_ref, NULL);
+ rc = -EINVAL;
+ CERROR("%s: unknown namespace type %d: rc = %d\n",
+ name, ns_type, rc);
+ GOTO(out_ref, rc);
}
OBD_ALLOC_PTR(ns);
if (!ns)
- GOTO(out_ref, NULL);
+ GOTO(out_ref, rc = -ENOMEM);
ns->ns_rs_hash = cfs_hash_create(name,
ldlm_ns_hash_defs[ns_type].nsd_all_bits,
CFS_HASH_BIGNAME |
CFS_HASH_SPIN_BKTLOCK |
CFS_HASH_NO_ITEMREF);
- if (ns->ns_rs_hash == NULL)
- GOTO(out_ns, NULL);
+ if (!ns->ns_rs_hash)
+ GOTO(out_ns, rc = -ENOMEM);
ns->ns_bucket_bits = ldlm_ns_hash_defs[ns_type].nsd_all_bits -
ldlm_ns_hash_defs[ns_type].nsd_bkt_bits;
OBD_ALLOC_PTR_ARRAY_LARGE(ns->ns_rs_buckets, 1 << ns->ns_bucket_bits);
if (!ns->ns_rs_buckets)
- goto out_hash;
+ GOTO(out_hash, rc = -ENOMEM);
for (idx = 0; idx < (1 << ns->ns_bucket_bits); idx++) {
struct ldlm_ns_bucket *nsb = &ns->ns_rs_buckets[idx];
ns->ns_client = client;
ns->ns_name = kstrdup(name, GFP_KERNEL);
if (!ns->ns_name)
- goto out_hash;
+ GOTO(out_hash, rc = -ENOMEM);
INIT_LIST_HEAD(&ns->ns_list_chain);
INIT_LIST_HEAD(&ns->ns_unused_list);
rc = ldlm_namespace_sysfs_register(ns);
if (rc) {
- CERROR("Can't initialize ns sysfs, rc %d\n", rc);
+ CERROR("%s: cannot initialize ns sysfs: rc = %d\n", name, rc);
GOTO(out_hash, rc);
}
rc = ldlm_namespace_debugfs_register(ns);
if (rc) {
- CERROR("Can't initialize ns proc, rc %d\n", rc);
+ CERROR("%s: cannot initialize ns proc: rc = %d\n", name, rc);
GOTO(out_sysfs, rc);
}
idx = ldlm_namespace_nr_read(client);
rc = ldlm_pool_init(&ns->ns_pool, ns, idx, client);
if (rc) {
- CERROR("Can't initialize lock pool, rc %d\n", rc);
+ CERROR("%s: cannot initialize lock pool, rc = %d\n", name, rc);
GOTO(out_proc, rc);
}
OBD_FREE_PTR(ns);
out_ref:
ldlm_put_ref();
- RETURN(NULL);
+ RETURN(ERR_PTR(rc));
}
EXPORT_SYMBOL(ldlm_namespace_new);
LDLM_NAMESPACE_SERVER,
LDLM_NAMESPACE_GREEDY,
LDLM_NS_TYPE_MDT);
- if (m->mdt_namespace == NULL)
- GOTO(err_fini_seq, rc = -ENOMEM);
+ if (IS_ERR(m->mdt_namespace)) {
+ rc = PTR_ERR(m->mdt_namespace);
+ CERROR("%s: unable to create server namespace: rc = %d\n",
+ obd->obd_name, rc);
+ m->mdt_namespace = NULL;
+ GOTO(err_fini_seq, rc);
+ }
m->mdt_namespace->ns_lvbp = m;
m->mdt_namespace->ns_lvbo = &mdt_lvbo;
LDLM_NAMESPACE_SERVER,
LDLM_NAMESPACE_MODEST,
LDLM_NS_TYPE_MGT);
- if (obd->obd_namespace == NULL)
- GOTO(err_ops, rc = -ENOMEM);
+ if (IS_ERR(obd->obd_namespace)) {
+ rc = PTR_ERR(obd->obd_namespace);
+ CERROR("%s: unable to create server namespace: rc = %d\n",
+ obd->obd_name, rc);
+ obd->obd_namespace = NULL;
+ GOTO(err_ops, rc);
+ }
/* No recovery for MGCs */
obd->obd_replayable = 0;
LDLM_NAMESPACE_SERVER,
LDLM_NAMESPACE_MODEST,
LDLM_NS_TYPE_OST);
- if (!obd->obd_namespace)
- RETURN(-ENOMEM);
+ if (IS_ERR(obd->obd_namespace)) {
+ rc = PTR_ERR(obd->obd_namespace);
+ CERROR("%s: unable to create server namespace: rc = %d\n",
+ obd->obd_name, rc);
+ obd->obd_namespace = NULL;
+ RETURN(rc);
+ }
obd->obd_vars = lprocfs_echo_obd_vars;
if (!lprocfs_obd_setup(obd, true) &&
LDLM_NAMESPACE_SERVER,
LDLM_NAMESPACE_GREEDY,
LDLM_NS_TYPE_OST);
- if (m->ofd_namespace == NULL)
- GOTO(err_fini_stack, rc = -ENOMEM);
+ if (IS_ERR(m->ofd_namespace)) {
+ rc = PTR_ERR(m->ofd_namespace);
+ CERROR("%s: unable to create server namespace: rc = %d\n",
+ obd->obd_name, rc);
+ m->ofd_namespace = NULL;
+ GOTO(err_fini_stack, rc);
+ }
/* set obd_namespace for compatibility with old code */
obd->obd_namespace = m->ofd_namespace;
ldlm_register_intent(m->ofd_namespace, ofd_intent_policy);