Mark Vitale
2014-07-03 22:15:54 UTC
I'm hoping someone on the list can provide more historical background on the "bozonlock" (AFS_BOZONLOCK_ENV, vcache->pvnLock). By reading how it is used in code, it is clearly intended to only allow one thread at a time to interact with the paging subsystem for a given vcache's memory-mapped pages. This is also alluded to in the name "pvnLock" - paged vnode lock.
Some code comments (1) imply that bozonlock was originally intended for use in the Solaris port. However, sometime before IBM 1.0, it was specifically disabled for Solaris by the addition of #define AFS_NOBOZO_LOCK (2).
Currently bozonlock function (AFS_BOZONLOCK_ENV 1) is only defined for the Darwin port (and DUX).
Does anyone know why bozonlock was disabled for Solaris? Does anyone know any reason why it could/should not be reinstated for Solaris?
Thanks,
--
Mark Vitale
***@sinenomine.net
(1) from src/afs/afs_lock.c:
#ifdef AFS_BOZONLOCK_ENV
/* operations on locks that don't mind if we lock the same thing twice. I'd like to dedicate
this function to Sun Microsystems' Version 4.0 virtual memory system, without
which this wouldn't have been necessary */
void
afs_BozonLock(struct afs_bozoLock *alock, struct vcache *avc)
...
(2) Recently Andrew Deason (in commit 8017773587bf28a58e480f634fdccc287c443d3b) explained and simplified the conditional logic for the AFS bozonlock; he eliminated AFS_NOBOZO_LOCK and extended AFS_BOZONLOCK_ENV to essentially preserve the existing usage. So even though AFS_NOBOZO_LOCK no longer exists on master, Solaris is still not using the bozonlock.
Some code comments (1) imply that bozonlock was originally intended for use in the Solaris port. However, sometime before IBM 1.0, it was specifically disabled for Solaris by the addition of #define AFS_NOBOZO_LOCK (2).
Currently bozonlock function (AFS_BOZONLOCK_ENV 1) is only defined for the Darwin port (and DUX).
Does anyone know why bozonlock was disabled for Solaris? Does anyone know any reason why it could/should not be reinstated for Solaris?
Thanks,
--
Mark Vitale
***@sinenomine.net
(1) from src/afs/afs_lock.c:
#ifdef AFS_BOZONLOCK_ENV
/* operations on locks that don't mind if we lock the same thing twice. I'd like to dedicate
this function to Sun Microsystems' Version 4.0 virtual memory system, without
which this wouldn't have been necessary */
void
afs_BozonLock(struct afs_bozoLock *alock, struct vcache *avc)
...
(2) Recently Andrew Deason (in commit 8017773587bf28a58e480f634fdccc287c443d3b) explained and simplified the conditional logic for the AFS bozonlock; he eliminated AFS_NOBOZO_LOCK and extended AFS_BOZONLOCK_ENV to essentially preserve the existing usage. So even though AFS_NOBOZO_LOCK no longer exists on master, Solaris is still not using the bozonlock.