From: Nickolai Zeldovich Date: Wed, 10 Oct 2001 00:58:44 +0000 (+0000) Subject: release-buffer-cache-lock-before-opening-file-20011009 X-Git-Tag: openafs-devel-1_3_0~225 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=a60bb0c5510d5272458bc1cc368a4c4cd77114a2;p=packages%2Fo%2Fopenafs.git release-buffer-cache-lock-before-opening-file-20011009 make the buffer cache release the buffer hash lock before trying to open the corresponding file. Since we're already holding a buffer cache entry, we can lock it instead and let other threads obtain the big hash lock. --- diff --git a/src/afs/afs_buffer.c b/src/afs/afs_buffer.c index 8f019ba24..3fc6e4f22 100644 --- a/src/afs/afs_buffer.c +++ b/src/afs/afs_buffer.c @@ -232,17 +232,18 @@ char *DRead(fid,page) MReleaseWriteLock(&afs_bufferLock); return 0; } + MObtainWriteLock(&tb->lock,260); + MReleaseWriteLock(&afs_bufferLock); + tb->lockers++; tfile = afs_CFileOpen(fid[0]); sizep = (afs_int32 *)tfile; if (page * AFS_BUFFER_PAGESIZE >= *sizep) { dirp_Zap(tb->fid); + tb->lockers--; + MReleaseWriteLock(&tb->lock); afs_CFileClose(tfile); - MReleaseWriteLock(&afs_bufferLock); return 0; } - MObtainWriteLock(&tb->lock,260); - MReleaseWriteLock(&afs_bufferLock); - tb->lockers++; code = afs_CFileRead(tfile, tb->page * AFS_BUFFER_PAGESIZE, tb->data, AFS_BUFFER_PAGESIZE); afs_CFileClose(tfile);