From: NeilBrown Date: Wed, 2 Mar 2011 23:02:31 +0000 (+1100) Subject: Add tracing control to liblafs X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=eb1dc79cbbbf614d3051ac21aacf22c936cfa932;p=lafs-utils.git Add tracing control to liblafs 'printf' becomes 'trace' and can now be turned on/off by an environment variable. Signed-off-by: NeilBrown --- diff --git a/include/lafs/lafs.h b/include/lafs/lafs.h index fed212d..897ead6 100644 --- a/include/lafs/lafs.h +++ b/include/lafs/lafs.h @@ -130,21 +130,3 @@ virttophys(struct lafs *fs, loff_t virt, int *devp, loff_t *sectp) virt += dv->segment_offset; *sectp = virt; } - -#include -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); - } -} diff --git a/lib/Makefile b/lib/Makefile index 3c5585d..35bd5ac 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -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 index 0000000..57ebd9f --- /dev/null +++ b/lib/internal.h @@ -0,0 +1,28 @@ + +/* + * Internal use defines for liblafs - not externally visible + */ +#include + +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); + } +} diff --git a/lib/lafs_alloc.c b/lib/lafs_alloc.c index 45e96db..6255c5d 100644 --- a/lib/lafs_alloc.c +++ b/lib/lafs_alloc.c @@ -3,12 +3,24 @@ #include #include #include +#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); diff --git a/lib/lafs_allocated_block.c b/lib/lafs_allocated_block.c index 8280ae9..7cf7081 100644 --- a/lib/lafs_allocated_block.c +++ b/lib/lafs_allocated_block.c @@ -8,14 +8,16 @@ #include #include #include +#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; diff --git a/lib/lafs_checkpoint.c b/lib/lafs_checkpoint.c index 2e28525..049694c 100644 --- a/lib/lafs_checkpoint.c +++ b/lib/lafs_checkpoint.c @@ -6,8 +6,8 @@ #include #include - #include +#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); diff --git a/lib/lafs_cluster_allocate.c b/lib/lafs_cluster_allocate.c index 16a21fd..d042401 100644 --- a/lib/lafs_cluster_allocate.c +++ b/lib/lafs_cluster_allocate.c @@ -10,6 +10,7 @@ */ #include #include +#include "internal.h" void lafs_cluster_allocate(struct lafs_blk *b, int cnum) { diff --git a/lib/lafs_cluster_flush.c b/lib/lafs_cluster_flush.c index 4c7d844..442091d 100644 --- a/lib/lafs_cluster_flush.c +++ b/lib/lafs_cluster_flush.c @@ -12,6 +12,7 @@ #include #include #include +#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; } diff --git a/lib/lafs_imap_set.c b/lib/lafs_imap_set.c index c46af05..2e2e18c 100644 --- a/lib/lafs_imap_set.c +++ b/lib/lafs_imap_set.c @@ -8,6 +8,7 @@ #include #include #include +#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) { diff --git a/lib/lafs_incorporate.c b/lib/lafs_incorporate.c index 4dde047..5cf3fba 100644 --- a/lib/lafs_incorporate.c +++ b/lib/lafs_incorporate.c @@ -11,6 +11,7 @@ #include #include #include +#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); } diff --git a/lib/lafs_inode_fillblock.c b/lib/lafs_inode_fillblock.c index bb14da2..ec1aabc 100644 --- a/lib/lafs_inode_fillblock.c +++ b/lib/lafs_inode_fillblock.c @@ -7,6 +7,7 @@ #include #include #include +#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: { diff --git a/lib/lafs_sched_blk.c b/lib/lafs_sched_blk.c index a00fd3d..150f0f0 100644 --- a/lib/lafs_sched_blk.c +++ b/lib/lafs_sched_blk.c @@ -6,6 +6,8 @@ #include #include +#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; }