o bugfix - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new member ii_nfsd_readdir in struct au_iinfo. + new structure au_nfsd_readdir_pid. + new functions au_nfsd_readdir_(alloc|free|reg|unreg), au_nfsd_do_read_lock(), au_nfsd_read_lock() and di_nfsd_read_lock_parent(). + new function di_nfsd_read_lock_parent(). + new abstract function au_nfsd_read_lock(). + in aufs_encode_fh(), support the in-readdir status by au_nfsd_read_lock(). + in aufs_d_revalidate(), when the dentry is the readdir-ed itself and cannot get the write-lock, returns 'invalid' and forces re-lookup. + in aufs_getattr(), support the in-readdir status by au_nfsd_read_lock(). + in aufs_lookup(), support the in-readdir status by di_nfsd_read_lock_parent(). + free ii_nfsd_readdir in au_iinfo_fin(). + stop calling lockdep_off/on(). - 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. + add a parameter 'must_new' for au_new_inode(). + set S_DEAD flag in aufs_unlink() and aufs_rmdir(). + set S_DEAD flag in aufs_rename(). + test the S_DEAD flag in reval_inode(). - bugfix: force nosubtreecheck for a branch.
o news - new helper script 'auchk' which behaves like 'fsck' for aufs branch. - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. + rename hin_or_fuse.c to getattr.c. + always force the real getattr operation for nfs branch. - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + show the lock status when MagicSysRq key is pressed. + new member si_dbg_lock in struct au_sbinfo. + new functions au_dbg_(locking|locked)_di_(reg|unreg), au_dbg_lock_ii_(reg|unreg). o misc - refine some functions au_wkq_run(), au_wkq_wait() and au_wkq_nowait(). + move au_wkq_wait() from wkq.h to wkq.c. - test the kernel thread instead of trylock. + new function au_test_nowait_wkq(). - revise au_nwt_done() simply. - test the kernel thread instead of trylock. - use ZERO_PAGE(). + for older version, new abstract functions au_zp_alloc/free(). - new generic structure au_splhead and au_spl_init() for it. - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). + new debug macro au_rwsem_destroy(). Junjiro R. Okajima ---------------------------------------------------------------------- Index: Kconfig.in - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. - new debug configuration CONFIG_AUFS_DEBUG_LOCK. Index: README Index: util/aufs.in.5 Index: util/auchk - new helper script 'auchk' which behaves like 'fsck' for aufs branch. Index: local.mk - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. - new debug configuration CONFIG_AUFS_DEBUG_LOCK. - new helper script 'auchk' which behaves like 'fsck' for aufs branch. Index: fs/aufs/Makefile Index: fs/aufs25/Makefile Index: fs/aufs/sysaufs.c Index: fs/aufs25/sysfs.c - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. + rename hin_or_fuse.c to getattr.c. Index: fs/aufs/branch.c Index: fs/aufs25/branch.c Index: fs/aufs/finfo.c Index: fs/aufs25/finfo.c Index: fs/aufs25/sbinfo.c - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). Index: fs/aufs/debug.c Index: fs/aufs25/debug.c - new debug configuration CONFIG_AUFS_DEBUG_LOCK. Index: fs/aufs/debug.h Index: fs/aufs25/debug.h - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + new functions au_dbg_(locking|locked)_di_(reg|unreg), au_dbg_lock_ii_(reg|unreg). Index: fs/aufs/dentry.c Index: fs/aufs25/dentry.c - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + in aufs_d_revalidate(), when the dentry is the readdir-ed itself and cannot get the write-lock, returns 'invalid' and forces re-lookup. - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). Index: fs/aufs/dentry.h Index: fs/aufs25/dentry.h - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new function di_nfsd_read_lock_parent(). Index: fs/aufs/dinfo.c Index: fs/aufs25/dinfo.c - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + call au_dbg_(locked|locking)_di_(reg|unreg). Index: fs/aufs/dir.c Index: fs/aufs25/dir.c - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + call au_nfsd_readdir_(alloc|reg|unreg). + stop calling lockdep_off/on(). Index: fs/aufs/dir.h Index: fs/aufs25/dir.h - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new structure au_nfsd_readdir_pid. + new functions au_nfsd_readdir_(alloc|free|reg|unreg), au_nfsd_do_read_lock(), au_nfsd_read_lock() and di_nfsd_read_lock_parent(). Index: fs/aufs/export.c Index: fs/aufs25/export.c - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new functions au_nfsd_readdir_(alloc|free|reg|unreg|test) and au_nfsd_do_read_lock(). + stop calling lockdep_(off|on)(). + in aufs_encode_fh(), support the in-readdir status by au_nfsd_read_lock(). - bugfix: force nosubtreecheck for a branch. Index: fs/aufs/getattr.c Index: fs/aufs/hin_or_fuse.c Index: fs/aufs25/getattr.c Index: fs/aufs25/hin_or_fuse.c - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. + rename hin_or_fuse.c to getattr.c. + always force the real getattr operation for nfs branch. - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + in aufs_getattr(), support the in-readdir status by au_nfsd_read_lock(). Index: fs/aufs/i_op.c Index: fs/aufs25/i_op.c - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + in aufs_lookup(), support the in-readdir status by di_nfsd_read_lock_parent(). - 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. + add a parameter 'must_new' for au_new_inode(). - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. Index: fs/aufs/i_op_add.c Index: fs/aufs25/i_op_add.c - 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. + add a parameter 'must_new' for au_new_inode(). Index: fs/aufs/i_op_del.c Index: fs/aufs25/i_op_del.c - 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. + set S_DEAD flag in aufs_unlink() and aufs_rmdir(). Index: fs/aufs/i_op_ren.c Index: fs/aufs25/i_op_ren.c - 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. + set S_DEAD flag in aufs_rename(). Index: fs/aufs/iinfo.c Index: fs/aufs25/iinfo.c - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new member ii_nfsd_readdir in struct au_iinfo. + free ii_nfsd_readdir in au_iinfo_fin(). - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). Index: fs/aufs/inode.c Index: fs/aufs25/inode.c - 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. + test the S_DEAD flag in reval_inode(). + add a parameter 'must_new' for au_new_inode(). Index: fs/aufs/inode.h Index: fs/aufs25/inode.h - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new member ii_nfsd_readdir in struct au_iinfo. - 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. + add a parameter 'must_new' for au_new_inode(). - replace the automatic configuration CONFIG_AUFS_HIN_OR_FUSE by CONFIG_AUFS_GETATTR, and support nfs branch too. + rename hin_or_fuse.c to getattr.c. - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + call au_dbg_lock_ii_(reg|unreg). Index: fs/aufs/misc.c Index: fs/aufs25/misc.c - use ZERO_PAGE(). + for older version, new abstract functions au_zp_alloc/free(). Index: fs/aufs/misc.h Index: fs/aufs25/misc.h - new generic structure au_splhead and au_spl_init() for it. - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). + new debug macro au_rwsem_destroy(). Index: fs/aufs/super.c Index: fs/aufs25/super.c - test the kernel thread instead of trylock. - insert minor debug functions mutex_destroy() and au_rwsem_destroy(). Index: fs/aufs/super.h Index: fs/aufs25/super.h - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + new member si_dbg_lock in struct au_sbinfo. - bugfix: NFSD issues another operation during filesystem's readdir(), and it may cause a deadlock in aufs. check the current context is in readdir(). + new abstract functino au_nfsd_read_lock(). Index: fs/aufs/sysrq.c Index: fs/aufs25/sysrq.c - new debug configuration CONFIG_AUFS_DEBUG_LOCK. + new functions au_dbg_(locking|locked)_di_(reg|unreg), au_dbg_lock_ii_(reg|unreg). + show the lock status when MagicSysRq key is pressed. Index: fs/aufs/wkq.c Index: fs/aufs25/wkq.c Index: fs/aufs/wkq.h Index: fs/aufs25/wkq.h - refine some functions au_wkq_run(), au_wkq_wait() and au_wkq_nowait(). + move au_wkq_wait() from wkq.h to wkq.c. - test the kernel thread instead of trylock. + new function au_test_nowait_wkq(). - revise au_nwt_done() simply. Index: fs/aufs/cpup.c Index: fs/aufs25/cpup.c Index: fs/aufs/hinode.h Index: fs/aufs25/hinode.h Index: fs/aufs/hinotify.c Index: fs/aufs25/hinotify.c Index: include/linux/aufs_type.h - less important changes. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/