From 7c9b3683737d26df3f0425274437ee87c769f770 Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Wed, 15 Aug 2012 09:49:34 +0400 Subject: [PATCH] LU-1301 helpers: quiet class_parse_nid() class_parse_nid_quiet() is a version of class_parse_nid() which doesn't complain on an invalid nid. i.e. used in obd_mount.c where nid can be followed by another (non-nid) mount option. Signed-off-by: Alex Zhuravlev Change-Id: I8938a50e56007bd626b207e4a69a2a76c572632d Reviewed-on: http://review.whamcloud.com/3678 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin --- lustre/include/lustre_param.h | 1 + lustre/mgs/mgs_handler.c | 2 +- lustre/obdclass/obd_config.c | 20 ++++++++++++++------ lustre/obdclass/obd_mount.c | 4 ++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lustre/include/lustre_param.h b/lustre/include/lustre_param.h index 9c53292..320f641 100644 --- a/lustre/include/lustre_param.h +++ b/lustre/include/lustre_param.h @@ -61,6 +61,7 @@ struct cfg_interop_param *class_find_old_param(const char *param, int class_get_next_param(char **params, char *copy); int class_match_param(char *buf, char *key, char **valp); int class_parse_nid(char *buf, lnet_nid_t *nid, char **endh); +int class_parse_nid_quiet(char *buf, lnet_nid_t *nid, char **endh); int class_parse_net(char *buf, __u32 *net, char **endh); int class_match_nid(char *buf, char *key, lnet_nid_t nid); int class_match_net(char *buf, char *key, __u32 net); diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index e5bff51..5d4a143 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -306,7 +306,7 @@ static int mgs_check_failover_reg(struct mgs_target_info *mti) ptr = mti->mti_params; while (class_find_param(ptr, PARAM_FAILNODE, &ptr) == 0) { - while (class_parse_nid(ptr, &nid, &ptr) == 0) { + while (class_parse_nid_quiet(ptr, &nid, &ptr) == 0) { for (i = 0; i < mti->mti_nid_count; i++) { if (nid == mti->mti_nids[i]) { LCONSOLE_WARN("Denying initial registra" diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c index 96460bb..c48bd9e 100644 --- a/lustre/obdclass/obd_config.c +++ b/lustre/obdclass/obd_config.c @@ -203,7 +203,7 @@ int class_match_param(char *buf, char *key, char **valp) } EXPORT_SYMBOL(class_match_param); -static int parse_nid(char *buf, void *value) +static int parse_nid(char *buf, void *value, int quiet) { lnet_nid_t *nid = (lnet_nid_t *)value; @@ -211,7 +211,8 @@ static int parse_nid(char *buf, void *value) if (*nid != LNET_NID_ANY) return 0; - LCONSOLE_ERROR_MSG(0x159, "Can't parse NID '%s'\n", buf); + if (!quiet) + LCONSOLE_ERROR_MSG(0x159, "Can't parse NID '%s'\n", buf); return -EINVAL; } @@ -233,7 +234,8 @@ enum { 1 not found < 0 error endh is set to next separator */ -static int class_parse_value(char *buf, int opc, void *value, char **endh) +static int class_parse_value(char *buf, int opc, void *value, char **endh, + int quiet) { char *endp; char tmp; @@ -257,7 +259,7 @@ static int class_parse_value(char *buf, int opc, void *value, char **endh) default: LBUG(); case CLASS_PARSE_NID: - rc = parse_nid(buf, value); + rc = parse_nid(buf, value, quiet); break; case CLASS_PARSE_NET: rc = parse_net(buf, value); @@ -273,13 +275,19 @@ static int class_parse_value(char *buf, int opc, void *value, char **endh) int class_parse_nid(char *buf, lnet_nid_t *nid, char **endh) { - return class_parse_value(buf, CLASS_PARSE_NID, (void *)nid, endh); + return class_parse_value(buf, CLASS_PARSE_NID, (void *)nid, endh, 0); } EXPORT_SYMBOL(class_parse_nid); +int class_parse_nid_quiet(char *buf, lnet_nid_t *nid, char **endh) +{ + return class_parse_value(buf, CLASS_PARSE_NID, (void *)nid, endh, 1); +} +EXPORT_SYMBOL(class_parse_nid_quiet); + int class_parse_net(char *buf, __u32 *net, char **endh) { - return class_parse_value(buf, CLASS_PARSE_NET, (void *)net, endh); + return class_parse_value(buf, CLASS_PARSE_NET, (void *)net, endh, 0); } EXPORT_SYMBOL(class_parse_net); diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c index 55e9666..8dd2830 100644 --- a/lustre/obdclass/obd_mount.c +++ b/lustre/obdclass/obd_mount.c @@ -636,7 +636,7 @@ static int lustre_start_mgc(struct super_block *sb) /* New failover node */ sprintf(niduuid, "%s_%x", mgcname, i); j = 0; - while (class_parse_nid(ptr, &nid, &ptr) == 0) { + while (class_parse_nid_quiet(ptr, &nid, &ptr) == 0) { j++; rc = do_lcfg(mgcname, nid, LCFG_ADD_UUID, niduuid, 0,0,0); @@ -2002,7 +2002,7 @@ static int lmd_parse_mgs(struct lustre_mount_data *lmd, char **ptr) int oldlen = 0; /* Find end of nidlist */ - while (class_parse_nid(tail, &nid, &tail) == 0) {} + while (class_parse_nid_quiet(tail, &nid, &tail) == 0) {} length = tail - *ptr; if (length == 0) { LCONSOLE_ERROR_MSG(0x159, "Can't parse NID '%s'\n", *ptr); -- 1.8.3.1