If a push is not completed when discovery thread is stopped, then we
still have ln_dc_handler used as md handler (from
lnet_peer_send_push). That leads to assert failure from
lnet_assert_handler_unused.
To fix that, we call lnet_assert_handler_unused only after the monitor
thread has been stopped. Thus, the patch for LU-17496 is not needed
anymore.
Lustre-change: https://review.whamcloud.com/54884
Lustre-commit:
3ba393a5cb21ff0f8bd8a09c341ee01e936321c7
Fixes:
36b14a23a6 ("LU-17207 lnet: race b/w monitor thr stop and discovery push")
Test-Parameters: testlist=sanity-lnet env=ONLY="212 220",ONLY_REPEAT=100
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I426c37b12a3d29327a7295f528a5b875a9ac88a0
Reviewed-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Reviewed-by: Frank Sehr <fsehr@whamcloud.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/55167
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
if (the_lnet.ln_refcount != 1) {
the_lnet.ln_refcount--;
} else {
+ lnet_handler_t dc_handler = the_lnet.ln_dc_handler;
LASSERT(!the_lnet.ln_niinit_self);
lnet_net_lock(LNET_LOCK_EX);
lnet_router_debugfs_fini();
lnet_peer_discovery_stop();
lnet_monitor_thr_stop();
+ lnet_assert_handler_unused(dc_handler);
lnet_push_target_fini();
lnet_ping_target_fini();
struct lnet_libmd *md;
lnet_res_lock(cpt);
- list_for_each_entry(md, &container->rec_active, md_list)
+ list_for_each_entry(md, &container->rec_active, md_list) {
LASSERT(md->md_handler != handler);
+ }
lnet_res_unlock(cpt);
}
}
}
lnet_net_unlock(LNET_LOCK_EX);
- lnet_assert_handler_unused(the_lnet.ln_dc_handler);
the_lnet.ln_dc_handler = NULL;
the_lnet.ln_dc_state = LNET_DC_STATE_SHUTDOWN;