/* * ndmpd_abort_making_v2 * * Abort the process of marking inodes. * * Parameters: * session (input) - pointer to the session * * Returns: * void */ void ndmpd_abort_marking_v2(ndmpd_session_t *session) { ndmp_lbr_params_t *nlp; nlp = ndmp_get_nlp(session); if (nlp) NLP_SET(nlp, NLPF_ABORTED); }
/* * ndmpd_tar_backup_starter (V2 only) * * The main backup starter function. It creates a snapshot if necessary * and calls ndmp_tar_backup to perform the actual backup. It does the cleanup * and release the snapshot at the end. */ int ndmpd_tar_backup_starter(void *arg) { ndmpd_module_params_t *mod_params = arg; int err; ndmpd_session_t *session; ndmp_lbr_params_t *nlp; session = (ndmpd_session_t *)(mod_params->mp_daemon_cookie); *(mod_params->mp_module_cookie) = nlp = ndmp_get_nlp(session); ndmp_session_ref(session); err = 0; if (fs_is_chkpntvol(nlp->nlp_backup_path) || fs_is_rdonly(nlp->nlp_backup_path) || !fs_is_chkpnt_enabled(nlp->nlp_backup_path)) NLP_SET(nlp, NLPF_CHKPNTED_PATH); else { NLP_UNSET(nlp, NLPF_CHKPNTED_PATH); if (ndmp_create_snapshot(nlp->nlp_backup_path, nlp->nlp_jstat->js_job_name) < 0) { MOD_LOG(mod_params, "Error: creating checkpoint on %s\n", nlp->nlp_backup_path); /* -1 causes halt reason to become internal error. */ err = -1; } } NDMP_LOG(LOG_DEBUG, "NLPF_CHKPNTED_PATH: %c", NDMP_YORN(NLP_ISCHKPNTED(nlp))); NDMP_LOG(LOG_DEBUG, "err: %d, update %c", err, NDMP_YORN(NLP_SHOULD_UPDATE(nlp))); if (err == 0) { err = ndmp_get_cur_bk_time(nlp, &nlp->nlp_cdate, nlp->nlp_jstat->js_job_name); if (err != 0) { NDMP_LOG(LOG_DEBUG, "err %d", err); } else { log_bk_params_v2(session, mod_params, nlp); err = ndmpd_tar_backup(session, mod_params, nlp); } } if (nlp->nlp_bkmap >= 0) { (void) dbm_free(nlp->nlp_bkmap); nlp->nlp_bkmap = -1; } if (!NLP_ISCHKPNTED(nlp)) (void) ndmp_remove_snapshot(nlp->nlp_backup_path, nlp->nlp_jstat->js_job_name); NDMP_LOG(LOG_DEBUG, "err %d, update %c", err, NDMP_YORN(NLP_SHOULD_UPDATE(nlp))); if (err == 0 && NLP_SHOULD_UPDATE(nlp)) { if (ndmpd_put_dumptime(nlp->nlp_backup_path, nlp->nlp_clevel, nlp->nlp_cdate) < 0) { err = EPERM; MOD_LOG(mod_params, "Error: updating the dumpdates file on %s\n", nlp->nlp_backup_path); } } MOD_DONE(mod_params, err); /* nlp_params is allocated in start_backup() */ NDMP_FREE(nlp->nlp_params); NS_DEC(nbk); ndmp_session_unref(session); return (err); }
/* * ndmp_backup_extract_params * * Go through the backup parameters and check the validity * for each one. Then set the NLP flags according to the parameters. */ int ndmp_backup_extract_params(ndmpd_session_t *session, ndmpd_module_params_t *params) { char *cp; int rv; ndmp_lbr_params_t *nlp; /* Extract directory to be backed up from env variables */ if ((nlp = ndmp_get_nlp(session)) == NULL) { MOD_LOG(params, "Error: Internal error: nlp == NULL.\n"); return (NDMP_ILLEGAL_ARGS_ERR); } if ((nlp->nlp_backup_path = get_backup_path_v2(params)) == NULL) return (NDMP_FILE_NOT_FOUND_ERR); if ((rv = check_backup_dir_validity(params, nlp->nlp_backup_path)) != NDMP_NO_ERR) return (rv); /* Should the st_ctime be ignored when backing up? */ if (ndmp_ignore_ctime) { NDMP_LOG(LOG_DEBUG, "ignoring st_ctime"); NLP_SET(nlp, NLPF_IGNCTIME); } else NLP_UNSET(nlp, NLPF_IGNCTIME); /* Should the st_lmtime be ignored when backing up? */ if (ndmp_include_lmtime) { NDMP_LOG(LOG_DEBUG, "including st_lmtime"); NLP_SET(nlp, NLPF_INCLMTIME); } else NLP_UNSET(nlp, NLPF_INCLMTIME); NDMP_LOG(LOG_DEBUG, "flags %x", nlp->nlp_flags); /* Is backup history requested? */ cp = MOD_GETENV(params, "HIST"); if (cp == NULL) { NDMP_LOG(LOG_DEBUG, "env(HIST) not specified"); NLP_UNSET(nlp, NLPF_FH); } else { NDMP_LOG(LOG_DEBUG, "env(HIST): \"%s\"", cp); if (strchr("t_ty_y", *cp)) NLP_SET(nlp, NLPF_FH); else NLP_UNSET(nlp, NLPF_FH); } nlp->nlp_clevel = 0; /* Is it an incremental backup? */ cp = MOD_GETENV(params, "LEVEL"); if (cp == NULL) { NDMP_LOG(LOG_DEBUG, "env(LEVEL) not specified, default to 0"); } else if (*cp < '0' || *cp > '9' || *(cp+1) != '\0') { NDMP_LOG(LOG_DEBUG, "Invalid backup level '%s'", cp); return (NDMP_ILLEGAL_ARGS_ERR); } else nlp->nlp_clevel = *cp - '0'; /* Extract last backup time from the dumpdates file */ nlp->nlp_llevel = nlp->nlp_clevel; nlp->nlp_ldate = 0; if (ndmpd_get_dumptime(nlp->nlp_backup_path, &nlp->nlp_llevel, &nlp->nlp_ldate) < 0) { MOD_LOG(params, "Error: getting dumpdate for %s level %d\n", nlp->nlp_backup_path, nlp->nlp_clevel); return (NDMP_NO_MEM_ERR); } NDMP_LOG(LOG_DEBUG, "Date of this level %d on \"%s\": %s", nlp->nlp_clevel, nlp->nlp_backup_path, cctime(&nlp->nlp_cdate)); NDMP_LOG(LOG_DEBUG, "Date of last level %d on \"%s\": %s", nlp->nlp_llevel, nlp->nlp_backup_path, cctime(&nlp->nlp_ldate)); /* Should the dumpdate file be updated? */ cp = MOD_GETENV(params, "UPDATE"); if (cp == NULL) { NDMP_LOG(LOG_DEBUG, "env(UPDATE) not specified, default to TRUE"); NLP_SET(nlp, NLPF_UPDATE); } else { NDMP_LOG(LOG_DEBUG, "env(UPDATE): \"%s\"", cp); if (strchr("t_ty_y", *cp) != NULL) NLP_SET(nlp, NLPF_UPDATE); else NLP_UNSET(nlp, NLPF_UPDATE); } return (NDMP_NO_ERR); }