[unionfs][patch] improvements of the unionfs - Problem Report, kern/91010

Masanori OZAWA ozawa at ongs.co.jp
Wed Dec 28 19:41:40 PST 2005


I gave a send-pr around the improvement of the unionfs. Please look at
the follow url in specific for interested poeple whom it may committer
or official people who can merge my patches.

http://www.freebsd.org/cgi/query-pr.cgi?pr=91010

The established unionfs implementaion is weak around thier functions.
Some systems that use unionfs like FreeSBIE need more rich function.
My improvements give the more rich features to get it on. I want to give
a suggestion to the maintainer of unionfs to merge my patch    :)

New features of my improvements are follow:

----
mount_unionfs:

 - added "[-c <old|fullcopy|useful>]"
       Set copy strategy for copying from lower layer to upper layer
     around files and directories. The strategies are "old", "fullcopy"
     and "useful" setting by root only.

      old:       the same strategy as established unionfs. (default)
      fullcopy:  upper layer gets full copy of lower layer status.
      useful:    user can get access controlling by -m, -M, -u and -g.
                 only owner's access permission get chagne when target
                 owner is the same as original owner.

 - added "[-m permission]"
       Set access permission for file with "useful" strategy only.
     mount target directory gives default permission. permission
     given by "-M" gives default permission when "-m" is not given.

  - added "[-M permission]"
       Set access permission for directory with "useful" strategy only.
     mount target directory gives default permission. permission
     given by "-m" gives default permission when "-M" is not given.

  - added "[-u owner]"
       Set owner with "useful" strategy only. mount target directory
     gives default owner.

  - added "[-g group]"
       Set group with "useful" strategy only. mount target directory
     gives default group.

 - deleted "[-r]"
     "-r" option is not needed because mount_nullfs has instead

----

I got some load test, and looks like it works fine. The simple test is
to use some commads like cp, mv, mkdir, chmod and ls. The heavy
test is like as follow:
  # mount_unionfs -c useful /usr/ufs1 /usr/obj
  # mount_unionfs /usr/ufs2 /usr/src
  # cd /usr/src
  # make buildkernel
  # make clean
  # make -j2 buildworld
  # make clean
  # umount /usr/obj
  # cd
  # umount /usr/src

<Notice>
Wojciech A. Koszek <dunstan at freebsd.czest.pl> has pointed out,
my improvements of unionfs can not get the same way to use with
nullfs. The problem depends on the locking mechanism of the
FreeBSD VFS.

Unionfs, of course, should control the two fs locks both of the
upper layer and the lower layer. It use ``struct vnode *vp;
vp->v_vnlock = foobar;'' as lock mechanism. And nullfs use the
same one. That is a problem. I think that nullfs should get change
of the implementaion from the complexity of the implementation
rather than to get change of unionf's implementation.

However, as a first step of the unionfs-improvements, to merge my
patches is very meaningful I think.

Finally, so sorry my English is not enough to get communication
with you. My boss, daichi at freebsd.org gives us the help of
communication (as a matter of fact he wrote most of this mail    ;)   .
Please gives daichi at freebsd.org as CC: for my mail.

Thanks.    :)

-- 
  ONGS Inc.
  Masanori OZAWA (ozawa at ongs.co.jp)
  WWW: http://www.ongs.co.jp/


More information about the freebsd-current mailing list