summarise aufs issues and possible patches

hooanon05 at yahoo.co.jp hooanon05 at yahoo.co.jp
Wed Feb 25 05:42:52 UTC 2009


This action item was born at the irc meeting on 24 Feb.

Current Jaunty kernel contains aufs version 20080609. It is very old
(over half a year ago) and there are several bugfixes since then. The
History file describes about 50 bugfixes and other enhancements from
20080609 till 20090126.
I attached a list of some of them. See
<http://aufs.sourceforge.net/History> or log messages in CVS-ed source
files fro more detail.

Although I am not sure how ubuntu people uses aufs, I am afraid they
will meet some of known bugs.

Latest aufs is version 2 (aufs2) which was born responding the
discussion at last UDS. It supports linux-2.6.27 and later, but some
features/configurations are dropped in order to make source files
simpler and easier to be reviewed. I found the ubuntu configuration
enables CONFIG_AUFS_{EXPORT,SHWH,STAT}. If these features are important
for ubuntu users, you cannot switch to aufs2 yet.
And I suspended maintaining aufs1 (which ubuntu adopts), so aufs1
doesn't support linux-2.6.28.

Finally there are several ways we choose.

- Jaunty keeps old aufs1
  This is the easiest way. You may want to select it until an actual
  problem will be reported.

- I upgrade aufs1 to support 2.6.28 and Jaunty adopts it
  Because aufs2 is very new and doesn't support
  CONFIG_AUFS_{EXPORT,SHWH,STAT}, you may want to keep using aufs1. In
  this case, I will modify the latest aufs1 to support 2.6.28 (or
  later). Also I may have to follow some ubuntu specific kernel changes.
  You can keep on using the aufs features which are curretnly enabled in
  ubuntu kernel.
  FYI, debian stable(5.0.0, lenny)/testing/unstable adopt aufs1
  20080714+their patch. And debian experimental adopts aufs1
  20081208+their patch currently.

- Jaunty adopts aufs2
  This is my recommendation, but I can understand that you may not like
  it. It is smaller and faster(hopefully) than aufs1 and support
  linux-2.6.27 and later (but not yet 2.6.29-rcN).
  In this case you cannot select CONFIG_AUFS_{EXPORT,SHWH,STAT}.

Before I start develping a patch, I need to know your choice.


J. R. Okajima

----------------------------------------------------------------------
config AUFS_EXPORT
	bool "NFS-exportable aufs"
	depends on (AUFS = y && EXPORTFS = y) || (AUFS = m && EXPORTFS)
	help
	If you want to export your mounted aufs, then enable this
	option. There are several requirements for this configuration.
	See detail in aufs.5.

config AUFS_SHWH
	bool "Show whiteouts"
	help
	If you want to make the whiteouts in aufs visible, then enable
	this option and specify 'shwh' mount option. Although it may
	sounds like philosophy or something, but in technically it
	simply shows the name of whiteout with keeping its behaviour.
