diff options
author | Matt Wu <matt@ext2fsd.com> | 2016-09-13 18:48:57 +0300 |
---|---|---|
committer | Matt Wu <matt@ext2fsd.com> | 2016-09-13 19:06:49 +0300 |
commit | c78eeccb9be7d23a4a08df7743ca08438844f46b (patch) | |
tree | 5129ff9eb6b9d98c99a48a72768c282055eaa04d | |
parent | 73961f84b142e72eccd614f805e45094d71ae0e3 (diff) |
FIXME: exclusive-pin might cause deadlock
possible deadlock with Cc(Map/Pin/PreparePinWrite...) operations
upon Vcb->Volume stream fileobj
-rwxr-xr-x | Ext3Fsd/linux.c | 7 |
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 |