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: 2014年10月24日 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

AltStyle によって変換されたページ (->オリジナル) /