[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
TAKE - Close window on inodes that aren't fully set up
The various reports of oopses with NFS + xfsdump should be solved
with this mod.
If xfs_iget created a new linux inode, we would unlock it before we
set the inode ops. This wasn't a problem for most cases, but for
things like nfs and xfsdump that can just reach in and grab an inode,
we had a window of time where inodes were "in the wild" with no ops set;
NFS tries to execute these ops without checking first, and it would oops.
This mod keeps the inodes locked until the ops have been set.
It also rearranges where linvfs_set_inode_ops gets called from; it's
gone from most of the linvfs layer now, instead called out of
xfs_iget_vnode_init for inodes which are already on-disk, or xfs_ialloc
for newly created inodes.
Explicit calls to unlock_new_inode are moved as well; it's now done
at the bottom of linvfs_set_inode_ops.
This _may_ allow us to re-enable the fh_to_dentry/dentry_to_fh methods
for nfs; still testing that.
Date: Thu May 2 10:13:43 PDT 2002
Workarea: stout.americas.sgi.com:/localhome/src/sandeen/2.4.x-xfs/workarea-iops
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: 2.4.x-xfs:slinx:118073a
linux/fs/xfs/xfs_vfsops.c - 1.343
- Remove call to linvfs_set_inode_ops, done elsewhere now
linux/fs/xfs/xfs_iget.c - 1.153
- Set linux inode ops in xfs_iget_vnode_init if we have the vn_type
Remove unlock_new_inode except for error cases
linux/fs/xfs/xfs_inode.c - 1.336
- Set linux inode ops in xfs_ialloc for new inodes
linux/fs/xfs/linux/xfs_vnode.c - 1.73
- Remove call to linvfs_set_inode_ops, done elsewhere now
linux/fs/xfs/linux/xfs_super.c - 1.166
- Remove linvfs_set_inode_ops from linvfs_read_super, done elsewhere now
Return immediately from linvfs_set_inode_ops if it's not a new inode
Unlock new inode when livnfs_set_inode_ops is finished.
linux/fs/xfs/linux/xfs_iops.c - 1.137
linux/fs/xfs/linux/xfs_ioctl.c - 1.58
- Remove call to linvfs_set_inode_ops, done elsewhere now