Re: Getting a read call before open
Re: Getting a read call before open
- Subject: Re: Getting a read call before open
- From: Terry Lambert <email@hidden>
- Date: Wed, 25 Jun 2008 23:03:18 -0700
On Jun 25, 2008, at 6:54 PM, shailesh jain wrote:
When I try to run executable over my filesystem, it just hangs (i.e
shell prompt never returns) when I tried to do implicit open in the
read call to my filesystem.
Digging through the source code, I found that execve calls vn_rdwr()
and subsequently, VOP_READ() call. This read is invoked to load
PAGESIZE bytes (4096) which my filesystem delivers it properly.
However, I do not get read call to load remaining bytes. I can't
seem to decipher that.
/Shail
On Wed, Jun 25, 2008 at 4:12 PM, shailesh jain <email@hidden
> wrote:
Is it legitimate for a filesystem to get a read call before open
call ? Also, how should a filesystem
handle such behavior (implicit opens and close ?)
Hi; sounds like you are writing a remote filesystem.
If you vend a vnode, be prepared to get any number of calls upon it.
Once it has been vended, yo have agreed to puture calls on it until
such time as it has been released back t you for recycling.
Certain filesystems dislike this (SMB, as an example, disallows
renames for open files, and we don't support ETXTBUSY unless the FS
client maintains "this has been exec'ed state" and returns it
itself). I understand that this can bother people, but until the
vnode has been invalidated, either by being given back to you as no
longer being needed by who you gave it to, or being deadfs'ed (e.g. by
a forced unmount from your side of things), it is the property of
whoever you vended it to.
Another situation where it's possible for this to happen is open/mmap/
close, where the memory mapping is kept active by a vnode reference by
the paging system (maybe you just did not notice the open/close, and
now you incorrectly think it's closed). Again, as far as the kernel is
concerned, the vnode pointer *is* the file.
For the specific case of exec, yes, there is a vn_rdwr() after you
vended the open vnode to the exec code via a lookup of a name. You
will potentially get VOP_READ() calls if it's a FAT file or you have
code signing, and you will definitely get vm mappings established for
the address space of the new process, so what you are seeing is both
reasonable and expected.
If you choose to rip the vnode out from under us, of course whatever
program you are running will crash the first time it page faults in a
clean page from the backing store you promised it when you gave out
the vp.
Hope this clears things up for you.
- Terry
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden