Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/ufs/lfs using normal bufcache buffer for cluster buffer ...
details: https://anonhg.NetBSD.org/src/rev/4e35e2840a09
branches: trunk
changeset: 550118:4e35e2840a09
user: yamt <yamt%NetBSD.org@localhost>
date: Wed Jul 30 13:36:40 2003 +0000
description:
using normal bufcache buffer for cluster buffer head.
diffstat:
sys/ufs/lfs/lfs.h | 4 +--
sys/ufs/lfs/lfs_segment.c | 66 +++++++---------------------------------------
2 files changed, 11 insertions(+), 59 deletions(-)
diffs (139 lines):
diff -r 6a821025954e -r 4e35e2840a09 sys/ufs/lfs/lfs.h
--- a/sys/ufs/lfs/lfs.h Wed Jul 30 12:38:53 2003 +0000
+++ b/sys/ufs/lfs/lfs.h Wed Jul 30 13:36:40 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs.h,v 1.67 2003/07/12 16:17:06 yamt Exp $ */
+/* $NetBSD: lfs.h,v 1.68 2003/07/30 13:36:40 yamt Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -896,8 +896,6 @@
u_int32_t flags; /* Flags */
struct lfs *fs; /* LFS that this belongs to */
struct segment *seg; /* Segment structure, for LFS_CL_SYNC */
- void *saveaddr; /* Original contents of saveaddr */
- char *olddata; /* Original b_data, if LFS_CL_MALLOC */
};
#endif /* _KERNEL */
diff -r 6a821025954e -r 4e35e2840a09 sys/ufs/lfs/lfs_segment.c
--- a/sys/ufs/lfs/lfs_segment.c Wed Jul 30 12:38:53 2003 +0000
+++ b/sys/ufs/lfs/lfs_segment.c Wed Jul 30 13:36:40 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_segment.c,v 1.129 2003/07/23 13:53:51 yamt Exp $ */
+/* $NetBSD: lfs_segment.c,v 1.130 2003/07/30 13:36:40 yamt Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.129 2003/07/23 13:53:51 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.130 2003/07/30 13:36:40 yamt Exp $");
#define ivndebug(vp,str) printf("ino %d: %s\n",VTOI(vp)->i_number,(str))
@@ -1591,20 +1591,6 @@
}
}
-#define BQUEUES 4 /* XXX */
-#define BQ_EMPTY 3 /* XXX */
-extern TAILQ_HEAD(bqueues, buf) bufqueues[BQUEUES];
-extern struct simplelock bqueue_slock;
-
-#define BUFHASH(dvp, lbn) \
- (&bufhashtbl[((long)(dvp) / sizeof(*(dvp)) + (int)(lbn)) & bufhash])
-extern LIST_HEAD(bufhashhdr, buf) invalhash;
-/*
- * Insq/Remq for the buffer hash lists.
- */
-#define binshash(bp, dp) LIST_INSERT_HEAD(dp, bp, b_hash)
-#define bremhash(bp) LIST_REMOVE(bp, b_hash)
-
static struct buf *
lfs_newclusterbuf(struct lfs *fs, struct vnode *vp, daddr_t addr, int n)
{
@@ -1630,41 +1616,17 @@
/* Get an empty buffer header, or maybe one with something on it */
s = splbio();
- simple_lock(&bqueue_slock);
- if ((bp = TAILQ_FIRST(&bufqueues[BQ_EMPTY])) != NULL) {
- simple_lock(&bp->b_interlock);
- bremfree(bp);
- /* clear out various other fields */
- bp->b_flags = B_BUSY;
- bp->b_dev = NODEV;
- bp->b_blkno = bp->b_lblkno = 0;
- bp->b_error = 0;
- bp->b_resid = 0;
- bp->b_bcount = 0;
-
- /* nuke any credentials we were holding */
- /* XXXXXX */
-
- bremhash(bp);
+ bp = pool_get(&bufpool, PR_WAITOK); /* XXX should use lfs_malloc? */
+ splx(s);
+ memset(bp, 0, sizeof(*bp));
+ BUF_INIT(bp);
- /* disassociate us from our vnode, if we had one... */
- if (bp->b_vp)
- brelvp(bp);
- }
- while (!bp)
- bp = getnewbuf(0, 0);
- bgetvp(vp, bp);
- binshash(bp,&invalhash);
- simple_unlock(&bp->b_interlock);
- simple_unlock(&bqueue_slock);
- splx(s);
- bp->b_bcount = 0;
+ bp->b_flags = B_BUSY | B_CALL;
+ bp->b_dev = NODEV;
bp->b_blkno = bp->b_lblkno = addr;
-
- bp->b_flags |= B_CALL;
bp->b_iodone = lfs_cluster_callback;
- cl->saveaddr = bp->b_saveaddr; /* XXX is this ever used? */
bp->b_saveaddr = (caddr_t)cl;
+ bp->b_vp = vp;
return bp;
}
@@ -1958,7 +1920,6 @@
cbp->b_flags |= B_ASYNC | B_BUSY;
cbp->b_bcount = 0;
- cl->olddata = cbp->b_data;
#if defined(DEBUG) && defined(DIAGNOSTIC)
if (bpp - sp->bpp > (fs->lfs_sumsize - SEGSUM_SIZE(fs))
/ sizeof(int32_t)) {
@@ -2213,7 +2174,6 @@
cl = (struct lfs_cluster *)bp->b_saveaddr;
fs = cl->fs;
devvp = VTOI(fs->lfs_ivnode)->i_devvp;
- bp->b_saveaddr = cl->saveaddr;
cp = (char *)bp->b_data + cl->bufsize;
/* Put the pages back, and release the buffer */
@@ -2310,15 +2270,9 @@
/* Fix up the cluster buffer, and release it */
if (cl->flags & LFS_CL_MALLOC)
lfs_free(fs, bp->b_data, LFS_NB_CLUSTER);
- bp->b_data = cl->olddata;
- bp->b_bcount = 0;
- bp->b_iodone = NULL;
- bp->b_flags &= ~B_DELWRI;
- bp->b_flags |= B_DONE;
s = splbio();
- reassignbuf(bp, bp->b_vp);
+ pool_put(&bufpool, bp); /* XXX should use lfs_free? */
splx(s);
- brelse(bp);
/* Note i/o done */
if (cl->flags & LFS_CL_SYNC) {
Home |
Main Index |
Thread Index |
Old Index