From 62ca9b823524ca44d3344b2555754890abc55a3b Mon Sep 17 00:00:00 2001 From: Emoly Liu Date: Fri, 15 Sep 2017 15:56:11 +0800 Subject: [PATCH] LU-9682 nodemap: delete nids range from nodemap correctly In function nodemap_del_range(), we should check if the current nodemap has the specified range before delete it from global range tree. Also, test_10b is added to sanity-sec.sh to verify this patch. Change-Id: Ibab79056509d14d52f99b1ebe3319c301dbe45d9 Test-Parameters: testlist=sanity-sec Signed-off-by: Emoly Liu Reviewed-on: https://review.whamcloud.com/28922 Reviewed-by: Sebastien Buisson Reviewed-by: John L. Hammond Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin --- lustre/ptlrpc/nodemap_handler.c | 6 +++++- lustre/tests/sanity-sec.sh | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/lustre/ptlrpc/nodemap_handler.c b/lustre/ptlrpc/nodemap_handler.c index 782c992..a6ef9ca 100644 --- a/lustre/ptlrpc/nodemap_handler.c +++ b/lustre/ptlrpc/nodemap_handler.c @@ -828,7 +828,7 @@ EXPORT_SYMBOL(nodemap_add_range); /** * delete a range * \param name nodemap name - * \param range_str string containing range + * \param nid nid range * \retval 0 on success * * Delete range from global range tree, and remove it @@ -856,6 +856,10 @@ int nodemap_del_range(const char *name, const lnet_nid_t nid[2]) up_write(&active_config->nmc_range_tree_lock); GOTO(out_putref, rc = -EINVAL); } + if (range->rn_nodemap != nodemap) { + up_write(&active_config->nmc_range_tree_lock); + GOTO(out_putref, rc = -EINVAL); + } rc = nodemap_idx_range_del(range); range_delete(&active_config->nmc_range_tree, range); nm_member_reclassify_nodemap(nodemap); diff --git a/lustre/tests/sanity-sec.sh b/lustre/tests/sanity-sec.sh index bf2e7d6..5c517b1 100755 --- a/lustre/tests/sanity-sec.sh +++ b/lustre/tests/sanity-sec.sh @@ -556,7 +556,7 @@ test_7() { delete_nodemaps rc=$? - [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 2 + [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 2 return 0 } @@ -586,7 +586,7 @@ test_8() { # Clean up delete_nodemaps rc=$? - [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 3 + [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 3 return 0 } @@ -625,13 +625,13 @@ test_9() { rc=0 delete_nodemaps rc=$? - [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 4 + [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 4 return 0 } run_test 9 "nodemap range add" -test_10() { +test_10a() { local rc remote_mgs_nodsh && skip "remote MGS with nodsh" && return @@ -672,11 +672,39 @@ test_10() { delete_nodemaps rc=$? - [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 5 + [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 5 return 0 } -run_test 10 "nodemap reject duplicate ranges" +run_test 10a "nodemap reject duplicate ranges" + +test_10b() { + [ $(lustre_version_code mgs) -lt $(version_code 2.10.53) ] && + skip "Need MGS >= 2.10.53" && return + + local nm1="nodemap1" + local nm2="nodemap2" + local nids="192.168.19.[0-255]@o2ib20" + + do_facet mgs $LCTL nodemap_del $nm1 2>/dev/null + do_facet mgs $LCTL nodemap_del $nm2 2>/dev/null + + do_facet mgs $LCTL nodemap_add $nm1 || error "Add $nm1 failed" + do_facet mgs $LCTL nodemap_add $nm2 || error "Add $nm2 failed" + do_facet mgs $LCTL nodemap_add_range --name $nm1 --range $nids || + error "Add range $nids to $nm1 failed" + [ -n "$(do_facet mgs $LCTL get_param nodemap.$nm1.* | + grep start_nid)" ] || error "No range was found" + do_facet mgs $LCTL nodemap_del_range --name $nm2 --range $nids && + error "Deleting range $nids from $nm2 should fail" + [ -n "$(do_facet mgs $LCTL get_param nodemap.$nm1.* | + grep start_nid)" ] || error "Range $nids should be there" + + do_facet mgs $LCTL nodemap_del $nm1 || error "Delete $nm1 failed" + do_facet mgs $LCTL nodemap_del $nm2 || error "Delete $nm2 failed" + return 0 +} +run_test 10b "delete range from the correct nodemap" test_11() { local rc -- 1.8.3.1