]> git.neil.brown.name Git - lafs-utils.git/commitdiff
Add tracing control to liblafs
authorNeilBrown <neilb@suse.de>
Wed, 2 Mar 2011 23:02:31 +0000 (10:02 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 2 Mar 2011 23:02:31 +0000 (10:02 +1100)
'printf' becomes 'trace' and can now be turned on/off by an
environment variable.

Signed-off-by: NeilBrown <neilb@suse.de>
12 files changed:
include/lafs/lafs.h
lib/Makefile
lib/internal.h [new file with mode: 0644]
lib/lafs_alloc.c
lib/lafs_allocated_block.c
lib/lafs_checkpoint.c
lib/lafs_cluster_allocate.c
lib/lafs_cluster_flush.c
lib/lafs_imap_set.c
lib/lafs_incorporate.c
lib/lafs_inode_fillblock.c
lib/lafs_sched_blk.c

index fed212d3e0bc1ffe60bef8d6f9fa308062549786..897ead67588033f959713dab801815f0823633ad 100644 (file)
@@ -130,21 +130,3 @@ virttophys(struct lafs *fs, loff_t virt, int *devp, loff_t *sectp)
        virt += dv->segment_offset;
        *sectp = virt;
 }
-
-#include <stdio.h>
-static inline void
-de_sched(struct lafs_blk *b)
-{
-       if (!(b->flags & B_Sched))
-               return;
-       b->flags &= ~B_Sched;
-
-       if (b->parent) {
-               struct lafs_iblk *p = b->parent;
-               printf("ds %d/%lld %d\n", p->b.ino->inum, (long long)p->b.fileaddr,
-                      p->sched_cnt);
-               p->sched_cnt--;
-               if (p->sched_cnt == 0)
-                       lafs_sched_blk(&p->b);
-       }
-}
index 3c5585dad0a8f02b51cca08c30f505b332a332a9..35bd5acd37de74641363cbb10eb7e9c792e835d5 100644 (file)
@@ -2,7 +2,7 @@
 
 SRC = $(wildcard *.c)
 OBJ = $(patsubst %.c,%.o,$(SRC))
