From a60bb0c5510d5272458bc1cc368a4c4cd77114a2 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Wed, 10 Oct 2001 00:58:44 +0000 Subject: [PATCH] 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. --- src/afs/afs_buffer.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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); -- 2.39.5