* \param mti [IN] context
* \param fid [IN] object fid
* \param hsm [OUT] HSM meta data
- * \retval obj
+ * \retval obj or error (-ENOENT if not found)
*/
struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
const struct lu_fid *fid,
prefix, hal->hal_version, hal->hal_count,
hal->hal_compound_id, hal->hal_archive_id, hal->hal_flags);
- hai = hai_zero(hal);
+ hai = hai_first(hal);
for (i = 0; i < hal->hal_count; i++) {
sz = hai->hai_len - sizeof(*hai);
CDEBUG(level, "%s %d: fid="DFID" dfid="DFID
continue;
}
}
- if ((found == -1) && (empty_slot == -1))
+ if (found == -1 && empty_slot == -1)
/* unknown request and no more room for new request,
* continue scan for to find other entries for
* already found request
hsd->request[empty_slot].hal = hal;
hsd->request_cnt++;
found = empty_slot;
- hai = hai_zero(hal);
+ hai = hai_first(hal);
} else {
/* request is known */
/* we check if record archive num is the same as the
hsd->request[found].hal = hal_buffer;
hsd->request[found].hal_sz = sz;
}
- hai = hai_zero(hsd->request[found].hal);
+ hai = hai_first(hsd->request[found].hal);
for (i = 0; i < hsd->request[found].hal->hal_count;
i++)
hai = hai_next(hai);
CDEBUG(D_HSM, "coordinator resumes\n");
- if ((cdt->cdt_thread.t_flags & SVC_STOPPING) ||
- (cdt->cdt_state == CDT_STOPPING)) {
+ if (cdt->cdt_thread.t_flags & SVC_STOPPING ||
+ cdt->cdt_state == CDT_STOPPING) {
cdt->cdt_thread.t_flags &= ~SVC_STOPPING;
rc = 0;
break;
kuc_free(hal, hsd.request[i].hal_used_sz);
continue;
}
- hai = hai_zero(hal);
+ hai = hai_first(hal);
for (j = 0; j < hsd.request[i].hal->hal_count; j++) {
cookies[j] = hai->hai_cookie;
hai = hai_next(hai);
larr = (struct llog_agent_req_rec *)hdr;
hai = &larr->arr_hai;
- if ((hai->hai_action != HSMA_RESTORE) ||
- agent_req_in_final_state(larr->arr_status))
+ if (hai->hai_action != HSMA_RESTORE ||
+ agent_req_in_final_state(larr->arr_status))
RETURN(0);
/* restore request not in a final state */
int rc;
void *ptr;
struct mdt_thread_info *cdt_mti;
- cfs_task_t *task;
+ struct task_struct *task;
ENTRY;
/* functions defined but not yet used
cdt->cdt_policy = CDT_DEFAULT_POLICY;
cdt->cdt_state = CDT_INIT;
- cfs_atomic_set(&cdt->cdt_compound_id, cfs_time_current_sec());
+ atomic_set(&cdt->cdt_compound_id, cfs_time_current_sec());
/* just need to be larger than previous one */
/* cdt_last_cookie is protected by cdt_llog_lock */
cdt->cdt_last_cookie = cfs_time_current_sec();
ENTRY;
/* register request in memory list */
- hai = hai_zero(hal);
+ hai = hai_first(hal);
for (i = 0; i < hal->hal_count; i++, hai = hai_next(hai)) {
struct cdt_agent_req *car;
*status = ARS_SUCCEED;
break;
default:
- *status = (((cdt->cdt_policy &
- CDT_NORETRY_ACTION) ||
- !(pgs->hpk_flags & HP_FLAG_RETRY)) ?
+ *status = (cdt->cdt_policy & CDT_NORETRY_ACTION ||
+ !(pgs->hpk_flags & HP_FLAG_RETRY) ?
ARS_FAILED : ARS_WAITING);
break;
}
* a crasy CT no need to manage DIRTY
*/
if (rc == 0)
- hsm_set_cl_flags(&cl_flags, ((mh.mh_flags & HS_DIRTY) ?
- CLF_HSM_DIRTY : 0));
+ hsm_set_cl_flags(&cl_flags,
+ mh.mh_flags & HS_DIRTY ? CLF_HSM_DIRTY : 0);
/* unlock is done later, after layout lock management */
if (is_mh_changed)
/* we give back layout lock only if restore was successful or
* if restore was canceled or if policy is to not retry
* in other cases we just unlock the object */
- if ((car->car_hai->hai_action == HSMA_RESTORE) &&
- ((pgs->hpk_errval == 0) || (pgs->hpk_errval == ECANCELED) ||
- (cdt->cdt_policy & CDT_NORETRY_ACTION))) {
+ if (car->car_hai->hai_action == HSMA_RESTORE &&
+ (pgs->hpk_errval == 0 || pgs->hpk_errval == ECANCELED ||
+ cdt->cdt_policy & CDT_NORETRY_ACTION)) {
struct cdt_restore_handle *crh;
/* restore in data FID done, we swap the layouts
/* just give back layout lock, we keep
* the reference which is given back
* later with the lock for HSM flags */
- if (!IS_ERR(obj))
+ if (!IS_ERR(obj) && crh != NULL)
mdt_object_unlock(mti, obj, &crh->crh_lh, 1);
+
if (crh != NULL)
OBD_SLAB_FREE_PTR(crh, mdt_hsm_cdt_kmem);
}
GOTO(out, rc);
out:
- if ((obj != NULL) && !IS_ERR(obj)) {
+ if (obj != NULL && !IS_ERR(obj)) {
mo_changelog(env, CL_HSM, cl_flags,
mdt_object_child(obj));
mdt_object_put(mti->mti_env, obj);
" on fid="DFID"\n",
mdt_obd_name(mdt),
pgs->hpk_cookie, PFID(&pgs->hpk_fid));
+ if (car == NULL)
+ RETURN(-ENOENT);
RETURN(PTR_ERR(car));
}
/* progress is done on FID or data FID depending of the action and
* of the copy progress */
/* for restore progress is used to send back the data FID to cdt */
- if ((car->car_hai->hai_action == HSMA_RESTORE) &&
- (lu_fid_eq(&car->car_hai->hai_fid, &car->car_hai->hai_dfid)))
+ if (car->car_hai->hai_action == HSMA_RESTORE &&
+ lu_fid_eq(&car->car_hai->hai_fid, &car->car_hai->hai_dfid))
car->car_hai->hai_dfid = pgs->hpk_fid;
- if (((car->car_hai->hai_action == HSMA_RESTORE) ||
- (car->car_hai->hai_action == HSMA_ARCHIVE)) &&
+ if ((car->car_hai->hai_action == HSMA_RESTORE ||
+ car->car_hai->hai_action == HSMA_ARCHIVE) &&
(!lu_fid_eq(&pgs->hpk_fid, &car->car_hai->hai_dfid) &&
!lu_fid_eq(&pgs->hpk_fid, &car->car_hai->hai_fid))) {
CERROR("%s: Progress on "DFID" for cookie "LPX64
larr = (struct llog_agent_req_rec *)hdr;
hcad = data;
- if ((larr->arr_status == ARS_WAITING) ||
- (larr->arr_status == ARS_STARTED)) {
+ if (larr->arr_status == ARS_WAITING ||
+ larr->arr_status == ARS_STARTED) {
larr->arr_status = ARS_CANCELED;
larr->arr_req_change = cfs_time_current_sec();
rc = mdt_agent_llog_update_rec(env, hcad->mdt, llh, larr);
hal_len = sizeof(*hal) + cfs_size_round(MTI_NAME_MAXLEN + 1) +
cfs_size_round(car->car_hai->hai_len);
- if ((hal_len > hal_sz) && (hal_sz > 0)) {
+ if (hal_len > hal_sz && hal_sz > 0) {
/* not enough room, free old buffer */
OBD_FREE(hal, hal_sz);
hal = NULL;
hal->hal_flags = car->car_flags;
hal->hal_count = 0;
- hai = hai_zero(hal);
+ hai = hai_first(hal);
memcpy(hai, car->car_hai, car->car_hai->hai_len);
hai->hai_action = HSMA_CANCEL;
hal->hal_count = 1;
switch (hai->hai_action) {
case HSMA_ARCHIVE:
if (!(hsm_flags & HS_NOARCHIVE) &&
- ((hsm_flags & HS_DIRTY) || !(hsm_flags & HS_ARCHIVED)))
+ (hsm_flags & HS_DIRTY || !(hsm_flags & HS_ARCHIVED)))
is_compat = true;
break;
case HSMA_RESTORE:
if (!(hsm_flags & HS_DIRTY) && (hsm_flags & HS_RELEASED) &&
- (hsm_flags & HS_ARCHIVED) && !(hsm_flags & HS_LOST))
+ hsm_flags & HS_ARCHIVED && !(hsm_flags & HS_LOST))
is_compat = true;
break;
case HSMA_REMOVE: