ENTRY;
down_write(&kg_sem);
+
+ if (unlikely(kkuc_groups[group].next == NULL) ||
+ unlikely(OBD_FAIL_CHECK(OBD_FAIL_MDS_HSM_CT_REGISTER_NET))) {
+ /* no agent have fully registered, CDT will retry */
+ up_write(&kg_sem);
+ RETURN(-EAGAIN);
+ }
+
list_for_each_entry(reg, &kkuc_groups[group], kr_chain) {
if (reg->kr_fp != NULL) {
rc = libcfs_kkuc_msg_put(reg->kr_fp, payload);
done
}
-test_402() {
+test_402a() {
# make sure there is no running copytool
copytool_cleanup
# reactivate MDCs
mdc_change_state $SINGLEAGT "$FSNAME-MDT000." "activate"
}
-run_test 402 "Copytool start fails if all MDTs are inactive"
+run_test 402a "Copytool start fails if all MDTs are inactive"
+
+test_402b() {
+ copytool_setup
+
+ mkdir -p $DIR/$tdir
+
+ local f=$DIR/$tdir/$tfile
+ touch $f || error "touch $f failed"
+ local fid=$(path2fid $f)
+
+#define OBD_FAIL_MDS_HSM_CT_REGISTER_NET 0x14d
+ do_facet $SINGLEAGT lctl set_param fail_loc=0x14d
+ $LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $f
+
+ # give time for CDT to send request and to keep it for retry
+ wait_for_loop_period
+
+ wait_request_state $fid ARCHIVE WAITING
+
+ do_facet $SINGLEAGT lctl set_param fail_loc=0
+
+ # request should succeed now
+ wait_request_state $fid ARCHIVE SUCCEED
+
+ copytool_cleanup
+}
+run_test 402b "CDT must retry request upon slow start of CT"
test_403() {
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return