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) {
|
if (tdc) {
|
||||||
ReleaseReadLock(&tdc->lock);
|
ReleaseReadLock(&tdc->lock);
|
||||||
#ifndef AFS_VM_RDWR_ENV
|
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||||
/* try to queue prefetch, if needed */
|
/* try to queue prefetch, if needed */
|
||||||
if (!noLock) {
|
if (!noLock) {
|
||||||
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
||||||
@ -559,7 +559,7 @@ afs_UFSReadFast(avc, auio, acred, albn, abpp, noLock)
|
|||||||
|
|
||||||
if (!noLock) {
|
if (!noLock) {
|
||||||
ReleaseReadLock(&avc->lock);
|
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 (!(code = afs_InitReq(&treq, acred))) {
|
||||||
if (!(tdc->mflags & DFNextStarted))
|
if (!(tdc->mflags & DFNextStarted))
|
||||||
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
afs_PrefetchChunk(avc, tdc, acred, &treq);
|
||||||
@ -982,7 +982,7 @@ tagain:
|
|||||||
*/
|
*/
|
||||||
if (tdc) {
|
if (tdc) {
|
||||||
ReleaseReadLock(&tdc->lock);
|
ReleaseReadLock(&tdc->lock);
|
||||||
#ifndef AFS_VM_RDWR_ENV
|
#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV)
|
||||||
/* try to queue prefetch, if needed */
|
/* try to queue prefetch, if needed */
|
||||||
if (!noLock) {
|
if (!noLock) {
|
||||||
if (!(tdc->mflags & DFNextStarted))
|
if (!(tdc->mflags & DFNextStarted))
|
||||||
|
@ -297,7 +297,9 @@ afs_MemWrite(avc, auio, aio, acred, noLock)
|
|||||||
avc->m.Length = filePos;
|
avc->m.Length = filePos;
|
||||||
}
|
}
|
||||||
#endif
|
#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
|
* If write is implemented via VM, afs_DoPartialWrite() is called from
|
||||||
* the high-level write op.
|
* the high-level write op.
|
||||||
@ -306,14 +308,10 @@ afs_MemWrite(avc, auio, aio, acred, noLock)
|
|||||||
code = afs_DoPartialWrite(avc, &treq);
|
code = afs_DoPartialWrite(avc, &treq);
|
||||||
if (code) {
|
if (code) {
|
||||||
error = code;
|
error = code;
|
||||||
ReleaseWriteLock(&tdc->lock);
|
|
||||||
afs_PutDCache(tdc);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ReleaseWriteLock(&tdc->lock);
|
|
||||||
afs_PutDCache(tdc);
|
|
||||||
}
|
}
|
||||||
#ifndef AFS_VM_RDWR_ENV
|
#ifndef AFS_VM_RDWR_ENV
|
||||||
afs_FakeClose(avc, acred);
|
afs_FakeClose(avc, acred);
|
||||||
@ -618,7 +616,9 @@ afs_UFSWrite(avc, auio, aio, acred, noLock)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
osi_UFSClose(tfile);
|
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
|
* If write is implemented via VM, afs_DoPartialWrite() is called from
|
||||||
* the high-level write op.
|
* the high-level write op.
|
||||||
@ -627,14 +627,10 @@ afs_UFSWrite(avc, auio, aio, acred, noLock)
|
|||||||
code = afs_DoPartialWrite(avc, &treq);
|
code = afs_DoPartialWrite(avc, &treq);
|
||||||
if (code) {
|
if (code) {
|
||||||
error = code;
|
error = code;
|
||||||
ReleaseWriteLock(&tdc->lock);
|
|
||||||
afs_PutDCache(tdc);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ReleaseWriteLock(&tdc->lock);
|
|
||||||
afs_PutDCache(tdc);
|
|
||||||
}
|
}
|
||||||
#ifndef AFS_VM_RDWR_ENV
|
#ifndef AFS_VM_RDWR_ENV
|
||||||
afs_FakeClose(avc, acred);
|
afs_FakeClose(avc, acred);
|
||||||
|
Loading…
Reference in New Issue
Block a user