tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: VOP_PUTPAGE ignores mount_nfs -o soft,intr
On Tue, 23 Jun 2015, Emmanuel Dreyfus wrote:
> I note we have this in genfs_do_io(), and I suspect this is the same 2 value:
>
> if (iowrite) {
> mutex_enter(vp->v_interlock);
> vp->v_numoutput += 2;
> mutex_exit(vp->v_interlock);
> }
> mbp = ge
>
> Why the vp->v_numoutput += 2 ?
From what I recall it's because this is a nested buf. You need one for
the biodone of the parent buf, and another for the child.
Look at the bottom of the routine you will see:
loopdone:
if (skipbytes) {
UVMHIST_LOG(ubchist, "skipbytes %d", skipbytes, 0,0,0);
}
nestiobuf_done(mbp, skipbytes, error);
if (async) {
UVMHIST_LOG(ubchist, "returning 0 (async)", 0,0,0,0);
return (0);
}
UVMHIST_LOG(ubchist, "waiting for mbp %p", mbp,0,0,0);
error = biowait(mbp);
s = splbio();
(*iodone)(mbp);
splx(s);
UVMHIST_LOG(ubchist, "returning, error %d", error,0,0,0);
return (error);
}
So nestiobuf_done() will result in a call to biodone(), and there is an
additional (*iodone)() call at the end for sync operations which also
calls biodone(). For async operations the second biodone() is called by
the storage driver when the I/O operation completes.
Eduardo
Home |
Main Index |
Thread Index |
Old Index