mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
Stop checking TD_IDLETHREAD() in buffer cache routines.
These predicates are vestigal and cannot be true today. For example, idle threads are not allowed to acquire locks. Also cache curthread in breada(). No functional change intended. Reviewed by: kib, mckusick MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20066
This commit is contained in:
parent
761618de05
commit
8e7130a8a7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=346888
@ -2073,8 +2073,11 @@ breada(struct vnode * vp, daddr_t * rablkno, int * rabsize, int cnt,
|
||||
struct ucred * cred, int flags, void (*ckhashfunc)(struct buf *))
|
||||
{
|
||||
struct buf *rabp;
|
||||
struct thread *td;
|
||||
int i;
|
||||
|
||||
td = curthread;
|
||||
|
||||
for (i = 0; i < cnt; i++, rablkno++, rabsize++) {
|
||||
if (inmem(vp, *rablkno))
|
||||
continue;
|
||||
@ -2083,16 +2086,14 @@ breada(struct vnode * vp, daddr_t * rablkno, int * rabsize, int cnt,
|
||||
brelse(rabp);
|
||||
continue;
|
||||
}
|
||||
if (!TD_IS_IDLETHREAD(curthread)) {
|
||||
#ifdef RACCT
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(curproc);
|
||||
racct_add_buf(curproc, rabp, 0);
|
||||
PROC_UNLOCK(curproc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
curthread->td_ru.ru_inblock++;
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(curproc);
|
||||
racct_add_buf(curproc, rabp, 0);
|
||||
PROC_UNLOCK(curproc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
td->td_ru.ru_inblock++;
|
||||
rabp->b_flags |= B_ASYNC;
|
||||
rabp->b_flags &= ~B_INVAL;
|
||||
if ((flags & GB_CKHASH) != 0) {
|
||||
@ -2148,16 +2149,14 @@ breadn_flags(struct vnode *vp, daddr_t blkno, int size, daddr_t *rablkno,
|
||||
*/
|
||||
readwait = 0;
|
||||
if ((bp->b_flags & B_CACHE) == 0) {
|
||||
if (!TD_IS_IDLETHREAD(td)) {
|
||||
#ifdef RACCT
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(td->td_proc);
|
||||
racct_add_buf(td->td_proc, bp, 0);
|
||||
PROC_UNLOCK(td->td_proc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
td->td_ru.ru_inblock++;
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(td->td_proc);
|
||||
racct_add_buf(td->td_proc, bp, 0);
|
||||
PROC_UNLOCK(td->td_proc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
td->td_ru.ru_inblock++;
|
||||
bp->b_iocmd = BIO_READ;
|
||||
bp->b_flags &= ~B_INVAL;
|
||||
if ((flags & GB_CKHASH) != 0) {
|
||||
@ -2258,16 +2257,14 @@ bufwrite(struct buf *bp)
|
||||
bp->b_runningbufspace = bp->b_bufsize;
|
||||
space = atomic_fetchadd_long(&runningbufspace, bp->b_runningbufspace);
|
||||
|
||||
if (!TD_IS_IDLETHREAD(curthread)) {
|
||||
#ifdef RACCT
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(curproc);
|
||||
racct_add_buf(curproc, bp, 1);
|
||||
PROC_UNLOCK(curproc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
curthread->td_ru.ru_oublock++;
|
||||
if (racct_enable) {
|
||||
PROC_LOCK(curproc);
|
||||
racct_add_buf(curproc, bp, 1);
|
||||
PROC_UNLOCK(curproc);
|
||||
}
|
||||
#endif /* RACCT */
|
||||
curthread->td_ru.ru_oublock++;
|
||||
if (oldflags & B_ASYNC)
|
||||
BUF_KERNPROC(bp);
|
||||
bp->b_iooffset = dbtob(bp->b_blkno);
|
||||
@ -4019,9 +4016,6 @@ getblkx(struct vnode *vp, daddr_t blkno, int size, int slpflag, int slptimeo,
|
||||
*/
|
||||
if (flags & GB_NOCREAT)
|
||||
return (EEXIST);
|
||||
if (bdomain[bo->bo_domain].bd_freebuffers == 0 &&
|
||||
TD_IS_IDLETHREAD(curthread))
|
||||
return (EBUSY);
|
||||
|
||||
bsize = vn_isdisk(vp, NULL) ? DEV_BSIZE : bo->bo_bsize;
|
||||
KASSERT(bsize != 0, ("bsize == 0, check bo->bo_bsize"));
|
||||
|
Loading…
Reference in New Issue
Block a user