Whamcloud - gitweb
file new-tcp-zero-copy-2.6.9-41.2chaos.patch was initially added on branch b1_4.
[fs/lustre-release.git] / lnet / libcfs / tracefile.c
index 6ab716b..e93ff1b 100644 (file)
@@ -82,12 +82,14 @@ static void tage_to_tail(struct trace_page *tage, struct list_head *queue)
         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 */
@@ -250,10 +252,12 @@ static void collect_pages_on_cpu(void *info)
         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);
@@ -285,7 +289,7 @@ static void put_pages_back_on_cpu(void *info)
         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;
@@ -322,7 +326,7 @@ static void put_pages_on_daemon_list_on_cpu(void *info)
         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;
@@ -336,7 +340,7 @@ static void put_pages_on_daemon_list_on_cpu(void *info)
                         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);
@@ -362,12 +366,13 @@ void trace_debug_print(void)
 
         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);
@@ -402,7 +407,7 @@ int tracefile_dump_all_pages(char *filename)
         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);
@@ -422,7 +427,7 @@ int tracefile_dump_all_pages(char *filename)
         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));
@@ -454,10 +459,11 @@ void trace_flush_pages(void)
 
         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);
@@ -552,7 +558,7 @@ static int tracefiled(void *arg)
 
                 /* 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;
@@ -560,7 +566,7 @@ static int tracefiled(void *arg)
                 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;
@@ -576,8 +582,8 @@ static int tracefiled(void *arg)
                         }
                 }
                 CFS_MMSPACE_CLOSE;
-                cfs_filp_close(filp);
 
+                cfs_filp_close(filp);
                 put_pages_on_daemon_list(&pc);
         }
         complete(&tctl->tctl_stop);
@@ -653,7 +659,7 @@ static void trace_cleanup_on_cpu(void *info)
         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);