do d_instantiate/unlock_new_inode combinations safely
For anything NFS-exported we do _not_ want to unlock new inode before it has grown an alias; original set of fixes got the ordering right, but missed the nasty complication in case of lockdep being enabled - unlock_new_inode() does lockdep_annotate_inode_mutex_key(inode) which can only be done before anyone gets a chance to touch ->i_mutex. Unfortunately, flipping the order and doing unlock_new_inode() before d_instantiate() opens a window when mkdir can race with open-by-fhandle on a guessed fhandle, leading to multiple aliases for a directory inode and all the breakage that follows from that. Correct solution: a new primitive (d_instantiate_new()) combining these two in the right order - lockdep annotate, then d_instantiate(), then the rest of unlock_new_inode(). All combinations of d_instantiate() with unlock_new_inode() should be converted to that. Cc: stable@kernel.org # 2.6.29 and later Tested-by:Mike Marshall <hubcap@omnibond.com> Reviewed-by:
Andreas Dilger <adilger@dilger.ca> Signed-off-by:
Al Viro <viro@zeniv.linux.org.uk>
Showing
- fs/btrfs/inode.c 4 additions, 12 deletionsfs/btrfs/inode.c
- fs/dcache.c 22 additions, 0 deletionsfs/dcache.c
- fs/ecryptfs/inode.c 1 addition, 2 deletionsfs/ecryptfs/inode.c
- fs/ext2/namei.c 2 additions, 4 deletionsfs/ext2/namei.c
- fs/ext4/namei.c 2 additions, 4 deletionsfs/ext4/namei.c
- fs/f2fs/namei.c 4 additions, 8 deletionsfs/f2fs/namei.c
- fs/jffs2/dir.c 4 additions, 8 deletionsfs/jffs2/dir.c
- fs/jfs/namei.c 4 additions, 8 deletionsfs/jfs/namei.c
- fs/nilfs2/namei.c 2 additions, 4 deletionsfs/nilfs2/namei.c
- fs/orangefs/namei.c 3 additions, 6 deletionsfs/orangefs/namei.c
- fs/reiserfs/namei.c 4 additions, 8 deletionsfs/reiserfs/namei.c
- fs/udf/namei.c 2 additions, 4 deletionsfs/udf/namei.c
- fs/ufs/namei.c 2 additions, 4 deletionsfs/ufs/namei.c
- include/linux/dcache.h 1 addition, 0 deletionsinclude/linux/dcache.h
Loading
Please register or sign in to comment