Page MenuHomeFreeBSD

D47696.diff
No OneTemporary

D47696.diff

diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -206,7 +206,7 @@
int vmiodirenable = TRUE;
SYSCTL_INT(_vfs, OID_AUTO, vmiodirenable, CTLFLAG_RW, &vmiodirenable, 0,
"Use the VM system for directory writes");
-long runningbufspace;
+static long runningbufspace;
SYSCTL_LONG(_vfs, OID_AUTO, runningbufspace, CTLFLAG_RD, &runningbufspace, 0,
"Amount of presently outstanding async buffer io");
SYSCTL_PROC(_vfs, OID_AUTO, bufspace, CTLTYPE_LONG|CTLFLAG_MPSAFE|CTLFLAG_RD,
@@ -941,6 +941,16 @@
runningwakeup();
}
+long
+runningbufclaim(struct buf *bp, int space)
+{
+ long old;
+
+ old = atomic_fetchadd_long(&runningbufspace, space);
+ bp->b_runningbufspace = space;
+ return (old);
+}
+
/*
* waitrunningbufspace()
*
@@ -2352,8 +2362,7 @@
/*
* Normal bwrites pipeline writes
*/
- bp->b_runningbufspace = bp->b_bufsize;
- space = atomic_fetchadd_long(&runningbufspace, bp->b_runningbufspace);
+ space = runningbufclaim(bp, bp->b_bufsize);
#ifdef RACCT
if (racct_enable) {
diff --git a/sys/sys/buf.h b/sys/sys/buf.h
--- a/sys/sys/buf.h
+++ b/sys/sys/buf.h
@@ -519,7 +519,6 @@
extern u_long maxswzone; /* Max KVA for swap structures */
extern u_long maxbcache; /* Max KVA for buffer cache */
extern int maxbcachebuf; /* Max buffer cache block size */
-extern long runningbufspace;
extern long hibufspace;
extern int dirtybufthresh;
extern int bdwriteskip;
@@ -536,6 +535,7 @@
return (bp->b_data != unmapped_buf);
}
+long runningbufclaim(struct buf *, int);
void runningbufwakeup(struct buf *);
void waitrunningbufspace(void);
caddr_t kern_vfs_bio_buffer_alloc(caddr_t v, long physmem_est);
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c
--- a/sys/ufs/ffs/ffs_snapshot.c
+++ b/sys/ufs/ffs/ffs_snapshot.c
@@ -2343,9 +2343,8 @@
TAILQ_EMPTY(&sn->sn_head)) {
VI_UNLOCK(devvp);
if (saved_runningbufspace != 0) {
- bp->b_runningbufspace = saved_runningbufspace;
- atomic_add_long(&runningbufspace,
- bp->b_runningbufspace);
+ (void)runningbufclaim(bp,
+ saved_runningbufspace);
}
return (0); /* Snapshot gone */
}
@@ -2479,10 +2478,8 @@
/*
* I/O on bp will now be started, so count it in runningbufspace.
*/
- if (saved_runningbufspace != 0) {
- bp->b_runningbufspace = saved_runningbufspace;
- atomic_add_long(&runningbufspace, bp->b_runningbufspace);
- }
+ if (saved_runningbufspace != 0)
+ (void)runningbufclaim(bp, saved_runningbufspace);
return (error);
}
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -2517,9 +2517,7 @@
return;
}
}
- bp->b_runningbufspace = bp->b_bufsize;
- atomic_add_long(&runningbufspace,
- bp->b_runningbufspace);
+ (void)runningbufclaim(bp, bp->b_bufsize);
} else {
error = ffs_copyonwrite(vp, bp);
if (error != 0 && error != EOPNOTSUPP) {
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -717,8 +717,7 @@
bp->b_vp = vp;
bp->b_bcount = bsize;
bp->b_bufsize = bsize;
- bp->b_runningbufspace = bp->b_bufsize;
- atomic_add_long(&runningbufspace, bp->b_runningbufspace);
+ (void)runningbufclaim(bp, bp->b_bufsize);
/* do the input */
bp->b_iooffset = dbtob(bp->b_blkno);
@@ -1160,7 +1159,7 @@
bp->b_wcred = crhold(curthread->td_ucred);
pbgetbo(bo, bp);
bp->b_vp = vp;
- bp->b_bcount = bp->b_bufsize = bp->b_runningbufspace = bytecount;
+ bp->b_bcount = bp->b_bufsize = bytecount;
bp->b_iooffset = dbtob(bp->b_blkno);
KASSERT(IDX_TO_OFF(m[0]->pindex - bp->b_pages[0]->pindex) ==
(blkno0 - bp->b_blkno) * DEV_BSIZE +
@@ -1170,7 +1169,8 @@
(uintmax_t)m[0]->pindex, (uintmax_t)bp->b_pages[0]->pindex,
(uintmax_t)blkno0, (uintmax_t)bp->b_blkno));
- atomic_add_long(&runningbufspace, bp->b_runningbufspace);
+ (void)runningbufclaim(bp, bp->b_bufsize);
+
VM_CNT_INC(v_vnodein);
VM_CNT_ADD(v_vnodepgsin, bp->b_npages);

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 29, 2:32 PM (20 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17841938
Default Alt Text
D47696.diff (3 KB)

Event Timeline