tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: ubc_uiomove returns EINVAL
On Fri, Oct 24, 2014 at 10:42:03PM +0700, Robert Elz wrote:
> Date: Fri, 24 Oct 2014 13:19:01 +0000
> From: Emmanuel Dreyfus <manu%netbsd.org@localhost>
> Message-ID: <20141024131901.GK8379%homeworld.netbsd.org@localhost>
>
> | It happens in kcopy, an assembly language routine, in which I do not
> | see how we can get EINVAL returned.
>
> Yes, knew that (you can look back at the old thread on tech-kern,
> from mid August, subject "EINVAL from copyin/out - how?" to see as
> much as was worked out then (which was not much).
oops... sorry, somehow I didn't notice that thread.
> I have been expecting that the EINVAL comes from a fault, so far I have
> no idea what might be causing it.
the caller of uvm_fault() will arrange for kcopy(), copyin(), etc, to return
the error returned from uvm_fault(), which is probably coming from
VOP_GETPAGES() of the vnode you're trying to access with ubc_uiomove().
on i386 this is in trap() at the "copyfault" label:
copyfault:
frame->tf_eip = (uintptr_t)onfault;
frame->tf_eax = error;
if a read() or write() fails in VOP_GETPAGES() eg. with EIO, this is how
we return that errno back to the application.
I don't think all platforms have equivalent code to pass back the error
yet though, as I recall some still always return EFAULT.
-Chuck
Home |
Main Index |
Thread Index |
Old Index