Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions drivers/filesystems/udfs/cleanup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ UDFCommonCleanup(

if (FileObject->Flags & FO_CACHE_SUPPORTED) {
// we've cached close
InterlockedDecrement((PLONG)&Fcb->CachedOpenHandleCount);
InterlockedDecrement(&Fcb->CachedOpenHandleCount);
}

MmPrint((" CcUninitializeCacheMap()\n"));
Expand Down Expand Up @@ -190,7 +190,7 @@ UDFCommonCleanup(

if (FileObject->Flags & FO_CACHE_SUPPORTED) {
// we've cached close
InterlockedDecrement((PLONG)&Fcb->CachedOpenHandleCount);
InterlockedDecrement(&Fcb->CachedOpenHandleCount);
}
// No ASSERT on FcbCleanup vs FcbReference here - FcbCleanup
// can be temporarily bumped by try-lock reordering in create.cpp
Expand Down
2 changes: 1 addition & 1 deletion drivers/filesystems/udfs/create.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2998,7 +2998,7 @@ UDFCompleteFcbOpen(
IrpSp->FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING;
} else {
IrpSp->FileObject->Flags |= FO_CACHE_SUPPORTED;
InterlockedIncrement((PLONG)&Fcb->CachedOpenHandleCount);
InterlockedIncrement(&Fcb->CachedOpenHandleCount);
}

} else if (TypeOfOpen == UserVolumeOpen) {
Expand Down
14 changes: 7 additions & 7 deletions drivers/filesystems/udfs/fileinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1683,12 +1683,12 @@ UDFSetEndOfFileInfo(

// reference file to pretend that it is opened
UDFReferenceFile__(Fcb->FileInfo);
InterlockedIncrement((PLONG)&Fcb->FcbReference);
InterlockedIncrement(&Fcb->FcbReference);
// perform resize operation
RC = UDFResizeFile__(IrpContext, Vcb, Fcb->FileInfo, PtrBuffer->EndOfFile.QuadPart);
// dereference file
UDFCloseFile__(IrpContext, Vcb, Fcb->FileInfo);
InterlockedDecrement((PLONG)&Fcb->FcbReference);
InterlockedDecrement(&Fcb->FcbReference);
// update values in NtReqFcb
Fcb->Header.FileSize.QuadPart =
// NtReqFcb->CommonFCBHeader.ValidDataLength.QuadPart =
Expand All @@ -1713,12 +1713,12 @@ UDFSetEndOfFileInfo(
// Perform directory entry modifications. Release any on-disk
// space we may need to in the process.
UDFReferenceFile__(Fcb->FileInfo);
InterlockedIncrement((PLONG)&Fcb->FcbReference);
InterlockedIncrement(&Fcb->FcbReference);
// perform resize operation
RC = UDFResizeFile__(IrpContext, Vcb, Fcb->FileInfo, PtrBuffer->EndOfFile.QuadPart);
// dereference file
UDFCloseFile__(IrpContext, Vcb, Fcb->FileInfo);
InterlockedDecrement((PLONG)&Fcb->FcbReference);
InterlockedDecrement(&Fcb->FcbReference);

ModifiedAllocSize = TRUE;
TruncatedFile = TRUE;
Expand Down Expand Up @@ -1841,16 +1841,16 @@ UDFPrepareForRenameMoveLink(
// one of them is a parent of another. Sequential resource
// acquisition may lead to deadlock due to concurrent
// cleanup operations or UDFTeardownStructures()
InterlockedIncrement((PLONG)&Vcb->VcbReference);
InterlockedIncrement(&Vcb->VcbReference);


(*SingleDir) = ((Dir1 == Dir2) && (Dir1->Fcb));

if (!(*SingleDir) ||
(UDFGetFileLinkCount(File1) != 1)) {
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);
} else {
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);

// Child-first lock ordering
// File1 (child) first, Dir1 (parent) second
Expand Down
8 changes: 4 additions & 4 deletions drivers/filesystems/udfs/fscntrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ UDFMountVolume(
// but simply cleanup and return error, Vcb->VcbReference
// will be decremented during cleanup. Thus anyway it must
// stay 1 unchanged here
//InterlockedDecrement((PLONG)&Vcb->VcbReference);
//InterlockedDecrement(&Vcb->VcbReference);
UDFCloseResidual(IrpContext, Vcb);
Vcb->VcbReference = 1;

Expand Down Expand Up @@ -525,7 +525,7 @@ try_exit: NOTHING;
}
// Make sure there is no Vcb since it could go away
if (Vcb->VcbReference)
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);
// This procedure will also delete the volume device object
if (UDFDismountVcb(IrpContext, Vcb, FALSE)) {
UDFReleaseResource( &(Vcb->VcbResource) );
Expand Down Expand Up @@ -575,7 +575,7 @@ UDFCloseResidual(
{
// Deinitialize Non-alloc file
if (Vcb->VcbReference)
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);
UDFPrint(("UDFCloseResidual: NonAllocFileInfo %x\n", Vcb->NonAllocFileInfo));
if (Vcb->NonAllocFileInfo) {
UDFCloseFile__(IrpContext, Vcb, Vcb->NonAllocFileInfo);
Expand Down Expand Up @@ -650,7 +650,7 @@ UDFCloseResidual(
}
// Remove root FCB reference in vcb
if (Vcb->VcbReference)
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);
Vcb->RootIndexFcb = NULL;
}
} // end UDFCloseResidual()
Expand Down
13 changes: 8 additions & 5 deletions drivers/filesystems/udfs/misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1486,16 +1486,16 @@ UDFSetModified(
IN PVCB Vcb
)
{
if (InterlockedIncrement((PLONG) & (Vcb->Modified)) & 0x80000000)
Vcb->Modified = 2;
if (InterlockedIncrement(&Vcb->Modified) & 0x80000000)
InterlockedExchange(&Vcb->Modified, 2);
} // end UDFSetModified()

VOID
UDFPreClrModified(
IN PVCB Vcb
)
{
Vcb->Modified = 1;
InterlockedExchange(&Vcb->Modified, 1);
} // end UDFPreClrModified()

VOID
Expand All @@ -1504,7 +1504,7 @@ UDFClrModified(
)
{
UDFPrint(("ClrModified\n"));
InterlockedDecrement((PLONG)&Vcb->Modified);
InterlockedDecrement(&Vcb->Modified);
} // end UDFClrModified()

NTSTATUS
Expand All @@ -1524,7 +1524,10 @@ UDFToggleMediaEjectDisable (

} else {

Vcb->VcbState ^= UDF_VCB_FLAGS_MEDIA_LOCKED;
if (PreventRemoval)
InterlockedOr((volatile LONG*)&Vcb->VcbState, UDF_VCB_FLAGS_MEDIA_LOCKED);
else
InterlockedAnd((volatile LONG*)&Vcb->VcbState, ~UDF_VCB_FLAGS_MEDIA_LOCKED);
}

Prevent.PreventMediaRemoval = PreventRemoval;
Expand Down
12 changes: 6 additions & 6 deletions drivers/filesystems/udfs/prefxsup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ UDFAcquirePrefix(
// Increment parent refs immediately after LCB creation.
// These will be decremented in UDFTeardownStructures when LCB is removed.
//
InterlockedIncrement((PLONG)&ParentFcb->FcbReference);
InterlockedIncrement(&ParentFcb->FcbReference);
if (ParentFcb->FileInfo) {
UDFReferenceFile__(ParentFcb->FileInfo);
}
Expand Down Expand Up @@ -609,7 +609,7 @@ UDFReleasePrefix(
ASSERT(Lcb->NodeIdentifier.NodeTypeCode == UDF_NODE_TYPE_LCB);
ASSERT(Lcb->Reference > 0);

InterlockedDecrement((PLONG)&Lcb->Reference);
InterlockedDecrement(&Lcb->Reference);
} // end UDFReleasePrefix()


Expand Down Expand Up @@ -899,7 +899,7 @@ UDFReleasePrefixImmediate(
//
// Decrement reference
//
NewRef = InterlockedDecrement((PLONG)&Lcb->Reference);
NewRef = InterlockedDecrement(&Lcb->Reference);

if (NewRef > 0) {
//
Expand All @@ -925,7 +925,7 @@ UDFReleasePrefixImmediate(
//
if (ParentFcb) {
ASSERT(ParentFcb->FcbReference > 0);
InterlockedDecrement((PLONG)&ParentFcb->FcbReference);
InterlockedDecrement(&ParentFcb->FcbReference);

//
// Close parent's FileInfo if requested
Expand Down Expand Up @@ -1314,14 +1314,14 @@ UDFRenameMovePrefix(
// Adjust reference counts
if (OldParentFcb) {
ASSERT(OldParentFcb->FcbReference > 0);
InterlockedDecrement((PLONG)&OldParentFcb->FcbReference);
InterlockedDecrement(&OldParentFcb->FcbReference);

if (OldParentFileInfo && OldParentFcb->Vcb) {
UDFCloseFile__(IrpContext, OldParentFcb->Vcb, OldParentFileInfo);
}
}

InterlockedIncrement((PLONG)&NewParentFcb->FcbReference);
InterlockedIncrement(&NewParentFcb->FcbReference);

if (NewParentFcb->FileInfo) {
UDFReferenceFile__(NewParentFcb->FileInfo);
Expand Down
14 changes: 8 additions & 6 deletions drivers/filesystems/udfs/strucsup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ Return Value:

ExInitializeResourceLite(&FcbNonpaged->FcbPagingIoResource);
ExInitializeResourceLite(&FcbNonpaged->FcbResource);
ExInitializeResourceLite(&FcbNonpaged->CcbListResource);
ExInitializeFastMutex(&FcbNonpaged->FcbMutex);
ExInitializeFastMutex(&FcbNonpaged->AdvancedFcbHeaderMutex);
ExInitializeFastMutex(&FcbNonpaged->FcbFastMutex);
Expand Down Expand Up @@ -180,6 +181,7 @@ Return Value:

ExDeleteResourceLite(&FcbNonpaged->FcbResource);
ExDeleteResourceLite(&FcbNonpaged->FcbPagingIoResource);
ExDeleteResourceLite(&FcbNonpaged->CcbListResource);

UDFDeallocateFcbNonpaged(FcbNonpaged);

Expand Down Expand Up @@ -293,8 +295,8 @@ Return Value:

if (Vcb != NULL) {

InterlockedDecrement( (LONG*)&Vcb->VcbReference );
InterlockedDecrement( (LONG*)&Vcb->VcbUserReference );
InterlockedDecrement(&Vcb->VcbReference );
InterlockedDecrement(&Vcb->VcbUserReference );
}

return;
Expand Down Expand Up @@ -458,7 +460,7 @@ UDFTeardownStructures(
if (ParentFcb->FileInfo) {
UDFCloseFile__(IrpContext, Vcb, ParentFcb->FileInfo);
}
InterlockedDecrement((PLONG)&ParentFcb->FcbReference);
InterlockedDecrement(&ParentFcb->FcbReference);

UDFUnlockVcb(IrpContext, Vcb);
}
Expand Down Expand Up @@ -1274,7 +1276,7 @@ UDFCompleteMount(
UDFInsertFcbIntoTable(IrpContext, Vcb->RootIndexFcb);

// this is a part of UDF_RESIDUAL_REFERENCE
InterlockedIncrement((PLONG)&Vcb->VcbReference);
InterlockedIncrement(&Vcb->VcbReference);
Vcb->RootIndexFcb->FcbCleanup = 1;
Vcb->RootIndexFcb->FcbReference = 1;

Expand Down Expand Up @@ -1314,7 +1316,7 @@ UDFCompleteMount(
UDFCleanUpFile__(Vcb, Vcb->NonAllocFileInfo);
Vcb->NonAllocFileInfo = NULL;
// this was a part of UDF_RESIDUAL_REFERENCE
InterlockedDecrement((PLONG)&Vcb->VcbReference);
InterlockedDecrement(&Vcb->VcbReference);
unwind_1:

// UDFCloseResidual() will clean up everything
Expand Down Expand Up @@ -1383,7 +1385,7 @@ UDFCompleteMount(
UDFPreClrModified(Vcb);
UDFClrModified(Vcb);
// this is a part of UDF_RESIDUAL_REFERENCE
InterlockedIncrement((PLONG)&Vcb->VcbReference);
InterlockedIncrement(&Vcb->VcbReference);

// Start initializing the fields contained in the Header.

Expand Down
28 changes: 15 additions & 13 deletions drivers/filesystems/udfs/struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ struct FCB_NONPAGED {

ERESOURCE FcbPagingIoResource;

ERESOURCE CcbListResource;

// This is the FastMutex for this Fcb.

FAST_MUTEX FcbMutex;
Expand Down Expand Up @@ -245,10 +247,10 @@ struct FCB {
// But when we have mapped data, we can receive no IRP_MJ_CLOSE
// In this case OpenHandleCount may reach zero, but ReferenceCount may
// be non-zero.
ULONG FcbReference;
ULONG FcbCleanup;
ULONG CachedOpenHandleCount;
ULONG FcbUserReference;
LONG FcbReference;
LONG FcbCleanup;
LONG CachedOpenHandleCount;
LONG FcbUserReference;

// State flags for this Fcb.

Expand Down Expand Up @@ -398,7 +400,7 @@ struct LCB {
ULONGLONG InitialOffset; // +0x38 Initial offset

// Reference count (incremented by CCB, decremented on cleanup)
ULONG Reference; // +0x40 Reference count
LONG Reference; // +0x40 Reference count

// LCB flags
ULONG Flags; // +0x44 LCB flags
Expand Down Expand Up @@ -481,11 +483,11 @@ struct VCB {
// Condition flag for the Vcb.
VCB_CONDITION VcbCondition;

ULONG VcbCleanup;
ULONG VcbReference;
ULONG VcbUserReference;
ULONG VcbResidualReference;
ULONG VcbResidualUserReference;
LONG VcbCleanup;
LONG VcbReference;
LONG VcbUserReference;
LONG VcbResidualReference;
LONG VcbResidualUserReference;
ERESOURCE FlushResource;

// Link into queue of Vcb's in the CdData structure. We will create a union with
Expand Down Expand Up @@ -653,8 +655,8 @@ struct VCB {
uint16 minUDFWriteRev;
uint16 maxUDFWriteRev;
// file/dir counters for Mac OS
uint32 numFiles;
uint32 numDirs;
LONG numFiles;
LONG numDirs;
// VAT
uint32 InitVatCount;
uint32 VatCount;
Expand Down Expand Up @@ -692,7 +694,7 @@ struct VCB {
ULONG VDS2;
ULONG VDS2_Len;

ULONG Modified;
LONG Modified;

// System Stream Dir
PUDF_FILE_INFO SysSDirFileInfo;
Expand Down