| 187 | } |
| 188 | |
| 189 | VOID |
| 190 | Ext2QueueCloseRequest (IN PEXT2_IRP_CONTEXT IrpContext) |
| 191 | { |
| 192 | ASSERT(IrpContext); |
| 193 | ASSERT((IrpContext->Identifier.Type == EXT2ICX) && |
| 194 | (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT))); |
| 195 | |
| 196 | if (IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE)) { |
| 197 | |
| 198 | if (IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_FILE_BUSY)) { |
| 199 | Ext2Sleep(500); /* 0.5 sec*/ |
| 200 | } else { |
| 201 | Ext2Sleep(50); /* 0.05 sec*/ |
| 202 | } |
| 203 | |
| 204 | } else { |
| 205 | |
| 206 | SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); |
| 207 | SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE); |
| 208 | |
| 209 | IrpContext->Fcb = (PEXT2_FCB) IrpContext->FileObject->FsContext; |
| 210 | IrpContext->Ccb = (PEXT2_CCB) IrpContext->FileObject->FsContext2; |
| 211 | } |
| 212 | |
| 213 | ExInitializeWorkItem( |
| 214 | &IrpContext->WorkQueueItem, |
| 215 | Ext2DeQueueCloseRequest, |
| 216 | IrpContext); |
| 217 | |
| 218 | ExQueueWorkItem(&IrpContext->WorkQueueItem, DelayedWorkQueue); |
| 219 | } |
| 220 | |
| 221 | VOID |
| 222 | Ext2DeQueueCloseRequest (IN PVOID Context) |