Major SMP problems with lstat/namei

Jeff Wheelhouse freebsd-hackers at wheelhouse.org
Thu Sep 25 23:00:08 UTC 2008


On Sep 24, 2008, at 12:12 PM, John Baldwin wrote:
> Shared lookups only work on the NFS client in 6.x.  I'm about to  
> turn them on
> for UFS in HEAD (8.x) and will backport the needed fixes to 7.x  
> after 7.1
> (too risky to merge to 7.x this close to a release).

OK, given all the patches you referenced, I did make a decent effort  
at backporting to 7.0.

Here are the results:

 >  Revision  Changes    Path
 >  1.87      +48 -29    src/sys/ufs/ufs/ufs_lookup.c

Applied, changing a couple of VOP_ISLOCKED() and vn_lock() calls to  
add "td" as the last parameter.

 > Revision  Changes    Path
 > 1.53      +0 -1      src/sys/ufs/ufs/inode.h
 > 1.88      +10 -13    src/sys/ufs/ufs/ufs_lookup.c

Applied successfully.

 >  SVN rev 181018 on 2008-07-30 21:07:56Z by jhb

NOT applied, because it was a whitespace tweak on ufs_lookup 1.89  
which was not on your list.

 > SVN rev 183079 on 2008-09-16 16:18:36Z by jhb

Applied cleanly.

 >  Modified files:
 >   sys/ufs/ufs          inode.h ufs_lookup.c
 >  Log:
 > SVN rev 183093 on 2008-09-16 19:06:44Z by jhb

Applied cleanly.

 > 1.6       +2 -1      src/sys/ufs/ufs/dirhash.h
 > 1.24      +289 -227  src/sys/ufs/ufs/ufs_dirhash.c

This patch applies but generates an awful lot of errors (enclosed at  
end).  I think it may be dependent on the 8.0 lockmgr.  Since most of  
the remaining patches are against the same files, I bailed out here.

 > SVN rev 183080 on 2008-09-16 16:23:56Z by jhb

Skipped.

 > SVN rev 183280 on 2008-09-22 20:53:22Z by jhb

Skipped.

 > There are additional fixes needed to fix races with umount -f,
 > so if you backport all this stuff, don't use umount -f or you
 > risk panics. :)

Noted.

 > -       mp->mnt_kern_flag |= MNTK_MPSAFE;
 > +       mp->mnt_kern_flag |= MNTK_MPSAFE | MNTK_LOOKUP_SHARED;

Applied.

If I can make the backport work (a big if, given the dirhash changes)  
on 7.0, I am happy to maintain and test the diffs locally until after  
the 7.1 release and send them over to you at that time, if it will  
save you some effort.

Thanks,
Jeff

Dirhash compile errors:

/usr/src/sys/ufs/ufs/ufs_dirhash.c:132:37: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_release':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:132: error: 'lockmgr' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:132: error: (Each undeclared  
identifier is reported only once
/usr/src/sys/ufs/ufs/ufs_dirhash.c:132: error: for each function it  
appears in.)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:161:45: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_create':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:161: error: 'lockmgr' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:178:17: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c:193:60: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c:198:42: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c:222:39: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_acquire':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:222: error: 'lockmgr' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:248:17: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_free':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:247: error: 'lockmgr' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:385:39: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_build':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:385: error: 'lockmgr' undeclared  
(first use in this function)
cc1: warnings being treated as errors
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function  
'ufsdirhash_free_locked':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:403: warning: implicit declaration  
of function 'lockmgr_assert'
/usr/src/sys/ufs/ufs/ufs_dirhash.c:403: warning: nested extern  
declaration of 'lockmgr_assert'
/usr/src/sys/ufs/ufs/ufs_dirhash.c:403: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:417:37: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c:417: error: 'lockmgr' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:418:35: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c:438:37: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_lookup':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:473: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_findfree':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:621: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_enduseful':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:692: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_findslot':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:1001: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_delslot':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:1025: error: 'KA_LOCKED' undeclared  
(first use in this function)
/usr/src/sys/ufs/ufs/ufs_dirhash.c:1101:59: error: macro "lockmgr"  
requires 4 arguments, but only 3 given
/usr/src/sys/ufs/ufs/ufs_dirhash.c: In function 'ufsdirhash_recycle':
/usr/src/sys/ufs/ufs/ufs_dirhash.c:1101: error: 'lockmgr' undeclared  
(first use in this function)





More information about the freebsd-hackers mailing list