| 199 | } |
| 200 | |
| 201 | VOID |
| 202 | Ext2UnlinkFcb(IN PEXT2_FCB Fcb) |
| 203 | { |
| 204 | PEXT2_VCB Vcb = Fcb->Vcb; |
| 205 | PEXT2_MCB Mcb; |
| 206 | |
| 207 | ExAcquireResourceExclusiveLite(&Vcb->McbLock, TRUE); |
| 208 | Mcb = Fcb->Mcb; |
| 209 | |
| 210 | DEBUG(DL_INF, ("Ext2FreeFcb: Fcb (%p) to be unlinked: %wZ.\n", |
| 211 | Fcb, Mcb ? &Mcb->FullName : NULL)); |
| 212 | |
| 213 | if ((Mcb != NULL) && |
| 214 | (Mcb->Identifier.Type == EXT2MCB) && |
| 215 | (Mcb->Identifier.Size == sizeof(EXT2_MCB))) { |
| 216 | |
| 217 | ASSERT (Mcb->Fcb == Fcb); |
| 218 | if (IsMcbSpecialFile(Mcb) || |
| 219 | IsFileDeleted(Mcb)) { |
| 220 | |
| 221 | ASSERT(!IsRoot(Fcb)); |
| 222 | Ext2RemoveMcb(Vcb, Mcb); |
| 223 | Mcb->Fcb = NULL; |
| 224 | |
| 225 | Ext2UnlinkMcb(Vcb, Mcb); |
| 226 | Ext2DerefMcb(Mcb); |
| 227 | Ext2LinkHeadMcb(Vcb, Mcb); |
| 228 | |
| 229 | } else { |
| 230 | Mcb->Fcb = NULL; |
| 231 | Ext2DerefMcb(Mcb); |
| 232 | } |
| 233 | Fcb->Mcb = NULL; |
| 234 | } |
| 235 | |
| 236 | ExReleaseResourceLite(&Vcb->McbLock); |
| 237 | } |
| 238 | |
| 239 | VOID |
| 240 | Ext2FreeFcb (IN PEXT2_FCB Fcb) |
no test coverage detected