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);
- }
-}
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
--- /dev/null
+
+/*
+ * 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);
+ }
+}
#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);
#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.
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;
#include <stdlib.h>
#include <lafs/lafs.h>
-
#include <stdio.h>
+#include "internal.h"
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);
}
}
if (b->flags & B_Dirty) {
- printf("...alloc\n");
+ trace(2, "...alloc\n");
lafs_cluster_allocate(b, 0);
} else
de_sched(b);
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);
*/
#include <lafs/lafs.h>
#include <stdlib.h>
+#include "internal.h"
void lafs_cluster_allocate(struct lafs_blk *b, int cnum)
{
#include <stdlib.h>
#include <memory.h>
#include <stdio.h>
+#include "internal.h"
/*-----------------------------------------------------------------------
* A segment is divided up in a slightly complicated way into
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;
}
#include <lafs/lafs.h>
#include <memory.h>
#include <stdio.h>
+#include "internal.h"
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) {
#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)); })
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);
}
#include <lafs/lafs.h>
#include <memory.h>
#include <stdio.h>
+#include "internal.h"
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:
{
#include <lafs/lafs.h>
#include <stdio.h>
+#include "internal.h"
+
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;
}