-INCL = $(wildcard ../include/lafs/*.h)
+INCL = $(wildcard ../include/lafs/*.h) internal.h
 
 CPPFLAGS = -I../include
 CFLAGS = -Wall -Werror -g
diff --git a/lib/internal.h b/lib/internal.h
new file mode 100644 (file)
index 0000000..57ebd9f
--- /dev/null
@@ -0,0 +1,28 @@
+
+/*
+ * Internal use defines for liblafs - not externally visible
+ */
+#include <stdio.h>
+
+extern int lafs_trace_level;
+
+#define trace(n, str ...) \
+       do { if (lafs_trace_level >= n) fprintf(stderr, str); } while(0)
+
+
+static inline void
+de_sched(struct lafs_blk *b)
+{
+       if (!(b->flags & B_Sched))
+               return;
+       b->flags &= ~B_Sched;
+
+       if (b->parent) {
+               struct lafs_iblk *p = b->parent;
+               trace(2,"ds %d/%lld %d\n", p->b.ino->inum, (long long)p->b.fileaddr,
+                     p->sched_cnt);
+               p->sched_cnt--;
+               if (p->sched_cnt == 0)
+                       lafs_sched_blk(&p->b);
+       }
+}
index 45e96db96259f86ab19377f7fc876d4751225a56..6255c5db547b8a54377f3b96c7faad32f6482df7 100644 (file)
@@ -3,12 +3,24 @@
 #include <talloc.h>
 #include <memory.h>
 #include <lafs/list.h>
+#include "internal.h"
+
+int lafs_trace_level = 0;
+static int tracing_set = 0;
 
 struct lafs *lafs_alloc(void)
 {
        struct lafs *fs = talloc(NULL, struct lafs);
        int i;
 
+       if (!tracing_set) {
+               char *e;
+               tracing_set = 1;
+               e = getenv("LAFS_TRACE");
+               if (e)
+                       lafs_trace_level = atoi(e);
+       }
+
        memset(fs, 0, sizeof(*fs));
 
        INIT_LIST_HEAD(&fs->wc[0].blocks);
index 8280ae9bdb73a208591b5ee435f63752890016b1..7cf70811b51dfce55173bad69a54e1d184086d56 100644 (file)
@@ -8,14 +8,16 @@
 #include <lafs/lafs.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include "internal.h"
 
 void lafs_allocated_block(struct lafs_blk *b, loff_t addr)
 {
        struct lafs *fs = b->ino->fs;
        struct lafs_iblk *p;
 
-       printf("allocate %d/%lld %s to %lld\n", b->ino->inum, (long long)b->fileaddr, 
-              (b->flags & B_Index) ? "index":"data", (long long)addr);
+       trace(1,"allocate %d/%lld %s to %lld\n", b->ino->inum,
+             (long long)b->fileaddr, 
+             (b->flags & B_Index) ? "index":"data", (long long)addr);
        if (b->parent == NULL) {
                /* This is the root inode.  Its address goes
                 * directly in the 'state' block.
@@ -23,7 +25,7 @@ void lafs_allocated_block(struct lafs_blk *b, loff_t addr)
                if (b->flags & B_Index) abort();
 
                /* FIXME this might be a different snapshot */
-               printf("Root inode at %lld\n", (long long)addr);
+               trace(1, "Root inode at %lld\n", (long long)addr);
                b->physaddr = addr;
                fs->ss.root_addr = addr;
                return;
index 2e285257914d71d2df94bcc18aca86087f6fba55..049694c769d867dc218de2b65eaa485ad719dff4 100644 (file)
@@ -6,8 +6,8 @@
 
 #include <stdlib.h>
 #include <lafs/lafs.h>
-
 #include <stdio.h>
+#include "internal.h"
 
 int lafs_checkpoint(struct lafs *fs)
 {
@@ -20,9 +20,9 @@ int lafs_checkpoint(struct lafs *fs)
                        b = list_first_entry(&fs->leafs,
                                             struct lafs_blk,
                                             leafs);
-                       printf("checkpoint %p %d/%lld %s %p\n", b, b->ino->inum,
-                              (long long)b->fileaddr,
-                              (b->flags & B_Index) ? "index":"data", b->parent);
+                       trace(1, "checkpoint %p %d/%lld %s %p\n", b, b->ino->inum,
+                             (long long)b->fileaddr,
+                             (b->flags & B_Index) ? "index":"data", b->parent);
                        list_del_init(&b->leafs);
                        if (!(b->flags & B_Index)) {
                                struct lafs_dblk *db = dblk(b);
@@ -57,7 +57,7 @@ int lafs_checkpoint(struct lafs *fs)
                                }
                        }
                        if (b->flags & B_Dirty) {
-                               printf("...alloc\n");
+                               trace(2, "...alloc\n");
                                lafs_cluster_allocate(b, 0);
                        } else
                                de_sched(b);
@@ -69,7 +69,7 @@ int lafs_checkpoint(struct lafs *fs)
                b = list_first_entry(&fs->account_leafs,
                                     struct lafs_blk, leafs);
                b->flags &= ~B_Sched;
-               printf("Account %d/%lld\n", b->ino->inum, (long long)b->fileaddr);
+               trace(1, "Account %d/%lld\n", b->ino->inum, (long long)b->fileaddr);
                list_del_init(&b->leafs);
 
                lafs_sched_blk(b);
index 16a21fd3d32ccc3a21f9c717ba9500fd6a7300a9..d04240101786a1d96472549080452fef69e21c4f 100644 (file)
@@ -10,6 +10,7 @@
  */
 #include <lafs/lafs.h>
 #include <stdlib.h>
+#include "internal.h"
 
 void lafs_cluster_allocate(struct lafs_blk *b, int cnum)
 {
index 4c7d84494ab3d93a0c1b0e3b141acc617cdb2926..442091dd6d8d68a6e5888c153766056db46b9d31 100644 (file)
@@ -12,6 +12,7 @@
 #include <stdlib.h>
 #include <memory.h>
 #include <stdio.h>
+#include "internal.h"
 
 /*-----------------------------------------------------------------------
  * A segment is divided up in a slightly complicated way into
@@ -251,10 +252,10 @@ void lafs_cluster_flush(struct lafs *fs, int cnum)
        struct group_head *head_start = NULL;
        struct lafs_device *dv;
 
-       printf("flush\n");
+       trace(1, "cluster flush\n");
        if (list_empty(&wc->blocks) &&
            !(fs->checkpointing & CHECKPOINT_END)) {
-               printf("...skipped\n");
+               trace(1, "...skipped\n");
                return;
        }
 
index c46af052828066fb0d5104061761c7540ff56a3f..2e2e18cead4fe47c2b8821b72097bf37cd836448 100644 (file)
@@ -8,6 +8,7 @@
 #include <lafs/lafs.h>
 #include <memory.h>
 #include <stdio.h>
+#include "internal.h"
 
 int lafs_imap_set(struct lafs_ino *ino, int inum)
 {
@@ -20,7 +21,7 @@ int lafs_imap_set(struct lafs_ino *ino, int inum)
        if (blknum > ino->md.inodemap.size)
                return -1;
 
-       printf("imap set %d %d %d\n", inum, blknum, ino->md.inodemap.size);
+       trace(2, "imap set %d %d %d\n", inum, blknum, ino->md.inodemap.size);
        db = lafs_dblk(ino, blknum);
        lafs_load_dblk(db);
        if (blknum == ino->md.inodemap.size) {
index 4dde047503736ff5272c941853bbf990581614a1..5cf3fba9751b848c177ef91b90040686039c7fc2 100644 (file)
@@ -11,6 +11,7 @@
 #include <lafs/lafs.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include "internal.h"
 
 #define encode16(p,n) ({ *(p++) = (n)&255; *(p++) = ((n)>>8) & 255; })
 #define encode32(p,n) ({ encode16(p,n); encode16(p, ((n)>>16)); })
@@ -52,7 +53,7 @@ void lafs_incorporate(struct lafs_iblk *ib)
                ip2 += addr * 6;
                encode48(ip2, b->physaddr);
        }
-       printf("incorp %d/%lld\n", ib->b.ino->dblock->b.ino->inum,
+       trace(1, "incorporate %d/%lld\n", ib->b.ino->dblock->b.ino->inum,
               (long long)ib->b.ino->dblock->b.fileaddr);
        lafs_dirty_blk(&ib->b);
 }
index bb14da249e825b986ff4b3968c0945f8d171b67e..ec1aabc1d4d9b031fea00a3dabbd635f2d342625 100644 (file)
@@ -7,6 +7,7 @@
 #include <lafs/lafs.h>
 #include <memory.h>
 #include <stdio.h>
+#include "internal.h"
 
 void lafs_inode_fillblock(struct lafs_ino *ino, char *buf)
 {
@@ -21,7 +22,7 @@ void lafs_inode_fillblock(struct lafs_ino *ino, char *buf)
        lino->filetype = ino->type;
        lino->flags = ino->flags;
 
-       printf("FILL %d\n", ino->type);
+       trace(1, "FILL inode %d\n", ino->type);
        switch(ino->type) {
        case TypeInodeFile:
        {
index a00fd3d7cf8c6b543b0d6c0bc1dfce281b13960a..150f0f0d352f810625f48e7019de2f83299580f9 100644 (file)
@@ -6,6 +6,8 @@
 #include <lafs/lafs.h>
 
 #include <stdio.h>
+#include "internal.h"
+
 
 int lafs_sched_blk(struct lafs_blk *blk)
 {
@@ -22,7 +24,7 @@ int lafs_sched_blk(struct lafs_blk *blk)
        blk->flags |= B_Sched;
        if (blk->parent)
                blk->parent->sched_cnt++;
-       printf("add %p\n", blk);
+       trace(1, "schedule %p\n", blk);
        list_add(&blk->leafs, &fs->leafs);
        return 0;
 }