version 1.2, 2003/03/31 19:56:59 |
version 1.3, 2005/02/26 05:45:54 |
|
|
getblk(struct uvnode * vp, daddr_t lbn, int size) |
getblk(struct uvnode * vp, daddr_t lbn, int size) |
{ |
{ |
struct ubuf *bp; |
struct ubuf *bp; |
|
#ifdef DEBUG |
|
static int warned; |
|
#endif |
|
|
/* |
/* |
* First check the buffer cache lists. |
* First check the buffer cache lists. |
Line 199 getblk(struct uvnode * vp, daddr_t lbn, |
|
Line 202 getblk(struct uvnode * vp, daddr_t lbn, |
|
if (bp == NULL) { |
if (bp == NULL) { |
bp = TAILQ_FIRST(&bufqueues[BQ_LRU]); |
bp = TAILQ_FIRST(&bufqueues[BQ_LRU]); |
if (bp) |
if (bp) |
TAILQ_REMOVE(&bufqueues[BQ_AGE], bp, |
TAILQ_REMOVE(&bufqueues[BQ_LRU], bp, |
b_freelist); |
b_freelist); |
} |
} |
if (bp) { |
if (bp) { |
Line 209 getblk(struct uvnode * vp, daddr_t lbn, |
|
Line 212 getblk(struct uvnode * vp, daddr_t lbn, |
|
} |
} |
#ifdef DEBUG |
#ifdef DEBUG |
else { |
else { |
warnx("no free buffers, allocating more than %d", |
if (!warned) |
maxbufs); |
warnx("allocating more than %d buffers", |
|
maxbufs); |
|
++warned; |
|
break; |
} |
} |
#endif |
#endif |
} |
} |
Line 315 reassignbuf(struct ubuf * bp, struct uvn |
|
Line 321 reassignbuf(struct ubuf * bp, struct uvn |
|
LIST_INSERT_HEAD(&vp->v_cleanblkhd, bp, b_vnbufs); |
LIST_INSERT_HEAD(&vp->v_cleanblkhd, bp, b_vnbufs); |
} |
} |
} |
} |
|
|
|
#ifdef DEBUG |
|
void |
|
dump_free_lists(void) |
|
{ |
|
struct ubuf *bp; |
|
int i; |
|
|
|
for (i = 0; i <= BQ_LOCKED; i++) { |
|
printf("==> free list %d:\n", i); |
|
TAILQ_FOREACH(bp, &bufqueues[i], b_freelist) { |
|
printf("vp %p lbn %" PRId64 " flags %lx\n", |
|
bp->b_vp, bp->b_lblkno, bp->b_flags); |
|
} |
|
} |
|
} |
|
#endif |