From: Nathan Rutman Date: Thu, 17 Jun 2010 18:47:58 +0000 (-0700) Subject: b=22656 Prevent failover nids from registering with MGS first. X-Git-Tag: v1_8_3_54~2 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=229f8367ec4335a81143d2c14fd856a41dbfb652;p=fs%2Flustre-release.git b=22656 Prevent failover nids from registering with MGS first. Make the check in mgs_handle_target_reg() o=Joseph Herring i=nathan.rutman i=andreas.dilger --- diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index 369d447..9d6392b 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -59,7 +59,7 @@ #include #include #include "mgs_internal.h" - +#include /* Establish a connection to the MGS.*/ static int mgs_connect(struct lustre_handle *conn, struct obd_device *obd, @@ -367,6 +367,30 @@ static int mgs_check_target(struct obd_device *obd, struct mgs_target_info *mti) RETURN(rc); } +/* Ensure this is not a failover node that is connecting first*/ +static int mgs_check_failover_reg(struct mgs_target_info *mti) +{ + lnet_nid_t nid; + char *ptr; + int i; + + ptr = mti->mti_params; + while (class_find_param(ptr, PARAM_FAILNODE, &ptr) == 0) { + while (class_parse_nid(ptr, &nid, &ptr) == 0) { + for (i = 0; i < mti->mti_nid_count; i++) { + if (nid == mti->mti_nids[i]) { + LCONSOLE_WARN("Denying initial registra" + "tion attempt from nid %s" + ", specified as failover" + "\n",libcfs_nid2str(nid)); + return -EADDRNOTAVAIL; + } + } + } + } + return 0; +} + /* Called whenever a target starts up. Flags indicate first connect, etc. */ static int mgs_handle_target_reg(struct ptlrpc_request *req) { @@ -393,6 +417,9 @@ static int mgs_handle_target_reg(struct ptlrpc_request *req) if (rc <= 0) /* Nothing wrong, or fatal error */ GOTO(out_nolock, rc); + } else { + if ((rc = mgs_check_failover_reg(mti))) + GOTO(out_nolock, rc); } /* Revoke the config lock to make sure nobody is reading. */ diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index cded53f..ef2ba73 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -2247,6 +2247,20 @@ test_56() { } run_test 56 "check big indexes" +test_57() { # bug 22656 + local NID=$($LCTL list_nids | head -1) + writeconf + do_facet ost1 "$TUNEFS --failnode=$NID `ostdevname 1`" || error "tunefs failed" + if ! combined_mgs_mds ; then + start_mgs + fi + start_mds + stop_mds + start_ost && error "OST registration from failnode should fail" + reformat +} +run_test 57 "initial registration from failnode should fail (should return errs)" + if ! combined_mgs_mds ; then stop mgs fi