Fix asynchronous physio breakage introduced in rev 1.163.
We cannnot use bp->b_caller2 because DEV_STRATEGY will overwrite it.
This commit is contained in:
parent
a47efb5a40
commit
c286d7e22f
@ -1097,7 +1097,6 @@ aio_qphysio(struct proc *p, struct aiocblist *aiocbe)
|
|||||||
/*
|
/*
|
||||||
* Get a copy of the kva from the physical buffer.
|
* Get a copy of the kva from the physical buffer.
|
||||||
*/
|
*/
|
||||||
bp->b_caller1 = p;
|
|
||||||
bp->b_dev = vp->v_rdev;
|
bp->b_dev = vp->v_rdev;
|
||||||
error = 0;
|
error = 0;
|
||||||
|
|
||||||
@ -1120,7 +1119,7 @@ aio_qphysio(struct proc *p, struct aiocblist *aiocbe)
|
|||||||
|
|
||||||
s = splbio();
|
s = splbio();
|
||||||
aiocbe->bp = bp;
|
aiocbe->bp = bp;
|
||||||
bp->b_caller2 = (void *)aiocbe;
|
bp->b_caller1 = (void *)aiocbe;
|
||||||
TAILQ_INSERT_TAIL(&aio_bufjobs, aiocbe, list);
|
TAILQ_INSERT_TAIL(&aio_bufjobs, aiocbe, list);
|
||||||
TAILQ_INSERT_TAIL(&ki->kaio_bufqueue, aiocbe, plist);
|
TAILQ_INSERT_TAIL(&ki->kaio_bufqueue, aiocbe, plist);
|
||||||
aiocbe->jobstate = JOBST_JOBQBUF;
|
aiocbe->jobstate = JOBST_JOBQBUF;
|
||||||
@ -2128,9 +2127,9 @@ aio_physwakeup(struct buf *bp)
|
|||||||
|
|
||||||
wakeup(bp);
|
wakeup(bp);
|
||||||
|
|
||||||
aiocbe = (struct aiocblist *)bp->b_caller2;
|
aiocbe = (struct aiocblist *)bp->b_caller1;
|
||||||
if (aiocbe) {
|
if (aiocbe) {
|
||||||
p = bp->b_caller1;
|
p = aiocbe->userproc;
|
||||||
|
|
||||||
aiocbe->jobstate = JOBST_JOBBFINISHED;
|
aiocbe->jobstate = JOBST_JOBBFINISHED;
|
||||||
aiocbe->uaiocb._aiocb_private.status -= bp->b_resid;
|
aiocbe->uaiocb._aiocb_private.status -= bp->b_resid;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user