[EXT2]
[reactos.git] / reactos / drivers / filesystems / ext2 / src / flush.c
index 3359a11..d57a3b1 100644 (file)
@@ -81,14 +81,21 @@ Ext2FlushVolume (
 
     DEBUG(DL_INF, ( "Ext2FlushVolume: Flushing Vcb ...\n"));
 
-    /* discard buffer_headers for group_desc */
-    Ext2DropGroup(Vcb);
-
     ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE);
     ExReleaseResourceLite(&Vcb->PagingIoResource);
 
+    /* acquire gd lock to avoid gd/bh creation */
+    ExAcquireResourceExclusiveLite(&Vcb->sbi.s_gd_lock, TRUE);
+
+    /* discard buffer_headers for group_desc */
+    Ext2DropBH(Vcb);
+
+    /* do flushing */
     CcFlushCache(&(Vcb->SectionObject), NULL, 0, &IoStatus);
 
+    /* release gd lock */
+    ExReleaseResourceLite(&Vcb->sbi.s_gd_lock);
+
     return IoStatus.Status;
 }