list_move_tail(&tage->linkage, queue);
}
-static int tage_invariant(struct trace_page *tage)
+static void LASSERT_TAGE_INVARIANT(struct trace_page *tage)
{
- return (tage != NULL &&
- tage->page != NULL &&
- tage->used <= CFS_PAGE_SIZE &&
- cfs_page_count(tage->page) > 0);
+ LASSERT(tage != NULL);
+ LASSERT(tage->page != NULL);
+ LASSERTF(tage->used <= CFS_PAGE_SIZE, "used = %u, PAGE_SIZE %lu\n",
+ tage->used, CFS_PAGE_SIZE);
+ LASSERTF(cfs_page_count(tage->page) > 0, "count = %d\n",
+ cfs_page_count(tage->page));
}
/* return a page that has 'len' bytes left at the end */
tcd = trace_get_tcd(flags);
spin_lock(&pc->pc_lock);
- list_splice_init(&tcd->tcd_pages, &pc->pc_pages);
+ list_splice(&tcd->tcd_pages, &pc->pc_pages);
+ CFS_INIT_LIST_HEAD(&tcd->tcd_pages);
tcd->tcd_cur_pages = 0;
if (pc->pc_want_daemon_pages) {
- list_splice_init(&tcd->tcd_daemon_pages, &pc->pc_pages);
+ list_splice(&tcd->tcd_daemon_pages, &pc->pc_pages);
+ CFS_INIT_LIST_HEAD(&tcd->tcd_daemon_pages);
tcd->tcd_cur_daemon_pages = 0;
}
spin_unlock(&pc->pc_lock);
spin_lock(&pc->pc_lock);
list_for_each_entry_safe(tage, tmp, &pc->pc_pages, linkage) {
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
if (tage->cpu != smp_processor_id())
continue;
spin_lock(&pc->pc_lock);
list_for_each_entry_safe(tage, tmp, &pc->pc_pages, linkage) {
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
if (tage->cpu != smp_processor_id())
continue;
LASSERT(!list_empty(&tcd->tcd_daemon_pages));
victim = tage_from_list(tcd->tcd_daemon_pages.next);
- LASSERT(tage_invariant(victim));
+ LASSERT_TAGE_INVARIANT(victim);
list_del(&victim->linkage);
tage_free(victim);
spin_lock_init(&pc.pc_lock);
+ pc.pc_want_daemon_pages = 1;
collect_pages(&pc);
list_for_each_entry_safe(tage, tmp, &pc.pc_pages, linkage) {
char *p, *file, *fn;
cfs_page_t *page;
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
page = tage->page;
p = cfs_page_address(page);
down_write(&tracefile_sem);
filp = cfs_filp_open(filename,
- O_CREAT|O_EXCL|O_WRONLY|O_LARGEFILE, 0600, &rc);
+ O_CREAT|O_EXCL|O_WRONLY|O_LARGEFILE, 0666, &rc);
if (!filp) {
printk(KERN_ERR "LustreError: can't open %s for dump: rc %d\n",
filename, rc);
CFS_MMSPACE_OPEN;
list_for_each_entry_safe(tage, tmp, &pc.pc_pages, linkage) {
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
rc = cfs_filp_write(filp, cfs_page_address(tage->page),
tage->used, cfs_filp_poff(filp));
spin_lock_init(&pc.pc_lock);
+ pc.pc_want_daemon_pages = 1;
collect_pages(&pc);
list_for_each_entry_safe(tage, tmp, &pc.pc_pages, linkage) {
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
list_del(&tage->linkage);
tage_free(tage);
/* mark the first header, so we can sort in chunks */
tage = tage_from_list(pc.pc_pages.next);
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
hdr = cfs_page_address(tage->page);
hdr->ph_flags |= PH_FLAG_FIRST_RECORD;
list_for_each_entry_safe(tage, tmp, &pc.pc_pages, linkage) {
static loff_t f_pos;
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
if (f_pos >= tracefile_size)
f_pos = 0;
}
}
CFS_MMSPACE_CLOSE;
- cfs_filp_close(filp);
+ cfs_filp_close(filp);
put_pages_on_daemon_list(&pc);
}
complete(&tctl->tctl_stop);
tcd->tcd_shutting_down = 1;
list_for_each_entry_safe(tage, tmp, &tcd->tcd_pages, linkage) {
- LASSERT(tage_invariant(tage));
+ LASSERT_TAGE_INVARIANT(tage);
list_del(&tage->linkage);
tage_free(tage);