sys: IRP_MJ_READ, IRP_MJ_WRITE

This commit is contained in:
Bill Zissimopoulos 2016-03-09 15:35:38 -08:00
parent 319a0087f8
commit 3939c096e9
2 changed files with 6 additions and 10 deletions

View File

@ -89,10 +89,8 @@ static NTSTATUS FspFsvolReadCached(
PAGED_CODE(); PAGED_CODE();
NTSTATUS Result; NTSTATUS Result;
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
FSP_FILE_NODE *FileNode = FileObject->FsContext; FSP_FILE_NODE *FileNode = FileObject->FsContext;
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset; LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset;
ULONG ReadLength = IrpSp->Parameters.Read.Length; ULONG ReadLength = IrpSp->Parameters.Read.Length;
#if 0 #if 0
@ -104,8 +102,6 @@ static NTSTATUS FspFsvolReadCached(
CC_FILE_SIZES FileSizes; CC_FILE_SIZES FileSizes;
BOOLEAN Success; BOOLEAN Success;
ASSERT(FileNode == FileDesc->FileNode);
/* try to acquire the FileNode Main shared */ /* try to acquire the FileNode Main shared */
Success = DEBUGTEST(90, TRUE) && Success = DEBUGTEST(90, TRUE) &&
FspFileNodeTryAcquireSharedF(FileNode, FspFileNodeAcquireMain, CanWait); FspFileNodeTryAcquireSharedF(FileNode, FspFileNodeAcquireMain, CanWait);
@ -113,7 +109,8 @@ static NTSTATUS FspFsvolReadCached(
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadCached, 0); return FspWqRepostIrpWorkItem(Irp, FspFsvolReadCached, 0);
/* trim ReadLength; the cache manager does not tolerate reads beyond file size */ /* trim ReadLength; the cache manager does not tolerate reads beyond file size */
ASSERT(FspTimeoutInfinity32 == FsvolDeviceExtension->VolumeParams.FileInfoTimeout); ASSERT(FspTimeoutInfinity32 ==
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.FileInfoTimeout);
FspFileNodeGetFileInfo(FileNode, &FileInfo); FspFileNodeGetFileInfo(FileNode, &FileInfo);
if ((UINT64)ReadOffset.QuadPart >= FileInfo.FileSize) if ((UINT64)ReadOffset.QuadPart >= FileInfo.FileSize)
{ {

View File

@ -90,10 +90,8 @@ static NTSTATUS FspFsvolWriteCached(
NTSTATUS Result; NTSTATUS Result;
BOOLEAN Retrying = 0 != FspIrpRequest(Irp); BOOLEAN Retrying = 0 != FspIrpRequest(Irp);
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
FSP_FILE_NODE *FileNode = FileObject->FsContext; FSP_FILE_NODE *FileNode = FileObject->FsContext;
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset; LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset;
ULONG WriteLength = IrpSp->Parameters.Write.Length; ULONG WriteLength = IrpSp->Parameters.Write.Length;
#if 0 #if 0
@ -108,8 +106,6 @@ static NTSTATUS FspFsvolWriteCached(
UINT64 WriteEndOffset; UINT64 WriteEndOffset;
BOOLEAN Success; BOOLEAN Success;
ASSERT(FileNode == FileDesc->FileNode);
/* should we defer the write? */ /* should we defer the write? */
Success = DEBUGTEST(90, TRUE) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying); Success = DEBUGTEST(90, TRUE) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying);
if (!Success) if (!Success)
@ -133,7 +129,8 @@ static NTSTATUS FspFsvolWriteCached(
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteCached, 0); return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteCached, 0);
/* compute new file size and allocation size */ /* compute new file size and allocation size */
ASSERT(FspTimeoutInfinity32 == FsvolDeviceExtension->VolumeParams.FileInfoTimeout); ASSERT(FspTimeoutInfinity32 ==
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.FileInfoTimeout);
FspFileNodeGetFileInfo(FileNode, &FileInfo); FspFileNodeGetFileInfo(FileNode, &FileInfo);
FileSizes.AllocationSize.QuadPart = FileInfo.AllocationSize; FileSizes.AllocationSize.QuadPart = FileInfo.AllocationSize;
FileSizes.FileSize.QuadPart = FileInfo.FileSize; FileSizes.FileSize.QuadPart = FileInfo.FileSize;
@ -146,6 +143,8 @@ static NTSTATUS FspFsvolWriteCached(
FileSizes.FileSize.QuadPart = WriteEndOffset; FileSizes.FileSize.QuadPart = WriteEndOffset;
if (FileSizes.FileSize.QuadPart > FileSizes.AllocationSize.QuadPart) if (FileSizes.FileSize.QuadPart > FileSizes.AllocationSize.QuadPart)
{ {
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
FspFsvolDeviceExtension(FsvolDeviceObject);
UINT64 AllocationUnit = FsvolDeviceExtension->VolumeParams.SectorSize * UINT64 AllocationUnit = FsvolDeviceExtension->VolumeParams.SectorSize *
FsvolDeviceExtension->VolumeParams.SectorsPerAllocationUnit; FsvolDeviceExtension->VolumeParams.SectorsPerAllocationUnit;
FileSizes.AllocationSize.QuadPart = (FileSizes.FileSize.QuadPart + AllocationUnit - 1) FileSizes.AllocationSize.QuadPart = (FileSizes.FileSize.QuadPart + AllocationUnit - 1)