o news - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (still debugging). under heavy i/o (including rename(2)), aufs may misunderstand the child-parent relationship. new structure au_pin locks both parent- child and verifies them. additionally, when udba=inotify is specified, aufs sets inotify watch internally for the parent (and grand parent) dir in cache, and ignores the events triggered by aufs internal activity. this was done by locking the lower dir and setting 0 to the event mask for the lower dir, but it might ignore the event fired by other process, for example write(2) to the lower file. the new method stops setting 0 to the mask, and ignores the event made by aufs only. this fix is not backported to fs/aufs yet since it is still debugging. so the old behaviour is taken on the older kernels. people will call it crazy due to many locks. + add a parameter au_pin to au_ready_to_write(), and it doesn't lock iinfo nor dinfo. + add a parameter bindex to au_wh_init(). + add a parameter bindex to epilog(). + add a parameter dir to do_revert(). + add a parameter dst_parent to au_sio_cpup_single(). + add a parameter dst_parent to cpup_entry() and au_cpup_single(), and set ignore info. + add a parameter hdir and replace h_dst by dst and bindex of cpup_iattr(), and set ignore info. + add a parameter hdir to au_copy_file(). + add a parameter hdir to au_cpdown_attr(). + add a parameter hdir to cpup_regular() and au_do_cpup_regular(). + add a parameter hdir to vfsub_sio_notify_change(). + add a parameter hinode to au_dtime_store() and struct au_dtime. + add a parameter parent to au_sio_cpup_single(). + add a parameter pin to lock_hdir_lkup_wh(). + add list, pid, handled events to struct au_hinode. + add new inline functions vfsub_lock_rename_mutex(), vfsub_unlock_rename_mutex() and au_verify_parent(). + add parameters dlgt and hdir to clean_wh(), clean_plink() and plink_dir(). + append a lock subclass id AuLsc_DI_PARENT4 and di_read/write_lock_parent4(). + append a new lock subclass id AuLsc_DI_PARENT4. + append a new lock subclass id AuLsc_I_(PARENT|CHILD)[34]. + aufs_fsync_dir() and aufs_readdir() unlock both dinfo and iinfo. + aufs_read(), aufs_write(), aufs_splice_read(), aufs_splice_write(), aufs_mmap(), aufs_poll(), aufs_fsync_nondir() and aufs_fasync() unlock both dinfo and iinfo. + call au_dbg_hin_list() from call_rename(), vfsub_rename(), call_rmdir(), vfsub_rmdir(), call_write_k(), vfsub_write_u(), vfsub_write_k(), call_splice_from() and vfsub_splice_from(). + call au_pin() from do_coo(). + call au_pin/unpin() from au_lock_and_icpup() and aufs_setattr(). + call au_pin/unpin() from lock_hdir_lkup_wh(), add_simple(), aufs_link() and aufs_mkdir(). + call vfsub_ignore(), vfsub_unignore() and au_dbg_hin_list() from call_create(), call_symlink(), call_mknod(), call_mkdir(), call_link(), vfsub_create(), vfsub_symlink(), vfsub_mknod(), vfsub_mkdir() and vfsub_link(). + call vfsub_unignore() from call_write_k(), vfsub_write_u() and vfs_write_k() when vfs_write() returns 0. + convert the parameter dir of do_unlink_wh() to hdir. + convert the parameter dir of vfsub_sio_mkdir() and vfsub_sio_rmdir() to hdir. + convert the parameter h_dentry of au_whtmp_ren() to dentry, remove the parameter noself from au_whtmp_ren(). + convert the parameter h_dentry of au_whtmp_ren() to dentry. + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + convert the type of au_test_subdir struct dentry* from int. + move AuInMask from hinotify.c to hinode.h. + new bit-flags VFSLOCK and PINNED. + new functions au_do_pinned_h_parent(), au_do_unpin(), au_unpin(), au_unpin_gp(), au_do_pin(), au_pin_init() and au_pin(). + new functions au_hin_list_del() and au_dbg_hin_list() for debugging. + new functions au_hin_test_ignore() and au_dbg_hin_list(). + new functions au_pin_init(), au_pin(), au_do_pin(), au_unpin(), au_unpin_gp(), au_do_pinned_hdir(), au_do_pinned_h_parent(), au_do_pinned_parent(), au_do_pinned_h_dir(), au_pin_do_set_parent(), au_pin_do_set_h_dir(), au_pinned_hdir(), au_pinned_hgdir(), au_pinned_h_parent(), au_pinned_parent(), au_pinned_gparent(), au_pinned_h_dir(), au_pinned_h_gdir(), au_pin_set_parent(), au_pin_set_gparent(), au_pin_set_h_dir() and au_pin_set_h_gdir(). + new functions au_ren_pin_init(), au_ren_fake_pin(), au_ren_pin4(), au_ren_pin3(), au_ren_pin(), au_ren_unlock() and au_ren_lock(). + new members h_locked[], gparent[], pin[], ign[], and vargs in struct rename_args. + new structures au_pin1 and au_pin. + remove AuCacheX() macro. + remove au_do_hdir_lock(), au_hdir_unlock(), au_hdir_lock_rename(), au_hdir_unlock_rename(), au_hdir_lock() and au_hdir2_lock(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + remove au_hdir_lock/unlock_rename() and replace them by au_ren_lock/unlock(). + remove au_hgdirs(). + remove au_hin_nignore. + remove the parameter dir from au_wh_create(). + remove the parameter dir from unlink_wh_name(). + remove the parameter inode from del_wh_children(). + remove the parameter noself from au_whtmp_ren(). + remove the parameters inode and noself from au_whtmp_kick_rmdir(). + remove the parameters inode and noself from au_whtmp_rmdir() and au_whtmp_kick_rmdir(). + remove the parameters inode and noself from au_whtmp_rmdir(). + remove the unused functions au_hin_ignore() and au_hin_unignore(). + remove vfsub_ign_inode(). + rename au_reval_and_lock_finfo() to au_reval_and_lock_fdi() since it becomes to lock dinfo and iinfo in addition to finfo. + rename ctl_hinotify() to au_hin_ctl() and make it global, new inline function au_hin_suspend(), remove suspend_hinotify() and resume_hinotify() macros. + rename ctl_hinotify() to au_hin_ctl() and make it global, new inline function au_hin_suspend(). + reorder the parameters of link_or_create_wh(). + replace hin_ignore array by spinlock and list in struct au_hinotify. + replace the parameter dlgt of au_do_cpup_symlink(), vfsub_symlink(), au_h_create(), vfsub_mkdir(), vfsub_mknod() and vfsub_link() by vfsub_args. + replace the parameter dlgt of au_h_create() and vfsub_create() by vargs. + replace the parameter dlgt of au_h_create(), vfsub_symlink(), vfsub_mknod(), vfsub_link(), vfsub_unlink() and vfsub_mkdir() by vargs. + replace the parameter dlgt of au_h_create(). + replace the parameter dlgt of vfsub_create() by vargs. + replace the parameter dlgt of vfsub_create(), vfsub_symlink(), vfsub_mknod(), vfsub_mkdir() and vfsub_link() by vargs. + replace the parameter dlgt of vfsub_link() by vargs. + replace the parameter dlgt of vfsub_mkdir() by vargs. + set ignore info for both of parent and grand parent dir in au_dtime_revert(). + set ignore info in add_simple(), cpup_or_link(), aufs_link() and aufs_mkdir(). + set ignore info in au_copy_file(). + set ignore info in au_cpup_wh(). + set ignore info in au_wh_init(). + set ignore info in au_whtmp_ren(). + set ignore info in au_whtmp_rmdir(). + set ignore info in aufs_unlink(). + set ignore info in clean_wh(), clean_plink() and plink_dir(). + set ignore info in do_rename(). + set ignore info in do_unlink_wh(). + set ignore info in link_or_create_wh(). + set ignore info in vfsub_sio_mkdir(), vfsub_sio_rmdir(), vfsub_sio_notify_change() and call_unlink(). + stop touching the lock of dinfo and iinfo in refresh_file_by_inode(). + use au_pin in cpup_before_link(). + a new debug print macro au_dbg_blocked().
o bugfix - 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. + call d_move() from aufs_rename(). + set FS_RENAME_DOES_D_MOVE to fs_flags. - 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. + add a note about unionfs patch v2.3 in the splice patch section. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. o misc - prohibit sysfs and procfs branch (fs/aufs, fs/aufs25) + append SYSFS_MAGIC value. + new function au_unsupported_fs(). - kmalloc() some large structures in au_dpri_sb() (still testing). - kmalloc() some large structures in aufs_setattr(). - kmalloc struct completion in au_wkq_run(). - set noinline_for_stack to cpup_or_link(). - set noinline_for_stack to epilog() and lock_hdir_lkup_wh(). - set noinline_for_stack for decode_by_dir_ino() and decode_by_path(). - unset noinline_for_stack to dump_opts(), verify_opts(). - unset noinline_for_stack for au_do_cpup_symlink() and au_do_cpup_wh(). - unset noinline_for_stack to simple_reval_dpath(). - unset noinline_for_stack for aufs_decode_fh(). - make au_cpup_simple() and au_cpup_single() static. Junjiro Okajima ---------------------------------------------------------------------- Index: Kconfig.in Index: local.mk - 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. Index: README - 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. + add a note about unionfs patch v2.3 in the splice patch section. Index: fs/aufs/Makefile Index: fs/aufs25/Makefile - prohibit sysfs and procfs branch (fs/aufs, fs/aufs25) + append SYSFS_MAGIC value. Index: fs/aufs/br_nfs.c Index: fs/aufs/dcsub.c Index: fs/aufs/dentry.c Index: fs/aufs/dinfo.c Index: fs/aufs/dir.c Index: fs/aufs/file.c Index: fs/aufs/finfo.c Index: fs/aufs/hin_or_dlgt.c Index: fs/aufs/hinotify.c Index: fs/aufs/i_op_del.c Index: fs/aufs/iinfo.c Index: fs/aufs/inode.c Index: fs/aufs/misc.c Index: fs/aufs/module.h Index: fs/aufs/opts.c Index: fs/aufs/sysaufs.c Index: fs/aufs/vdir.c Index: fs/aufs/whout.c Index: fs/aufs/wkq.c Index: fs/aufs/xino.c Index: fs/aufs25/br_nfs.c Index: fs/aufs25/finfo.c Index: fs/aufs25/iinfo.c Index: fs/aufs25/inode.c Index: fs/aufs25/sbinfo.c Index: fs/aufs25/sysfs.c Index: fs/aufs25/vdir.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs/branch.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - prohibit sysfs and procfs branch (fs/aufs, fs/aufs25) + new function au_unsupported_fs(). Index: fs/aufs/i_op_ren.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs, fs/aufs25): a race condition between rename(2) and others, linux-2.6.19 and later. + call d_move() from aufs_rename(). Index: fs/aufs/super.c Index: fs/aufs25/super.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs, fs/aufs25): a race condition between rename(2) and others, linux-2.6.19 and later. + set FS_RENAME_DOES_D_MOVE to fs_flags. Index: fs/aufs25/branch.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + convert the type of au_test_subdir struct dentry* from int. + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + add a parameter bindex to au_wh_init(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - prohibit sysfs and procfs branch (fs/aufs, fs/aufs25). + new function au_unsupported_fs(). Index: fs/aufs25/cpup.c Index: fs/aufs25/cpup.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + add a parameter hinode to au_dtime_store() and struct au_dtime. + set ignore info for both of parent and grand parent dir in au_dtime_revert(). + add a parameter hdir and replace h_dst by dst and bindex of cpup_iattr(), and set ignore info. + add a parameter hdir to cpup_regular() and au_do_cpup_regular(). + replace the parameter dlgt of au_do_cpup_symlink(), vfsub_symlink(), au_h_create(), vfsub_mkdir(), vfsub_mknod() and vfsub_link() by vfsub_args. + add a parameter dst_parent to cpup_entry() and au_cpup_single(), and set ignore info. + add a parameter dst_parent to au_sio_cpup_single(). + set ignore info in au_cpup_wh(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). - unset noinline_for_stack for au_do_cpup_symlink() and au_do_cpup_wh(). - make au_cpup_simple() and au_cpup_single() static. Index: fs/aufs25/dcsub.c Index: fs/aufs25/dcsub.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + convert the type of au_test_subdir struct dentry* from int. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/debug.c - kmalloc() some large structures in au_dpri_sb() (still testing). Index: fs/aufs25/debug.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + a new debug print macro au_dbg_blocked(). Index: fs/aufs25/dentry.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - unset noinline_for_stack to simple_reval_dpath(). Index: fs/aufs25/dentry.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + append a lock subclass id AuLsc_DI_PARENT4 and di_read/write_lock_parent4(). Index: fs/aufs25/dinfo.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + append a new lock subclass id AuLsc_DI_PARENT4. Index: fs/aufs25/dir.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + rename au_reval_and_lock_finfo() to au_reval_and_lock_fdi() since it becomes to lock dinfo and iinfo in addition to finfo. + aufs_fsync_dir() and aufs_readdir() unlock both dinfo and iinfo. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/export.c - set noinline_for_stack for decode_by_dir_ino() and decode_by_path(). - unset noinline_for_stack for aufs_decode_fh(). Index: fs/aufs25/f_op.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + rename au_reval_and_lock_finfo() to au_reval_and_lock_fdi() since it becomes to lock dinfo and iinfo in addition to finfo. + aufs_read(), aufs_write(), aufs_splice_read(), aufs_splice_write(), aufs_mmap(), aufs_poll(), aufs_fsync_nondir() and aufs_fasync() unlock both dinfo and iinfo. Index: fs/aufs25/file.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + call au_pin() from do_coo(). + add a parameter au_pin to au_ready_to_write(), and it doesn't lock iinfo nor dinfo. + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + rename au_reval_and_lock_finfo() to au_reval_and_lock_fdi() since it becomes to lock dinfo and iinfo in addition to finfo. + stop touching the lock of dinfo and iinfo in refresh_file_by_inode(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/file.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + add a parameter au_pin to au_ready_to_write(), and it doesn't lock iinfo nor dinfo. + rename au_reval_and_lock_finfo() to au_reval_and_lock_fdi() since it becomes to lock dinfo and iinfo in addition to finfo. Index: fs/aufs25/hin_or_dlgt.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + call vfsub_ignore(), vfsub_unignore() and au_dbg_hin_list() from call_create(), call_symlink(), call_mknod(), call_mkdir(), call_link(), vfsub_create(), vfsub_symlink(), vfsub_mknod(), vfsub_mkdir() and vfsub_link(). + replace the parameter dlgt of vfsub_create(), vfsub_symlink(), vfsub_mknod(), vfsub_mkdir() and vfsub_link() by vargs. + call au_dbg_hin_list() from call_rename(), vfsub_rename(), call_rmdir(), vfsub_rmdir(), call_write_k(), vfsub_write_u(), vfsub_write_k(), call_splice_from() and vfsub_splice_from(). + call vfsub_unignore() from call_write_k(), vfsub_write_u() and vfs_write_k() when vfs_write() returns 0. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/hinode.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace hin_ignore array by spinlock and list in struct au_hinotify. + add list, pid, handled events to struct au_hinode. + move AuInMask from hinotify.c to hinode.h. + remove au_do_hdir_lock(), au_hdir_unlock(), au_hdir_lock_rename(), au_hdir_unlock_rename(), au_hdir_lock() and au_hdir2_lock(). + rename ctl_hinotify() to au_hin_ctl() and make it global, new inline function au_hin_suspend(). + remove the unused functions au_hin_ignore() and au_hin_unignore(). + new functions au_hin_list_del() and au_dbg_hin_list() for debugging. Index: fs/aufs25/hinotify.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + move AuInMask from hinotify.c to hinode.h. + remove au_hin_nignore. + replace hin_ignore array by spinlock and list in struct au_hinotify. + rename ctl_hinotify() to au_hin_ctl() and make it global, new inline function au_hin_suspend(), remove suspend_hinotify() and resume_hinotify() macros. + remove au_do_hdir_lock(), au_hdir_unlock(), au_hdir_lock_rename(), au_hdir_unlock_rename(), au_hdir_lock() and au_hdir2_lock(). + add list, pid, handled events to struct au_hinode. + new functions au_hin_test_ignore() and au_dbg_hin_list(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/i_op.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (still debugging). under heavy i/o (including rename(2)), aufs may misunderstand the child-parent relationship. new structure au_pin locks both parent- child and verifies them. additionally, when udba=inotify is specified, aufs sets inotify watch internally for the parent (and grand parent) dir in cache, and ignores the events triggered by aufs internal activity. this was done by locking the lower dir and setting 0 to the event mask for the lower dir, but it might ignore the event fired by other process, for example write(2) to the lower file. the new method stops setting 0 to the mask, and ignores the event made by aufs only. this fix is not backported to fs/aufs yet since it is still debugging. so the old behaviour is taken on the older kernels. people will call it crazy due to many locks. + new functions au_do_pinned_h_parent(), au_do_unpin(), au_unpin(), au_unpin_gp(), au_do_pin(), au_pin_init() and au_pin(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + call au_pin/unpin() from au_lock_and_icpup() and aufs_setattr(). - kmalloc() some large structures in aufs_setattr(). Index: fs/aufs25/i_op_add.c - set noinline_for_stack to epilog() and lock_hdir_lkup_wh(). - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + remove the parameter dir from au_wh_create(). + add a parameter pin to lock_hdir_lkup_wh(). + call au_pin/unpin() from lock_hdir_lkup_wh(), add_simple(), aufs_link() and aufs_mkdir(). + add a parameter hinode to au_dtime_store() and struct au_dtime. + set ignore info in add_simple(), cpup_or_link(), aufs_link(), aufs_mkdir(). + replace the parameter dlgt of au_h_create(), vfsub_symlink(), vfsub_mknod(), vfsub_link(), vfsub_unlink() and vfsub_mkdir() by vargs. + add a parameter bindex to epilog(). + use au_pin in cpup_before_link(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + add a parameter parent to au_sio_cpup_single(). - set noinline_for_stack to cpup_or_link(). Index: fs/aufs25/i_op_del.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + add a parameter hinode to au_dtime_store() and struct au_dtime. + remove the parameter dir from au_wh_create(). + convert the parameter h_dentry of au_whtmp_ren() to dentry. + remove the parameters inode and noself from au_whtmp_rmdir(). + add a parameter dir to do_revert(). + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + set ignore info in aufs_unlink(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + remove the parameters inode and noself from au_whtmp_kick_rmdir(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/i_op_ren.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + new bit-flags VFSLOCK and PINNED. + new members h_locked[], gparent[], pin[], ign[], and vargs in struct rename_args. + remove the parameter dir from au_wh_create(). + convert the parameter h_dentry of au_whtmp_ren() to dentry. + remove the parameter noself from au_whtmp_ren(). + set ignore info in do_rename(). + add a parameter parent to au_sio_cpup_single(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + remove the parameters inode and noself from au_whtmp_rmdir(). + remove the parameters inode and noself from au_whtmp_kick_rmdir(). + remove au_hgdirs(). + new functions au_ren_pin_init(), au_ren_fake_pin(), au_ren_pin4(), au_ren_pin3(), au_ren_pin(), au_ren_unlock() and au_ren_lock(). + remove au_hdir_lock/unlock_rename() and replace them by au_ren_lock/unlock(). + add a parameter hinode to au_dtime_store() and struct au_dtime. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs, fs/aufs25): a race condition between rename(2) and others, linux-2.6.19 and later. + call d_move() from aufs_rename() Index: fs/aufs25/inode.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + new structures au_pin1 and au_pin. + new functions au_pin_init(), au_pin(), au_do_pin(), au_unpin(), au_unpin_gp(), au_do_pinned_hdir(), au_do_pinned_h_parent(), au_do_pinned_parent(), au_do_pinned_h_dir(), au_pin_do_set_parent(), au_pin_do_set_h_dir(), au_pinned_hdir(), au_pinned_hgdir(), au_pinned_h_parent(), au_pinned_parent(), au_pinned_gparent(), au_pinned_h_dir(), au_pinned_h_gdir(), au_pin_set_parent(), au_pin_set_gparent(), au_pin_set_h_dir() and au_pin_set_h_gdir(). Index: fs/aufs25/misc.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace the parameter dlgt of au_h_create() and vfsub_create() by vargs. + add a parameter hdir to au_copy_file(). + set ignore info in au_copy_file(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/misc.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace the parameter dlgt of au_h_create(). + add a parameter hdir to au_copy_file(). Index: fs/aufs25/module.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + remove AuCacheX() macro. - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/opts.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - unset noinline_for_stack to dump_opts(), verify_opts(). - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + remove au_hdir_lock/unlock_rename() and replace them by au_ren_lock/unlock(). Index: fs/aufs25/plink.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace the parameter dlgt of vfsub_link() by vargs. Index: fs/aufs25/vfsub.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace the parameter dlgt of vfsub_mkdir() by vargs. + convert the parameter dir of vfsub_sio_mkdir() and vfsub_sio_rmdir() to hdir. + set ignore info in vfsub_sio_mkdir(), vfsub_sio_rmdir(), vfsub_sio_notify_change() and call_unlink(). + add a parameter hdir to vfsub_sio_notify_change(). Index: fs/aufs25/vfsub.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + remove vfsub_ign_inode(). + append a new lock subclass id AuLsc_I_(PARENT|CHILD)[34]. + add new inline functions vfsub_lock_rename_mutex(), vfsub_unlock_rename_mutex() and au_verify_parent(). + replace the parameter dlgt of vfsub_create(), vfsub_symlink(), vfsub_mknod(), vfsub_mkdir() and vfsub_link() by vargs. + convert the parameter dir of vfsub_sio_mkdir() and vfsub_sio_rmdir() to hdir. + add a parameter hdir to vfsub_sio_notify_change(). Index: fs/aufs25/wbr_policy.c - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + add a parameter hdir to au_cpdown_attr(). + add a parameter hdir to vfsub_sio_notify_change(). + convert the parameter dir of vfsub_sio_mkdir() and vfsub_sio_rmdir() to hdir. + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. Index: fs/aufs25/whout.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + convert the parameter h_dentry of au_whtmp_ren() to dentry, remove the parameter noself from au_whtmp_ren(). + set ignore info in au_whtmp_ren(). + convert the parameter dir of do_unlink_wh() to hdir. + set ignore info in do_unlink_wh(). + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + remove the parameter dir from unlink_wh_name(). + add parameters dlgt and hdir to clean_wh(), clean_plink() and plink_dir(). + set ignore info in clean_wh(), clean_plink() and plink_dir(). + add a parameter bindex to au_wh_init(). + set ignore info in au_wh_init(). + remove au_hdir_lock/unlock_rename() and replace them by au_ren_lock/unlock(). + reorder the parameters of link_or_create_wh(). + set ignore info in link_or_create_wh(). + remove the parameter dir from au_wh_create(). + remove the parameter inode from del_wh_children(). + remove the parameters inode and noself from au_whtmp_rmdir() and au_whtmp_kick_rmdir(). + remove au_hdir[2]_lock/unlock(), and replace them by mutex_lock/unlock(). + set ignore info in au_whtmp_rmdir(). Index: fs/aufs25/whout.h - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + convert the parameter h_dentry of au_whtmp_ren() to dentry, remove the parameter noself from au_whtmp_ren(). + convert the parameter h_dir of au_wh_unlink_dentry() to struct au_hinode, and remove the parameter dir. + add a parameter bindex to au_wh_init(). + remove the parameter dir from au_wh_create(). + remove the parameters inode and noself from au_whtmp_rmdir() and au_whtmp_kick_rmdir(). Index: fs/aufs25/wkq.c - kmalloc struct completion in au_wkq_run(). - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + a new debug print macro au_dbg_blocked(). - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. Index: fs/aufs25/xino.c - possible bugfix (fs/aufs, fs/aufs25): convert all GFP_TEMPORARY and GFP_KERNEL into GFP_NOFS. - bugfix (fs/aufs25): revert resetting xinoe->ino when noxino option is specified, regression on 2008/06/02. - bugfix (fs/aufs25 only, currently): pin the hierarchy on lower branch and new ignore scheme for inotify (see the ci log in i_op.c, still debugging). + replace the parameter dlgt of vfsub_create() by vargs. + add a parameter hdir to au_copy_file(). Index: util/aufs.in.5 - prohibit sysfs and procfs branch (fs/aufs, fs/aufs25). Index: fs/aufs/f_op.c Index: fs/aufs25/aufs.h Index: include/linux/aufs_type.h - less important changes. ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php