packages: kernel/kernel.spec, kernel/kernel-aufs2.patch - updated aufs2 patch
arekm
arekm at pld-linux.org
Mon May 31 22:27:01 CEST 2010
Author: arekm Date: Mon May 31 20:27:01 2010 GMT
Module: packages Tag: HEAD
---- Log message:
- updated aufs2 patch
---- Files affected:
packages/kernel:
kernel.spec (1.790 -> 1.791) , kernel-aufs2.patch (1.6 -> 1.7)
---- Diffs:
================================================================
Index: packages/kernel/kernel.spec
diff -u packages/kernel/kernel.spec:1.790 packages/kernel/kernel.spec:1.791
--- packages/kernel/kernel.spec:1.790 Fri May 28 10:56:26 2010
+++ packages/kernel/kernel.spec Mon May 31 22:26:55 2010
@@ -288,6 +288,7 @@
Patch145: kernel-aufs.patch
Patch146: kernel-aufs-support.patch
+# http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git, read README
Patch148: kernel-aufs2.patch
Patch150: kernel-ppc-crtsavres.patch
@@ -1592,6 +1593,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.791 2010/05/31 20:26:55 arekm
+- updated aufs2 patch
+
Revision 1.790 2010/05/28 08:56:26 arekm
- reiser4 patch updated
================================================================
Index: packages/kernel/kernel-aufs2.patch
diff -u packages/kernel/kernel-aufs2.patch:1.6 packages/kernel/kernel-aufs2.patch:1.7
--- packages/kernel/kernel-aufs2.patch:1.6 Tue Sep 22 01:32:18 2009
+++ packages/kernel/kernel-aufs2.patch Mon May 31 22:26:55 2010
@@ -1,7 +1,7 @@
-diff -uprN -x .git linux-2.6.31/Documentation/ABI/testing/debugfs-aufs aufs2-2.6.git/Documentation/ABI/testing/debugfs-aufs
---- linux-2.6.31/Documentation/ABI/testing/debugfs-aufs 1970-01-01 00:00:00.000000000 +0000
-+++ aufs2-2.6.git/Documentation/ABI/testing/debugfs-aufs 2009-09-14 14:52:35.032396516 +0000
-@@ -0,0 +1,40 @@
+diff -urN --exclude '*.orig' linux-2.6.34.org/Documentation/ABI/testing/debugfs-aufs linux-2.6.34/Documentation/ABI/testing/debugfs-aufs
+--- linux-2.6.34.org/Documentation/ABI/testing/debugfs-aufs 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.34/Documentation/ABI/testing/debugfs-aufs 2010-05-31 22:15:32.000000000 +0200
+@@ -0,0 +1,37 @@
+What: /debug/aufs/si_<id>/
+Date: March 2009
+Contact: J. R. Okajima <hooanon05 at yahoo.co.jp>
@@ -17,8 +17,7 @@
+ It shows the consumed blocks by xib (External Inode Number
+ Bitmap), its block size and file size.
+ When the aufs mount option 'noxino' is specified, it
-+ will be empty. About XINO files, see
-+ Documentation/filesystems/aufs/aufs.5 in detail.
++ will be empty. About XINO files, see the aufs manual.
+
+What: /debug/aufs/si_<id>/xino0, xino1 ... xinoN
+Date: March 2009
@@ -28,8 +27,7 @@
+ Translation Table), its link count, block size and file
+ size.
+ When the aufs mount option 'noxino' is specified, it
-+ will be empty. About XINO files, see
-+ Documentation/filesystems/aufs/aufs.5 in detail.
++ will be empty. About XINO files, see the aufs manual.
+
+What: /debug/aufs/si_<id>/xigen
+Date: March 2009
@@ -40,12 +38,11 @@
+ If CONFIG_AUFS_EXPORT is disabled, this entry will not
+ be created.
+ When the aufs mount option 'noxino' is specified, it
-+ will be empty. About XINO files, see
-+ Documentation/filesystems/aufs/aufs.5 in detail.
-diff -uprN -x .git linux-2.6.31/Documentation/ABI/testing/sysfs-aufs aufs2-2.6.git/Documentation/ABI/testing/sysfs-aufs
---- linux-2.6.31/Documentation/ABI/testing/sysfs-aufs 1970-01-01 00:00:00.000000000 +0000
-+++ aufs2-2.6.git/Documentation/ABI/testing/sysfs-aufs 2009-09-14 14:52:35.032396516 +0000
-@@ -0,0 +1,25 @@
++ will be empty. About XINO files, see the aufs manual.
+diff -urN --exclude '*.orig' linux-2.6.34.org/Documentation/ABI/testing/sysfs-aufs linux-2.6.34/Documentation/ABI/testing/sysfs-aufs
+--- linux-2.6.34.org/Documentation/ABI/testing/sysfs-aufs 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.34/Documentation/ABI/testing/sysfs-aufs 2010-05-31 22:15:32.000000000 +0200
+@@ -0,0 +1,24 @@
+What: /sys/fs/aufs/si_<id>/
+Date: March 2009
+Contact: J. R. Okajima <hooanon05 at yahoo.co.jp>
@@ -69,1484 +66,13 @@
+ Bitmap, Translation Table and Generation Table) file
+ even if it is the default path.
+ When the aufs mount option 'noxino' is specified, it
-+ will be empty. About XINO files, see
-+ Documentation/filesystems/aufs/aufs.5 in detail.
-diff -uprN -x .git linux-2.6.31/Documentation/filesystems/aufs/README aufs2-2.6.git/Documentation/filesystems/aufs/README
---- linux-2.6.31/Documentation/filesystems/aufs/README 1970-01-01 00:00:00.000000000 +0000
-+++ aufs2-2.6.git/Documentation/filesystems/aufs/README 2009-09-21 21:48:58.761610020 +0000
-@@ -0,0 +1,342 @@
-+
-+Aufs2 -- advanced multi layered unification filesystem version 2
-+http://aufs.sf.net
-+Junjiro R. Okajima
-+
-+
-+0. Introduction
-+----------------------------------------
-+In the early days, aufs was entirely re-designed and re-implemented
-+Unionfs Version 1.x series. After many original ideas, approaches,
-+improvements and implementations, it becomes totally different from
-+Unionfs while keeping the basic features.
-+Recently, Unionfs Version 2.x series begin taking some of the same
-+approaches to aufs1's.
-+Unionfs is being developed by Professor Erez Zadok at Stony Brook
-+University and his team.
-+
-+This version of AUFS, aufs2 has several purposes.
-+- to be reviewed easily and widely.
-+- to make the source files simpler and smaller by dropping several
-+ original features.
-+
-+Through this work, I found some bad things in aufs1 source code and
-+fixed them. Some of the dropped features will be reverted in the future,
-+but not all I'm afraid.
-+Aufs2 supports linux-2.6.27 and later. If you want older kernel version
-+support, try aufs1 from CVS on SourceForge.
-+
-+Note: it becomes clear that "Aufs was rejected. Let's give it up."
-+According to Christoph Hellwig, linux rejects all union-type filesystems
-+but UnionMount.
-+<http://marc.info/?l=linux-kernel&m=123938533724484&w=2>
-+
-+
-+1. Features
-+----------------------------------------
-+- unite several directories into a single virtual filesystem. The member
-+ directory is called as a branch.
-+- you can specify the permission flags to the branch, which are 'readonly',
-+ 'readwrite' and 'whiteout-able.'
-+- by upper writable branch, internal copyup and whiteout, files/dirs on
-+ readonly branch are modifiable logically.
-+- dynamic branch manipulation, add, del.
-+- etc...
-+
-+Also there are many enhancements in aufs1, such as:
-+- readdir(3) in userspace.
-+- keep inode number by external inode number table
-+- keep the timestamps of file/dir in internal copyup operation
-+- seekable directory, supporting NFS readdir.
-+- support mmap(2) including /proc/PID/exe symlink, without page-copy
-+- whiteout is hardlinked in order to reduce the consumption of inodes
-+ on branch
-+- do not copyup, nor create a whiteout when it is unnecessary
-+- revert a single systemcall when an error occurs in aufs
-+- remount interface instead of ioctl
-+- maintain /etc/mtab by an external command, /sbin/mount.aufs.
-+- loopback mounted filesystem as a branch
-+- kernel thread for removing the dir who has a plenty of whiteouts
-+- support copyup sparse file (a file which has a 'hole' in it)
-+- default permission flags for branches
-+- selectable permission flags for ro branch, whether whiteout can
-+ exist or not
-+- export via NFS.
-+- support <sysfs>/fs/aufs and <debugfs>/aufs.
-+- support multiple writable branches, some policies to select one
-+ among multiple writable branches.
-+- a new semantics for link(2) and rename(2) to support multiple
-+ writable branches.
-+- no glibc changes are required.
-+- pseudo hardlink (hardlink over branches)
-+- allow a direct access manually to a file on branch, e.g. bypassing aufs.
-+ including NFS or remote filesystem branch.
-+- and more...
-+
-+Currently these features are dropped temporary from this version, aufs2.
-+See design/08plan.txt in detail.
-+- test only the highest one for the directory permission (dirperm1)
-+- show whiteout mode (shwh)
-+- copyup on open (coo=)
-+- nested mount, i.e. aufs as readonly no-whiteout branch of another aufs
-+ (robr)
-+- statistics of aufs thread (/sys/fs/aufs/stat)
-+- delegation mode (dlgt)
-+ a delegation of the internal branch access to support task I/O
-+ accounting, which also supports Linux Security Modules (LSM) mainly
-+ for Suse AppArmor.
-+- intent.open/create (file open in a single lookup)
-+
-+Features or just an idea in the future (see also design/*.txt),
-+- reorder the branch index without del/re-add.
-+- permanent xino files for NFSD
-+- an option for refreshing the opened files after add/del branches
-+- 'move' policy for copy-up between two writable branches, after
-+ checking free space.
-+- O_DIRECT
-+- light version, without branch manipulation. (unnecessary?)
-+- copyup in userspace
-+- inotify in userspace
-+- readv/writev
-+- xattr, acl
-+
-+
-+2. Download
-+----------------------------------------
-+Kindly one of aufs user, the Center for Scientific Computing and Free
-+Software (C3SL), Federal University of Parana offered me a public GIT
-+tree space.
-+
-+There are three GIT trees, aufs2-2.6, aufs2-standalone and aufs2-util.
-+While the aufs2-util is always necessary, you need either of aufs2-2.6
-+or aufs2-standalone.
-+
-+The aufs2-2.6 tree includes the whole linux-2.6 GIT tree,
-+git://git.kernel.org/.../torvalds/linux-2.6.git.
-+And you cannot select CONFIG_AUFS_FS=m for this version, eg. you cannot
-+build aufs2 as an externel kernel module.
-+If you already have linux-2.6 GIT tree, you may want to pull and merge
-+the "aufs2" branch from this tree.
-+
-+On the other hand, the aufs2-standalone tree has only aufs2 source files
-+and a necessary patch, and you can select CONFIG_AUFS_FS=m. In other
-+words, the aufs2-standalone tree is generated from aufs2-2.6 tree by,
-+- extract new files and modifications.
-+- generate some patch files from modifications.
-+- generate a ChangeLog file from git-log.
-+- commit the files newly and no log messages. this is not git-pull.
-+
-+Both of aufs2-2.6 and aufs2-standalone trees have a branch whose name is
-+in form of "aufs2-xx" where "xx" represents the linux kernel version,
-+"linux-2.6.xx".
-+
-+o aufs2-2.6 tree
-+$ git clone --reference /your/linux-2.6/git/tree \
-+ http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-2.6.git \
-+ aufs2-2.6.git
-+- if you don't have linux-2.6 GIT tree, then remove "--reference ..."
-+$ cd aufs2-2.6.git
-+$ git checkout origin/aufs2-xx # for instance, aufs2-27 for linux-2.6.27
-+ # aufs2 (no -xx) for the latest -rc version.
-+
-+o aufs2-standalone tree
-+$ git clone http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git \
-+ aufs2-standalone.git
-+$ cd aufs2-standalone.git
-+$ git checkout origin/aufs2-xx # for instance, aufs2-27 for linux-2.6.27
-+ # aufs2 (no -xx) for the latest -rc version.
-+
-+o aufs2-util tree
-+$ git clone http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-util.git \
-+ aufs2-util.git
-+$ cd aufs2-util.git
-+- no particular tag/branch currently.
-+
-+o for advanced users
-+$ git clone git://git.kernel.org/.../torvalds/linux-2.6.git linux-2.6.git
-+ It will take very long time.
-+
-+$ cd linux-2.6.git
-+$ git remote add aufs2 http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-2.6.git
-+$ git checkout -b aufs2-27 v2.6.27
-+$ git pull aufs2 aufs2-27
-+ It may take long time again.
-+ Once pulling completes, you've got linux-2.6.27 and aufs2 for it in a
-+ branch named aufs2-27, and you can configure and build it.
-+
-+Or
-+
-+$ git checkout -t -b aufs2 master
-+$ git pull aufs2 aufs2
-+ then you've got the latest linux kernel and the latest aufs2 in a
-+ branch named aufs2, and you can configure and build it.
-+ But aufs is released once a week, so you may meet a compilation error
-+ due to mismatching between the mainline and aufs2.
-+
-+Or you may want build linux-2.6.xx.yy instead of linux-2.6.xx, then here
-+is an approach using linux-2.6-stable GIT tree.
-+
-+$ cd linux-2.6.git/..
-+$ git clone -q --reference ./linux-2.6.git git://git.kernel.org/.../linux-2.6-stable.git \
-+ linux-2.6-stable.git
-+ It will take very long time.
-+
-+$ cd linux-2.6-stable.git
-+$ git remote add aufs2 http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-2.6.git
-+$ git checkout -b aufs2-27.1 v2.6.27.1
-+$ git pull aufs2 aufs2-27
-+ then you've got linux-2.6.27.1 and aufs2 for 2.6.27 in a branch named
-+ aufs2-27.1, and you can configure and build it.
-+ But the changes made by v2.6.xx.yy may conflict with aufs2-xx, since
-+ aufs2-xx is for v2.6.xx only. In this case, you may find some patchces
-+ for v2.6.xx.yy in aufs2-standalone.git#aufs2-xx branch if someone else
-+ have ever requested me to support v2.6.xx.yy and I did it.
-+
-+You can also check what was changed by pulling aufs2.
-+$ git diff v2.6.27.1..aufs2-27.1
-+
-+If you want to check the changed files other than fs/aufs, then try this.
-+$ git diff v2.6.27.1..aufs2-27.1 |
-+> awk '
-+> /^diff / {new=1}
-+> /^diff.*aufs/ {new=0}
-+> new {print}
-+> '
-+
-+
-+3. Configuration and Compilation
-+----------------------------------------
-+For aufs2-2.6 tree,
-+- enable CONFIG_EXPERIMENTAL and CONFIG_AUFS_FS.
-+- set other aufs configurations if necessary.
-+
-+For aufs2-standalone tree,
-+There are several ways to build.
-+
-+You may feel why aufs2-standalone.patch needs to export so many kernel
-+symbols. Because you selected aufs2-standalone tree instead of aufs2-2.6
-+tree. The number of necessary symbols to export essentially is zero.
-+All other symbols are for the external module.
-+If you don't like aufs2-standalone.patch, then try aufs2-2.6 tree.
-+
-+1.
-+- apply ./aufs2-kbuild.patch to your kernel source files.
-+- apply ./aufs2-base.patch too.
-+- apply ./aufs2-standalone.patch too, if you have a plan to set
-+ CONFIG_AUFS_FS=m. otherwise you don't need ./aufs2-standalone.patch.
-+- copy ./{Documentation,fs,include} files to your kernel source tree.
-+- enable CONFIG_EXPERIMENTAL and CONFIG_AUFS_FS, you can select either
-+ =m or =y.
-+- and build your kernel as usual.
-+- install it and reboot your system.
-+
-+2.
-+- module only (CONFIG_AUFS_FS=m).
-+- apply ./aufs2-base.patch to your kernel source files.
-+- apply ./aufs2-standalone.patch too.
-+- build your kernel and reboot.
-+- edit ./config.mk and set other aufs configurations if necessary.
-+ Note: You should read ./fs/aufs/Kconfig carefully which describes
-+ every aufs configurations.
-+- build the module by simple "make".
-+- you can specify ${KDIR} make variable which points to your kernel
-+ source tree.
-+- copy the build ./aufs.ko to /lib/modules/..., and run depmod -a (or
-+ reboot simply).
-+- no need to apply aufs2-kbuild.patch, nor copying source files to your
-+ kernel source tree.
-+
-+And then,
-+- read README in aufs2-util, build and install it
-+- if you want to use readdir(3) in userspace, then run
-+ "make install_ulib" too. And refer to the aufs manual in detail.
-+
-+
-+4. Usage
-+----------------------------------------
-+At first, make sure aufs2-util are installed, and please read the aufs
-+manual, aufs.5 in aufs2-util.git tree.
-+$ man -l aufs.5
-+
-+And then,
-+$ mkdir /tmp/rw /tmp/aufs
-+# mount -t aufs -o br=/tmp/rw:${HOME} none /tmp/aufs
-+
-+Here is another example. The result is equivalent.
-+# mount -t aufs -o br=/tmp/rw=rw:${HOME}=ro none /tmp/aufs
-+ Or
-+# mount -t aufs -o br:/tmp/rw none /tmp/aufs
-+# mount -o remount,append:${HOME} /tmp/aufs
-+
-+Then, you can see whole tree of your home dir through /tmp/aufs. If
-+you modify a file under /tmp/aufs, the one on your home directory is
-+not affected, instead the same named file will be newly created under
-+/tmp/rw. And all of your modification to a file will be applied to
-+the one under /tmp/rw. This is called the file based Copy on Write
-+(COW) method.
-+Aufs mount options are described in aufs.5.
-+
-+Additionally, there are some sample usages of aufs which are a
-+diskless system with network booting, and LiveCD over NFS.
-+See sample dir in CVS tree on SourceForge.
-+
-+
-+5. Contact
-+----------------------------------------
-+When you have any problems or strange behaviour in aufs, please let me
-+know with:
-+- /proc/mounts (instead of the output of mount(8))
-+- /sys/module/aufs/*
-+- /sys/fs/aufs/* (if you have them)
-+- /debug/aufs/* (if you have them)
-+- linux kernel version
-+ if your kernel is not plain, for example modified by distributor,
-+ the url where i can download its source is necessary too.
-+- aufs version which was printed at loading the module or booting the
-+ system, instead of the date you downloaded.
-+- configuration (define/undefine CONFIG_AUFS_xxx)
-+- kernel configuration or /proc/config.gz (if you have it)
-+- behaviour which you think to be incorrect
-+- actual operation, reproducible one is better
-+- mailto: aufs-users at lists.sourceforge.net
-+
-+Usually, I don't watch the Public Areas(Bugs, Support Requests, Patches,
-+and Feature Requests) on SourceForge. Please join and write to
-+aufs-users ML.
-+
-+
-+6. Acknowledgements
-+----------------------------------------
-+Thanks to everyone who have tried and are using aufs, whoever
-+have reported a bug or any feedback.
-+
-+Especially donors:
-+Tomas Matejicek(slax.org) made a donation (much more than once).
-+Dai Itasaka made a donation (2007/8).
-+Chuck Smith made a donation (2008/4, 10 and 12).
-+Henk Schoneveld made a donation (2008/9).
-+Chih-Wei Huang, ASUS, CTC donated Eee PC 4G (2008/10).
-+Francois Dupoux made a donation (2008/11).
-+Bruno Cesar Ribas and Luis Carlos Erpen de Bona, C3SL serves public
-+aufs2 GIT tree (2009/2).
-+William Grant made a donation (2009/3).
-+Patrick Lane made a donation (2009/4).
-+The Mail Archive (mail-archive.com) made donations (2009/5).
-+Nippy Networks (Ed Wildgoose) a donation (2009/7).
-+
-+Thank you very much.
-+Donations are always, including future donations, very important and
-+helpful for me to keep on developing aufs.
-+
-+
-+7.
-+----------------------------------------
-+If you are an experienced user, no explanation is needed. Aufs is
-+just a linux filesystem.
-+
-+
-+Enjoy!
-+
-+# Local variables: ;
-+# mode: text;
-+# End: ;
-diff -uprN -x .git linux-2.6.31/Documentation/filesystems/aufs/design/01intro.txt aufs2-2.6.git/Documentation/filesystems/aufs/design/01intro.txt
---- linux-2.6.31/Documentation/filesystems/aufs/design/01intro.txt 1970-01-01 00:00:00.000000000 +0000
-+++ aufs2-2.6.git/Documentation/filesystems/aufs/design/01intro.txt 2009-09-21 21:48:58.761610020 +0000
-@@ -0,0 +1,137 @@
-+
-+# Copyright (C) 2005-2009 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+
-+Introduction
-+----------------------------------------
-+
-+aufs [ei ju: ef es] | [a u f s]
-+1. abbrev. for "advanced multi-layered unification filesystem".
-+2. abbrev. for "another unionfs".
-+3. abbrev. for "auf das" in German which means "on the" in English.
-+ Ex. "Butter aufs Brot"(G) means "butter onto bread"(E).
-+ But "Filesystem aufs Filesystem" is hard to understand.
-+
-+AUFS is a filesystem with features:
-+- multi layered stackable unification filesystem, the member directory
-+ is called as a branch.
-+- branch permission and attribute, 'readonly', 'real-readonly',
-+ 'readwrite', 'whiteout-able', 'link-able whiteout' and their
-+ combination.
-+- internal "file copy-on-write".
-+- logical deletion, whiteout.
-+- dynamic branch manipulation, adding, deleting and changing permission.
-+- allow bypassing aufs, user's direct branch access.
-+- external inode number translation table and bitmap which maintains the
-+ persistent aufs inode number.
-+- seekable directory, including NFS readdir.
-+- file mapping, mmap and sharing pages.
-+- pseudo-link, hardlink over branches.
-+- loopback mounted filesystem as a branch.
-+- several policies to select one among multiple writable branches.
-+- revert a single systemcall when an error occurs in aufs.
-+- and more...
-+
-+
-+Multi Layered Stackable Unification Filesystem
-+----------------------------------------------------------------------
-+Most people already knows what it is.
-+It is a filesystem which unifies several directories and provides a
-+merged single directory. When users access a file, the access will be
-+passed/re-directed/converted (sorry, I am not sure which English word is
-+correct) to the real file on the member filesystem. The member
-+filesystem is called 'lower filesystem' or 'branch' and has a mode
-+'readonly' and 'readwrite.' And the deletion for a file on the lower
-+readonly branch is handled by creating 'whiteout' on the upper writable
-+branch.
-+
-+On LKML, there have been discussions about UnionMount (Jan Blunck and
-+Bharata B Rao) and Unionfs (Erez Zadok). They took different approaches
-+to implement the merged-view.
-+The former tries putting it into VFS, and the latter implements as a
-+separate filesystem.
-+(If I misunderstand about these implementations, please let me know and
-+I shall correct it. Because it is a long time ago when I read their
-+source files last time).
-+UnionMount's approach will be able to small, but may be hard to share
-+branches between several UnionMount since the whiteout in it is
-+implemented in the inode on branch filesystem and always
-+shared. According to Bharata's post, readdir does not seems to be
-+finished yet.
-+Unionfs has a longer history. When I started implementing a stacking filesystem
-+(Aug 2005), it already existed. It has virtual super_block, inode,
-+dentry and file objects and they have an array pointing lower same kind
-+objects. After contributing many patches for Unionfs, I re-started my
-+project AUFS (Jun 2006).
-+
-+In AUFS, the structure of filesystem resembles to Unionfs, but I
-+implemented my own ideas, approaches and enhancements and it became
-+totally different one.
-+
-+
-+Several characters/aspects of aufs
-+----------------------------------------------------------------------
-+
-+Aufs has several characters or aspects.
-+1. a filesystem, callee of VFS helper
-+2. sub-VFS, caller of VFS helper for branches
-+3. a virtual filesystem which maintains persistent inode number
-+4. reader/writer of files on branches such like an application
-+
-+1. Caller of VFS Helper
-+As an ordinary linux filesystem, aufs is a callee of VFS. For instance,
-+unlink(2) from an application reaches sys_unlink() kernel function and
-+then vfs_unlink() is called. vfs_unlink() is one of VFS helper and it
-+calls filesystem specific unlink operation. Actually aufs implements the
-+unlink operation but it behaves like a redirector.
-+
-+2. Caller of VFS Helper for Branches
-+aufs_unlink() passes the unlink request to the branch filesystem as if
-+it were called from VFS. So the called unlink operation of the branch
-+filesystem acts as usual. As a caller of VFS helper, aufs should handle
-+every necessary pre/post operation for the branch filesystem.
-+- acquire the lock for the parent dir on a branch
-+- lookup in a branch
-+- revalidate dentry on a branch
-+- mnt_want_write() for a branch
-+- vfs_unlink() for a branch
-+- mnt_drop_write() for a branch
-+- release the lock on a branch
-+
-+3. Persistent Inode Number
-+One of the most important issue for a filesystem is to maintain inode
-+numbers. This is particularly important to support exporting a
-+filesystem via NFS. Aufs is a virtual filesystem which doesn't have a
-+backend block device for its own. But some storage is necessary to
-+maintain inode number. It may be a large space and may not suit to keep
-+in memory. Aufs rents some space from its first writable branch
-+filesystem (by default) and creates file(s) on it. These files are
-+created by aufs internally and removed soon (currently) keeping opened.
-+Note: Because these files are removed, they are totally gone after
-+ unmounting aufs. It means the inode numbers are not persistent
-+ across unmount or reboot. I have a plan to make them really
-+ persistent which will be important for aufs on NFS server.
-+
-+4. Read/Write Files Internally (copy-on-write)
-+Because a branch can be readonly, when you write a file on it, aufs will
-+"copy-up" it to the upper writable branch internally. And then write the
-+originally requested thing to the file. Generally kernel doesn't
-+open/read/write file actively. In aufs, even a single write may cause a
-+internal "file copy". This behaviour is very similar to cp(1) command.
-+
-+Some people may think it is better to pass such work to user space
-+helper, instead of doing in kernel space. Actually I am still thinking
-+about it. But currently I have implemented it in kernel space.
-diff -uprN -x .git linux-2.6.31/Documentation/filesystems/aufs/design/02struct.txt aufs2-2.6.git/Documentation/filesystems/aufs/design/02struct.txt
---- linux-2.6.31/Documentation/filesystems/aufs/design/02struct.txt 1970-01-01 00:00:00.000000000 +0000
-+++ aufs2-2.6.git/Documentation/filesystems/aufs/design/02struct.txt 2009-09-21 21:48:58.761610020 +0000
-@@ -0,0 +1,218 @@
-+
-+# Copyright (C) 2005-2009 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+
-+Basic Aufs Internal Structure
-+
-+Superblock/Inode/Dentry/File Objects
-+----------------------------------------------------------------------
-+As like an ordinary filesystem, aufs has its own
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel.spec?r1=1.790&r2=1.791&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-aufs2.patch?r1=1.6&r2=1.7&f=u
More information about the pld-cvs-commit
mailing list