struct llog_process_info *lpi;
struct llog_process_data *d = data;
struct llog_process_cat_data *cd = catdata;
- int rc;
+ __u32 flags = loghandle->lgh_hdr->llh_flags;
+ int rc;
ENTRY;
lpi->lpi_catdata = catdata;
CDEBUG(D_OTHER, "Processing "DFID" flags 0x%03x startcat %d startidx %d first_idx %d last_idx %d\n",
- PFID(&loghandle->lgh_id.lgl_oi.oi_fid),
- loghandle->lgh_hdr->llh_flags, d ? d->lpd_startcat : -1,
- d ? d->lpd_startidx : -1, cd ? cd->lpcd_first_idx : -1,
- cd ? cd->lpcd_last_idx : -1);
+ PFID(&loghandle->lgh_id.lgl_oi.oi_fid), flags,
+ (flags & LLOG_F_IS_CAT) && d ? d->lpd_startcat : -1,
+ (flags & LLOG_F_IS_CAT) && d ? d->lpd_startidx : -1,
+ cd ? cd->lpcd_first_idx : -1, cd ? cd->lpcd_last_idx : -1);
if (fork) {
struct task_struct *task;
RETURN(rc);
}
- rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN | fmt, NULL);
+ rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN |
+ LLOG_F_ZAP_WHEN_EMPTY | fmt, NULL);
if (rc < 0) {
llog_close(env, loghandle);
*res = NULL;
out:
/* The empty plain log was destroyed while processing */
- if (rc == LLOG_DEL_PLAIN) {
- rc = llog_cat_cleanup(env, cat_llh, llh,
- llh->u.phd.phd_cookie.lgc_index);
- } else if (rc == LLOG_DEL_RECORD) {
+ if (rc == LLOG_DEL_PLAIN || rc == LLOG_DEL_RECORD)
/* clear wrong catalog entry */
- rc = llog_cat_cleanup(env, cat_llh, NULL, rec->lrh_index);
- }
+ rc = llog_cat_cleanup(env, cat_llh, llh, rec->lrh_index);
if (llh)
llog_handle_put(env, llh);
cathandle->u.chd.chd_current_log = NULL;
list_del_init(&loghandle->u.phd.phd_entry);
up_write(&cathandle->lgh_lock);
- LASSERT(index == loghandle->u.phd.phd_cookie.lgc_index);
+ LASSERT(index == loghandle->u.phd.phd_cookie.lgc_index ||
+ loghandle->u.phd.phd_cookie.lgc_index == 0);
/* llog was opened and keep in a list, close it now */
llog_close(env, loghandle);
}