[haiku-commits] Change in haiku[master]: ext2: check volume state when mounting

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 25 Jun 2022 07:50:09 +0000

From Jérôme Duval <jerome.duval@xxxxxxxxx>:

Jérôme Duval has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/5400 ;)


Change subject: ext2: check volume state when mounting
......................................................................

ext2: check volume state when mounting

we deny mounting read/write when not clean or with errors.
---
M src/add-ons/kernel/file_systems/ext2/Volume.cpp
M src/add-ons/kernel/file_systems/ext2/ext2.h
2 files changed, 13 insertions(+), 3 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/00/5400/1

diff --git a/src/add-ons/kernel/file_systems/ext2/Volume.cpp 
b/src/add-ons/kernel/file_systems/ext2/Volume.cpp
index dff0520..a98b572 100644
--- a/src/add-ons/kernel/file_systems/ext2/Volume.cpp
+++ b/src/add-ons/kernel/file_systems/ext2/Volume.cpp
@@ -168,6 +168,16 @@
        if (!_VerifySuperBlock())
                return B_ERROR;

+       if ((fSuperBlock.State() & EXT2_FS_STATE_VALID) == 0
+               || (fSuperBlock.State() & EXT2_FS_STATE_ERROR) != 0) {
+               if (!IsReadOnly()) {
+                       FATAL("Volume::Mount(): can't mount R/W, volume not 
clean\n");
+                       return status;
+               } else {
+                       FATAL("Volume::Mount(): warning: volume not clean\n");
+               }
+       }
+
        // initialize short hands to the superblock (to save byte swapping)
        fBlockShift = fSuperBlock.BlockShift();
        if (fBlockShift < 10 || fBlockShift > 16)
diff --git a/src/add-ons/kernel/file_systems/ext2/ext2.h 
b/src/add-ons/kernel/file_systems/ext2/ext2.h
index 3b4e4f0..a307bb8 100644
--- a/src/add-ons/kernel/file_systems/ext2/ext2.h
+++ b/src/add-ons/kernel/file_systems/ext2/ext2.h
@@ -171,9 +171,9 @@

 #define EXT2_MAX_REVISION              EXT2_DYNAMIC_REVISION

-#define EXT2_FS_STATE_VALID            1       // File system was cleanly 
unmounted
-#define EXT2_FS_STATE_ERROR            2       // File system has errors
-#define EXT2_FS_STATE_ORPHAN   3       // Orphans are being recovered
+#define EXT2_FS_STATE_VALID            0x1     // File system was cleanly 
unmounted
+#define EXT2_FS_STATE_ERROR            0x2     // File system has errors
+#define EXT2_FS_STATE_ORPHAN   0x4     // Orphans are being recovered

 // compatible features
 #define EXT2_FEATURE_DIRECTORY_PREALLOCATION   0x0001

--
To view, visit https://review.haiku-os.org/c/haiku/+/5400
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ie0188319618d9d8e7199b308c007fbaeacaed87c
Gerrit-Change-Number: 5400
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: ext2: check volume state when mounting - Gerrit