struct config_llog_data *cld;
/* Note class_config_llog_handler() depends on getting "obd" back */
- lcfg.cfg_instance = sb ? ll_get_cfg_instance(sb) : (unsigned long)obd;
+ /* for sptlrpc, sb is only provided to be able to make a local copy,
+ * not for the instance
+ */
+ if (sb && type != MGS_CFG_T_SPTLRPC)
+ lcfg.cfg_instance = ll_get_cfg_instance(sb);
+ else
+ lcfg.cfg_instance = (unsigned long)obd;
cld = config_log_find(logname, &lcfg);
if (unlikely(cld != NULL))
strcpy(seclogname + (ptr - logname), "-sptlrpc");
if (cfg->cfg_sub_clds & CONFIG_SUB_SPTLRPC) {
- sptlrpc_cld = config_log_find_or_add(obd, seclogname, NULL,
+ sptlrpc_cld = config_log_find_or_add(obd, seclogname, sb,
MGS_CFG_T_SPTLRPC, cfg);
if (IS_ERR(sptlrpc_cld)) {
CERROR("%s: can't create sptlrpc log %s: rc = %ld\n",
if (cld->cld_cfg.cfg_sb)
lsi = s2lsi(cld->cld_cfg.cfg_sb);
+ /* sptlrpc llog must not keep ref to sb,
+ * it was just needed to get lsi
+ */
+ if (cld_is_sptlrpc(cld))
+ cld->cld_cfg.cfg_sb = NULL;
+
OBD_ALLOC_PTR(env);
if (env == NULL)
RETURN(-ENOMEM);
}
run_test 69 "check upcall incorrect values"
+test_70() {
+ local param_mgs=$(mktemp $TMP/$tfile-mgs.XXXXXX)
+ local param_copy=$(mktemp $TMP/$tfile-copy.XXXXXX)
+
+ stack_trap "rm -f $param_mgs $param_copy" EXIT
+
+ (( $MDS1_VERSION >= $(version_code 2.14.0.144) )) ||
+ skip "Need MDS version at least 2.14.0.144"
+
+ if ! $SHARED_KEY; then
+ skip "need shared key feature for this test"
+ fi
+
+ [[ "$ost1_FSTYPE" == ldiskfs ]] ||
+ skip "ldiskfs only test (using debugfs)"
+
+ # unmount then remount the Lustre filesystem, to make sure llogs
+ # are copied locally
+ export SK_NO_KEY=false
+ stopall || error "stopall failed"
+ init_gss
+ mountmgs || error "mountmgs failed"
+ mountmds || error "mountmds failed"
+ mountoss || error "mountoss failed"
+ mountcli || error "mountcli failed"
+ lfs df -h
+ unset SK_NO_KEY
+
+ do_facet mgs "sync ; sync"
+ do_facet mgs "$DEBUGFS -c -R 'ls CONFIGS/' $(mgsdevname)"
+ do_facet mgs "$DEBUGFS -c -R 'dump CONFIGS/$FSNAME-sptlrpc $param_mgs' \
+ $(mgsdevname)"
+ do_facet mgs "llog_reader $param_mgs" | grep -vE "SKIP|marker" |
+ grep "^#" > $param_mgs
+ cat $param_mgs
+
+ if ! combined_mgs_mds; then
+ do_facet mds1 "sync ; sync"
+ do_facet mds1 "$DEBUGFS -c -R 'ls CONFIGS/' $(mdsdevname 1)"
+ do_facet mds1 "$DEBUGFS -c -R 'dump CONFIGS/$FSNAME-sptlrpc \
+ $param_copy' $(mdsdevname 1)"
+ do_facet mds1 "llog_reader $param_copy" |
+ grep -vE "SKIP|marker" | grep "^#" > $param_copy
+ cat $param_copy
+ cmp -bl $param_mgs $param_copy ||
+ error "sptlrpc llog differ in mds"
+ rm -f $param_copy
+ fi
+
+ do_facet ost1 "sync ; sync"
+ do_facet ost1 "$DEBUGFS -c -R 'ls CONFIGS/' $(ostdevname 1)"
+ do_facet ost1 "$DEBUGFS -c -R 'dump CONFIGS/$FSNAME-sptlrpc \
+ $param_copy' $(ostdevname 1)"
+ do_facet ost1 "llog_reader $param_copy" | grep -vE "SKIP|marker" |
+ grep "^#" > $param_copy
+ cat $param_copy
+ cmp -bl $param_mgs $param_copy ||
+ error "sptlrpc llog differ in oss"
+}
+run_test 70 "targets have local copy of sptlrpc llog"
+
log "cleanup: ======================================================"
sec_unsetup() {