[PATCH] tmpfs work update 013010 (was tmpfs initial work)

Naoya Sugioka naoya.sugioka at gmail.com
Sun Jan 31 01:14:25 PST 2010


Hi Matt and others,

Here comes 3rd iteration.

1) reimplement tmpfs_read(), tmpfs_write() call by following Matt's
suggestion . I referred
    HAMMER and userfs implementation. An old vm_page_gram() logic now gone here

2) tmpfs_strategy() is a kind of temporary hack. Just call
vm_pager_strategy(). Tmpfs's
    anonymous vm object is swap object type, so It will reach swap
backend store.
    As Matt suggested, I'll come back later here to implement more
efficient logic.

3) implement  tmpfs_advlock() with lockf structure

The change makes tmpfs more stable (make nativekernel works on tmpfs
:) though, still
some issues. 1)An umount will hit assertion. 2)There are some cases to
observe non-res
from tmpfs too. 3)An userland command (mount_tmpfs) is no progress,
has a lack of features.

I'll start looking a new truncation/extention API beyond this change,
then dive into above
issues and items.

thank you, Any comments are always welcome.
-Naoya

On Wed, Jan 20, 2010 at 1:50 AM, Matthew Dillon
<dillon at apollo.backplane.com> wrote:
>
> :Hi Matt,
> :
> :Thank you for the precise response. It is a same strategy of previous porter.
> :I thought it is a way to remove a dirty hack (vm object and anonymous
> :object shares rb_memq)
> :I'll play around implementing a buffer cache (or maybe, a page
> :cache)...it is a most interesting
> :part of this poring.
> :
> :Regarding to the old APIs, I try to migrate the code to follow your vm
> :change first.
> :
> :thank you again,
> :-Naoya
>
>    Cool.  Using the buffer cache is actually pretty easy to do.
>    You are already using vop_stdgetpages() and vop_stdputpages()
>    so you don't have to worry about those functions.  In fact,
>    those functions require a working buffer cache anyway so when
>    you implement the buffer cache mmap() will magically start
>    working properly.
>
>    If you use a fixed buffer size (say 16K) then you can use the
>    new API to control truncations and extensions.  Basically
>    nvtruncbuf() and nvextendbuf().  NFS uses the new API now too
>    so you have a working example you can use.
>
>    Using the buffer cache is pretty easy.  Essentially
>    you are implementing a buffering layer in vop_read() and
>    vop_write() which directly maps the VM pages in the backing
>    object into kernel memory via the buffer cache, allowing
>    you to use uiomove() to copy data from user memory into
>    the VM pages and vise-versa.  For reference material HAMMER
>    has the easiest-to-follow code for vop_read/vop_write.  NFS
>    is fairly easy to follow too.
>
>    Apart from vop_read, vop_write, and dealing with ftruncate()
>    (file extensions and truncations via vop_setattr), plus the
>    implied file extension which occurs when a write() appends or
>    extends a file via vop_write, you also need to deal with
>    vop_strategy.
>
>    vop_strategy is the function which in a normal filesystem is
>    used to read data from the media into the buffer cache or write
>    data from the buffer cache to the media.  The READ operations is
>    going to be a NOP.  The WRITE operation will have to be coded to
>    deal with redirtying the underlying VM pages.
>
>    --
>
>    In terms of associating swap space with the VM object, you don't
>    have to worry about it until you get everything else working.
>    Once you do if you want to take a stab at it what you would do
>    is implement the reading from swap and writing to swap in
>    vop_strategy().  READ would no longer be a NOP, and WRITE would
>    write the data to swap space instead of redirtying the VM pages.
>
>                                                -Matt
>
>
Attachment:
0003-tmpfs-013010-update-work.patch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bin00002.bin
Type: application/octet-stream
Size: 145601 bytes
Desc: "Description: Binary data"
URL: <http://lists.dragonflybsd.org/pipermail/users/attachments/20100131/20b3489b/attachment-0020.bin>


More information about the Users mailing list