Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matt-wu/Ext3Fsd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Wu <matt@ext2fsd.com>2016-09-13 18:48:57 +0300
committerMatt Wu <matt@ext2fsd.com>2016-09-13 19:06:49 +0300
commitc78eeccb9be7d23a4a08df7743ca08438844f46b (patch)
tree5129ff9eb6b9d98c99a48a72768c282055eaa04d
parent73961f84b142e72eccd614f805e45094d71ae0e3 (diff)
FIXME: exclusive-pin might cause deadlock
possible deadlock with Cc(Map/Pin/PreparePinWrite...) operations upon Vcb->Volume stream fileobj
-rwxr-xr-xExt3Fsd/linux.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/Ext3Fsd/linux.c b/Ext3Fsd/linux.c
index f4c52f8..530c771 100755
--- a/Ext3Fsd/linux.c
+++ b/Ext3Fsd/linux.c
@@ -476,11 +476,12 @@ again:
offset.QuadPart <<= BLOCK_BITS;
if (zero) {
+ /* PIN_EXCLUSIVE disabled, likely to deadlock with volume operations */
if (!CcPreparePinWrite(Vcb->Volume,
&offset,
bh->b_size,
FALSE,
- PIN_WAIT | PIN_EXCLUSIVE,
+ PIN_WAIT /* | PIN_EXCLUSIVE */,
&bcb,
&ptr)) {
Ext2Sleep(100);
@@ -563,12 +564,14 @@ int submit_bh_mdl(int rw, struct buffer_head *bh)
SetFlag(Vcb->Volume->Flags, FO_FILE_MODIFIED);
Offset.QuadPart = ((LONGLONG)bh->b_blocknr) << BLOCK_BITS;
+
+ /* PIN_EXCLUSIVE disabled, likely to deadlock with volume operations */
if (CcPreparePinWrite(
Vcb->Volume,
&Offset,
BLOCK_SIZE,
FALSE,
- PIN_WAIT | PIN_EXCLUSIVE,
+ PIN_WAIT /* | PIN_EXCLUSIVE */,
&Bcb,
&Buffer )) {
#if 0