-
- Downloads
Revert "vfs/zfs: Sync vnode and znode refcounts"
This reverts commit ca805bdb. The commit breaks Cassandra startup as follows: INFO 09:18:00,244 Opening /var/lib/cassandra/data/system/local/system-local-jb-5 (5677 bytes) page fault outside application, addr 0 [backtrace] 0x31899b <mmu::vm_fault(unsigned long, exception_frame*)+219> 0x34c105 <page_fault+101> 0x34acc7 <ex_pf+35> 0x391e94 <vn_stat+132> 0x3935c9 <sys_stat+41> 0x38a4ee <__xstat+78> Raphael explains: I found that the following commit ca805bdb is the guilty one. It correctly fixes some mismatches between znode and vnode refcnts, then moves VOP_INACTIVE from vrele to keep them synchronized. This change assumes that there is no mismatch anymore. However, there is apparently a corner-case that the patch doesn't address. Example: If the vnode is one refcnt ahead of the respective znode, on an eventual vrele, the znode would be destroyed while the vnode is still alive. zfs_getattr attempts to dereference the field of the znode which doesn't exist anymore, thus the page fault. As it's a regression, revert the commit for now. Signed-off-by:Pekka Enberg <penberg@cloudius-systems.com>
Showing
- bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c 1 addition, 21 deletions...ys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
- bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c 0 additions, 1 deletion...ys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
- fs/vfs/vfs_vnode.c 4 additions, 8 deletionsfs/vfs/vfs_vnode.c
Loading
Please register or sign in to comment