(If you want to know more about this feature, see
<http://sourceforge.net/mailarchive/forum.php?thread_name=47D64998.50607%40web.de&forum_name=aufs-users>)

config AUFS_STAT
	bool "Use <sysfs>/fs/aufs/stat"
	depends on SYSFS
	help
	Shows some statistic data via <sysfs>/fs/aufs/stat.
	See detail in aufs.5.
----------------------------------------------------------------------

(major fixes listed in <http://aufs.sourceforge.net/History> since
20080609)

20090126
- bugfix: copyup/down i_flags except S_DEAD and S_PRIVATE.
- bugfix: stop copyup-on-open when aufs is mounted as readonly, reported
  by Yuri Chislov.
- bugfix: remove clearing error code in a nested error path.
- bugfix: trimming the first '-o' after concatinating.
20081208
- bugfix(completed): stop recursive si lock, reported by Louis Rilling,
  refine the readdir call from NFSD entirely.
- bugfix: mutex lock for the lower inode while updating the aufs inode
  attributes.
20081201
- bugfix: set PINNED flag unconditionally in au_ren_pin(), regression on
  20081020.
- bugfix: re-initialize gparent array explicitly in au_ren_pin().
- bugfix: in robr mode, support the multi-threaded library call,
  reported by Julien Bonjean.
- bugfix: support freeing inodes at anytime, reported by Stefanik Gabor.
- bugfix: in linux-2.6.27 and later, some LSM doesn't support some MAY_
  bits and need to drop them before calling security_inode_permission(),
  reported by "fd".
- bugfix: mis-used the filename variable $f.
20081117
- bugfix: the dir inode may remain without the corresponding dentry,
  regression on 20080929, reported by James.
- bugfix: initilize i_op for special inodes, regression on 20080804,
  reported by Kris Warkentin.
- bugfix: use the passed mount option flags insted of the currently set
  flags at remounting.
- bugfix: support the non-printable characters in filename.
- bugfix: stop dropping the passed vfs mount options.
20081027
- bugfix: NFS exporting and udba=inotify caused deadlock, make knfsd not
  to wait for the completion of all queued tasks, reported by Louis
  Rilling.
- bugfix: deadlock for changing the attributes of the root dir on
  readonly aufs mount, reported by Chih-Wei Huang.
- bugfix: unlock the aufs iinfo in error case.
- bugfix: suppress the lockdep message, reported by Louis Rilling,
  regression on 20080929.
- bugfix: stop updating /etc/mtab when remounting the chroot-ed aufs as
  readonly.
20081020
- bugfix: race condition in rename(), fix the locking order of
  s_vfs_rename_mutex, reported by Louis Rilling.
- bugfix: temporary unlock the whiteout-ed lower inode when cpup to keep
  the internal locking order.
- bugfix: suppress the lockdep messages, reported by Louis Rilling,
  regression on 20080929.
20081013
- bugfix: support the failure of adding a branch.
- bugfix: support the failure of registering pseudo-link.
- bugfix: support the failure of registering pseudo-link.
20081006
- bugfix: restore lockdef_off/on(), a regression on 20080922.
- bugfix: check if the destroying inode is dead when maintaining the
  inode generation.
- bugfix: when the inode/dentry was still cached, check its generation.
20080929
- bugfix: NFSD issues another operation during filesystem's readdir(),
  and it may cause a deadlock in aufs. check the current context is in
  readdir().
- bugfix: under heavy load the dead inode might be re-used because of
  the race condition between S_DEAD flag and some lock-free oprations.
  force 'must-new' inode in some cases.
- bugfix: force nosubtreecheck for a branch.
20080922
- bugfix: support an illegal whiteout, reported by Hercinger Viktor.
- bugfix: support the write to the hardlink with had being removed with
  its parent dir.
- bugfix: stop clearing xino when the inode is pseudo-linked.
20080915
- bugfix: rewrite the code for exporting aufs via NFS, triggered by the
  bug report from Louis Rilling (my local tests are completed).
- bugfix: reset the dentry member in au_pin grand parent.
20080908
- possible bugfix: stop locking the dir in call_rmdir_whtmp() for to
  support nfsd.
- bugfix: abondon the operation when udba occured in call_rmdir_whtmp().
20080901
- bugfix: support modifying a file which was unlinked with its parent
  dir.
- bugfix: check the return value of au_test_and_cpup_dirs().
- bugfix: lock everything by au_pin() before au_sio_cpup_simple().
20080825
- bugfix: stop locking the parents of both of src/dst dentries.
- bugfix: re-init d_fsdata for UDBA.
- bugfix: testing the re-initialized d_fsdata for UDBA.
- bugfix: support the isolated lower inode for UDBA.
- bugfix: support the dying lower inode for UDBA.
- bugfix: support the branch permission 'rw+nolwh'.
20080811
- bugfix: test the whiteouted inode.
- bugfix: reset ATTR_FILE when copyup happend.
20080804
- bugfix: the Kconfig path in a message, reported by carl parker.
- bugfix: do not call au_br_nfs_lockdep_off() from free_branch(), which
  were made in last ci.
20080728
- bugfix: deadlock in rename(2), au_cp_dirs(), reported by Cyril
  Brulebois, Klaus Knopper and Martin Tscholak.
- bugfix: support copied-up and unlinked entry in au_lock_and_icpup().
- bugfix: test nfs at mounting.
20080714
- two bugfixes(pinning and dlgt) and local tests for them are completed.
- bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch
  and new ignore scheme for inotify (completed).
- bugfix: replace "${TgtPath}/Kconfig" by "aufs/Kconfig", reported and
  patched by Paulius Zaleckas.
- bugfix: prepend CONFIG_ to ccflags-$(AUFS_WORKAROUND_FUSE).
20080707
- bugfix (fs/aufs25 only, currently): lock child dentry first in
  aufs_lookup(), and unlock the parent as soon as possible.
  this fix will be backported to fs/aufs too.
- bugfix (fs/aufs25 only, currently): stop locking child inode in
  reval_inode().
- bugfix (fs/aufs25 only, currently): revert the timestamps of the
  parent dir at flushing pseudo-links.
20080630
- bugfix (fs/aufs25): revert resetting xinoe->ino when noxino option is
  specified, regression on 2008/06/02.
- bugfix (fs/aufs, fs/aufs25): a race condition between rename(2) and
  others, linux-2.6.19 and later.
- bugfix (fs/aufs, fs/aufs25): select CONFIG_AUFS_SPLICE_PATCH
  automatically when CONFIG_AUFS_UNIONFS23_PATCH is enabled on
  linux-2.6.23 and later, reported by Barry Kauler.
- possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and
  GFP_KERNEL into GFP_NOFS.
20080616
- bugfix (fs/aufs, fs/aufs25): introduce a new mutex to prevent a new
  inode number for hardlinks under different parnet dir from a race
  condition.
- bugfix (fs/aufs, fs/aufs25): support an error case of opening a dir.
- bugfix (fs/aufs, fs/aufs25): support a race condition between open and
  unlink/rmdir.
- bugfix: struct kset should be a dynamic object.




More information about the kernel-team mailing list