MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2FlushFile

Function Ext2FlushFile

Ext4Fsd/flush.c:53–105  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

51}
52
53NTSTATUS
54Ext2FlushFile (
55 IN PEXT2_IRP_CONTEXT IrpContext,
56 IN PEXT2_FCB Fcb,
57 IN PEXT2_CCB Ccb
58)
59{
60 IO_STATUS_BLOCK IoStatus = {0};
61
62 ASSERT(Fcb != NULL);
63 ASSERT((Fcb->Identifier.Type == EXT2FCB) &&
64 (Fcb->Identifier.Size == sizeof(EXT2_FCB)));
65
66 __try {
67
68 /* do nothing if target fie was deleted */
69 if (FlagOn(Fcb->Flags, FCB_DELETE_PENDING)) {
70 IoStatus.Status = STATUS_FILE_DELETED;
71 __leave;
72 }
73
74 /* update timestamp and achieve attribute */
75 if (Ccb != NULL) {
76
77 if (!IsFlagOn(Ccb->Flags, CCB_LAST_WRITE_UPDATED)) {
78
79 LARGE_INTEGER SysTime;
80 KeQuerySystemTime(&SysTime);
81
82 Fcb->Inode->i_mtime = Ext2LinuxTime(SysTime);
83 Fcb->Mcb->LastWriteTime = Ext2NtTime(Fcb->Inode->i_mtime);
84 Ext2SaveInode(IrpContext, Fcb->Vcb, Fcb->Inode);
85 }
86 }
87
88 if (IsDirectory(Fcb)) {
89 IoStatus.Status = STATUS_SUCCESS;
90 __leave;
91 }
92
93 DEBUG(DL_INF, ( "Ext2FlushFile: Flushing File Inode=%xh %S ...\n",
94 Fcb->Inode->i_ino, Fcb->Mcb->ShortName.Buffer));
95
96 CcFlushCache(&(Fcb->SectionObject), NULL, 0, &IoStatus);
97 ClearFlag(Fcb->Flags, FCB_FILE_MODIFIED);
98
99 } __finally {
100
101 /* do cleanup here */
102 }
103
104 return IoStatus.Status;
105}
106
107NTSTATUS
108Ext2FlushFiles(

Callers 3

Ext2CleanupFunction · 0.85
Ext2FlushFilesFunction · 0.85
Ext2FlushFunction · 0.85

Calls 3

Ext2LinuxTimeFunction · 0.85
Ext2NtTimeFunction · 0.85
Ext2SaveInodeFunction · 0.85

Tested by

no test coverage detected