On Wednesday 08 April 2009 11:31:08 am Norikatsu Shigemura wrote: > Hi jhb! > > I got ZFS checksum error issue, too. So I found a way of fixing > this issue. Please back out following change. > > sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > revision 1.5 > date: 2009/03/18 16:19:44; author: jhb; state: Exp; lines: +2 -0 > SVN rev 189967 on 2009-03-18 16:19:44Z by jhb > > The zfs_get_xattrdir() function is used to find the extended attribute > directory for a znode. When the directory already exists, it returns a > referenced but unlocked vnode. When a directory does not yet exist, it > calls zfs_make_xattrdir() to create a new one. zfs_make_xattrdir() returns > the vnode both referenced and and locked and zfs_get_xattrdir() was leaking > this vnode lock to its callers. Fix this by dropping the vnode lock if > zfs_make_xattrdir() successfully creates a new extended attribute > directory. > > Reviewed by: pjd > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > [Validation] > 1. I got ZFS checksum error issue > 2. Backup > 3. Restructure ZPool > 4. Restore (But ZFS checksum error) > 5. Restructure ZPool with kern.smp.disabled=1 > (Almost good, but...) > 6. Restore > 7. Backout zfs_dir#1.5 > 8. Good works for me > > I tested many backup&restore:-). I have no idea how this would break what you are seeing. The zfs_get_xattrdir() function is only called from zfs_lookup() when LOOKUP_XATTR is specified, and that only happens from the extended attribute VOP routines. Are you using extended attributes at all? Also, have you tried running with INVARIANTS and DEBUG_VFS_LOCKS to catch missing locks? -- John BaldwinReceived on Mon Apr 13 2009 - 15:55:14 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:46 UTC