mirror of
https://git.openafs.org/openafs.git
synced 2025-01-22 08:50:17 +00:00
Enable afs_DoPartialWrite() and afs_PrefetchChunk() in afs_UFSRead
and afs_UFSWrite for Linux; fixes deadlock condition for small cache sizes.
This commit is contained in:
parent
e9a6a53944
commit
4b2be9588b
@ -330,7 +330,7 @@ tagain:
|
||||
*/
|
||||
if (tdc) {
|
||||
ReleaseReadLock(&tdc->lock);
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||
/* try to queue prefetch, if needed */
|
||||
if (!noLock) {
|
||||
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
||||
@ -559,7 +559,7 @@ afs_UFSReadFast(avc, auio, acred, albn, abpp, noLock)
|
||||
|
||||
if (!noLock) {
|
||||
ReleaseReadLock(&avc->lock);
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||
if (!(code = afs_InitReq(&treq, acred))) {
|
||||
if (!(tdc->mflags & DFNextStarted))
|
||||
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
||||
@ -982,7 +982,7 @@ tagain:
|
||||
*/
|
||||
if (tdc) {
|
||||
ReleaseReadLock(&tdc->lock);
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||
/* try to queue prefetch, if needed */
|
||||
if (!noLock) {
|
||||
if (!(tdc->mflags & DFNextStarted))
|
||||
|
@ -297,7 +297,9 @@ afs_MemWrite(avc, auio, aio, acred, noLock)
|
||||
avc->m.Length = filePos;
|
||||
}
|
||||
#endif
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||
/*
|
||||
* If write is implemented via VM, afs_DoPartialWrite() is called from
|
||||
* the high-level write op.
|
||||
@ -306,14 +308,10 @@ afs_MemWrite(avc, auio, aio, acred, noLock)
|
||||
code = afs_DoPartialWrite(avc, &treq);
|
||||
if (code) {
|
||||
error = code;
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
}
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
afs_FakeClose(avc, acred);
|
||||
@ -618,7 +616,9 @@ afs_UFSWrite(avc, auio, aio, acred, noLock)
|
||||
}
|
||||
#endif
|
||||
osi_UFSClose(tfile);
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||
/*
|
||||
* If write is implemented via VM, afs_DoPartialWrite() is called from
|
||||
* the high-level write op.
|
||||
@ -627,14 +627,10 @@ afs_UFSWrite(avc, auio, aio, acred, noLock)
|
||||
code = afs_DoPartialWrite(avc, &treq);
|
||||
if (code) {
|
||||
error = code;
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ReleaseWriteLock(&tdc->lock);
|
||||
afs_PutDCache(tdc);
|
||||
}
|
||||
#ifndef AFS_VM_RDWR_ENV
|
||||
afs_FakeClose(avc, acred);
|
||||
|
Loading…
Reference in New Issue
Block a user