History log of /haiku/src/add-ons/kernel/file_systems/ext2/Volume.h
Revision Date Author Comments
# d9e730c8 24-Jul-2022 PulkoMandy <pulkomandy@pulkomandy.tk>

libroot: generate a name for nameless volumes

Generate a name indicating the volume size and filesystem.

Remove code that was doing that or similar things in various
filesystems.

Change-Id: I6b993735e58cdfaf1f19af575e918614c7fe5679
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5381
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
Reviewed-by: John Scipione <jscipione@gmail.com>


# 8d9eff58 08-May-2020 Adrien Destugues <pulkomandy@pulkomandy.tk>

ext2: report ext2/3/4 fs name depending on available features

Should help with #12157.

Change-Id: I7ea0310957c06606bc66a289afe8c3a78540a803
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2610
Reviewed-by: Kyle Ambroff-Kao <kyle@ambroffkao.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# ce4e12ca 10-Oct-2018 Jérôme Duval <jerome.duval@gmail.com>

ext2: implements metadata_csum and 64bit features.

* Some PVS-Studio warnings are removed.
* fixes hardlink count in source and destination folders on rename.
* tested with fstorture and fsx (one job).
* add new definitions.
* import crc32c code from BSD.
* add some consistency checks at mount.
* DirectoryIterator::_AllocateBestEntryInBlock(), the direntry is checked for
consistency before using it, which should avoid crashing on bad data.
* DirectoryIterator::_SplitIndexedBlock(): the dotdot entry length should
include the dot and dotdot entries length.

Change-Id: I0f80d73b65b1ae6ddb2e746a6f85ef806f23dbb0
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1735
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 823a2382 18-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* support for setting volume label (bug #7100).
* minor cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40243 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d482c34e 05-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* added flex group, dirnlink and gdtchecksum features for ext4.
* I reused crc_table.cpp from the UDF filesystem and switched it to have the reversed algorithm,
then generated the table in CRCTable.cpp
* added a binary search for extent tree leaves.
* fixed a check in InodeAllocator::New().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40129 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 45af882d 18-Dec-2010 Jérôme Duval <korli@users.berlios.de>

* added fsblock_t and fileblock_t definitions, used them when needed.
* validate fBlockShift in superblock.
* Volume::AllocateBlocks() now uses an absolute fsblock instead of a blockgroup related fsblock.
* AllocationBlockGroup now provides absolute fsblock values.
* added support for extents feature: ExtentStream class is the equivalent for DataStream class for extent operations.
The extent tree implementation is very basic, should work for normal growing/shrinking
operations, but not for sparse files. When enlarging a file and extent tree is full,
the root is moved in a new block and a new level is added on top. Extents can usually
be extended when adjacent blocks are allocated. Shrinking happens by removing leafs
one after another.
* removed empty IndexedDirectoryIterator.*


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb7aa0da 04-Nov-2010 Jérôme Duval <korli@users.berlios.de>

Volume: don't use a block allocator when mounting readonly.
BitmapBlock: also use file system blocks, current type is off_t. Also added more trace.
BlockAllocator: added an assert and more trace


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39302 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d8772e0c 30-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added some support for 64bit feature: extended struct ext2_block_group, block number types changed from uint32 to off_t
* added error traces, asserts
* BitmapBlock::CheckUnmarked() and CheckMarked() computed a wrong remainingBits and mask


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39203 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7babd0d5 24-Oct-2010 Jérôme Duval <korli@users.berlios.de>

added large files feature support


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39120 a95241bf-73f2-0310-859d-f6bbb57e9c96


# de66992b 11-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added support for huge_file feature, untested (need a >2TB file)
* actually checks for readonly features if mounting read-write
* don't use a journal when mounting readonly
* DataStream::_BlocksNeeded(): in case of double or triple indirects,
compute the additional blocks needed using the difference between the
old and new indirects blocks. This was resulting in a bad NumBlocks on an inode
* BitmapBlock: mark methods missed an iteration when the startingBit was zero.
Some blocks were then allocated two times (at most 32 for each allocation run).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38950 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a1b0ec30 07-Sep-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho (aka jjvf): this is the result of his GSoC assignment "Implement ext2/3 Read and Write Support for Haiku".
* Tested and checked most features and fs operations, while passing successfully the Linux fsck. Though the implementation still needs more testing and is to be used with
caution, it's better in my mind to have the code committed now given the size of the patch.
* Code style isn't extensively checked but is mostly OK. Code review is welcome.
Some notes from Janito:
* Sparse files aren't supported and hard links aren't supported. Write attributes methods aren't activated nor tested.
* Journaling needs more testing to make sure it behaves in a compatible way to Ext3, and support for the different modes hasn't been implemented (due to the block
and file cache incompatibility). Correct revoke management is also lacking, as is proper management of the superblock state and copies and block group copies.
* The code is partly based and inspired by the BFS implementation. Author information might need to be fixed.

I'd like to congratulate and thank Janito for his hard work to bring the implementation to the current state. I hope he'll keep on maintaining it and become a regular
contributor/committer.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38573 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 919f9c41 28-Jun-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho with fixes by myself: Ext3 Indexed Directory Lookup (as part of GSOC).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37295 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 17aad616 19-Apr-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho (bug #5706): limit the Inode ID to the maximum number of Inodes. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36358 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 82e4f70d 13-Jan-2010 Axel Dörfler <axeld@pinc-software.de>

* Volume::Unmount() never put the root node, and never deleted the volume's
block cache.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35069 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 431a51cc 14-Mar-2009 Axel Dörfler <axeld@pinc-software.de>

* Added the new incompatible features of ext4.
* Now correctly only check for the incompatible features we do understand,
not for the ones we don't. Ie. we won't mount ext4 partitions anymore that
are using extents.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29510 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c4d5cef0 03-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Now prints the disk size as part of the default name so that different
volumes are easier to differentiate.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26241 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 13de3d07 02-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Fixed wrong group block offset computation: the
ext2_super_block::first_data_block must be used; the superblock offset
doesn't matter if the block size is greater than 2KB.
* Fixed block access beyond the 4GB limit - we need to cast the block to
a 64 bit type in ext2_get_file_map() before shifting it.
* Tested with various larger ext3 disks, and everything seems to work fine.
* Added some optional debug output.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26213 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 63db34c8 01-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Implemented a read-only ext2 file system.
* It's not yet complete, doesn't support some ext2 stuff (like files over 4 GB),
and might have some other bugs (I only tested it with a single 20 MB ext2
image).
* To have a read/write ext2 file system, it would probably make more sense to
port GNU sources (like ext2fs lib), and use that. But a small read-only ext2
file sytem doesn't hurt, I think, and I don't know if ext2fs lib would be
feasible for kernel use (porting the file system from Linux directly would
also be an alternative, but probably more work).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26187 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 823a23829a5f584fbf019f74fa060ec7d3327418 18-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* support for setting volume label (bug #7100).
* minor cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40243 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d482c34e49ef2163e25b86cf61eee008c46fc50c 05-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* added flex group, dirnlink and gdtchecksum features for ext4.
* I reused crc_table.cpp from the UDF filesystem and switched it to have the reversed algorithm,
then generated the table in CRCTable.cpp
* added a binary search for extent tree leaves.
* fixed a check in InodeAllocator::New().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40129 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 45af882d0698d575ec1b4883a8ebff276c9519d8 18-Dec-2010 Jérôme Duval <korli@users.berlios.de>

* added fsblock_t and fileblock_t definitions, used them when needed.
* validate fBlockShift in superblock.
* Volume::AllocateBlocks() now uses an absolute fsblock instead of a blockgroup related fsblock.
* AllocationBlockGroup now provides absolute fsblock values.
* added support for extents feature: ExtentStream class is the equivalent for DataStream class for extent operations.
The extent tree implementation is very basic, should work for normal growing/shrinking
operations, but not for sparse files. When enlarging a file and extent tree is full,
the root is moved in a new block and a new level is added on top. Extents can usually
be extended when adjacent blocks are allocated. Shrinking happens by removing leafs
one after another.
* removed empty IndexedDirectoryIterator.*


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb7aa0dafb0bba235428b5360e8e83a4f1203f4b 04-Nov-2010 Jérôme Duval <korli@users.berlios.de>

Volume: don't use a block allocator when mounting readonly.
BitmapBlock: also use file system blocks, current type is off_t. Also added more trace.
BlockAllocator: added an assert and more trace


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39302 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d8772e0c207a59d026580f29e2390d4030d1bec6 30-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added some support for 64bit feature: extended struct ext2_block_group, block number types changed from uint32 to off_t
* added error traces, asserts
* BitmapBlock::CheckUnmarked() and CheckMarked() computed a wrong remainingBits and mask


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39203 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7babd0d5ea84ca13c0101f6a1b1e1c4d3c82efee 24-Oct-2010 Jérôme Duval <korli@users.berlios.de>

added large files feature support


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39120 a95241bf-73f2-0310-859d-f6bbb57e9c96


# de66992b72e683607689b6057760367bd9c78282 11-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added support for huge_file feature, untested (need a >2TB file)
* actually checks for readonly features if mounting read-write
* don't use a journal when mounting readonly
* DataStream::_BlocksNeeded(): in case of double or triple indirects,
compute the additional blocks needed using the difference between the
old and new indirects blocks. This was resulting in a bad NumBlocks on an inode
* BitmapBlock: mark methods missed an iteration when the startingBit was zero.
Some blocks were then allocated two times (at most 32 for each allocation run).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38950 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a1b0ec30977df3c4f608eaac97ddc03bf9d3b255 07-Sep-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho (aka jjvf): this is the result of his GSoC assignment "Implement ext2/3 Read and Write Support for Haiku".
* Tested and checked most features and fs operations, while passing successfully the Linux fsck. Though the implementation still needs more testing and is to be used with
caution, it's better in my mind to have the code committed now given the size of the patch.
* Code style isn't extensively checked but is mostly OK. Code review is welcome.
Some notes from Janito:
* Sparse files aren't supported and hard links aren't supported. Write attributes methods aren't activated nor tested.
* Journaling needs more testing to make sure it behaves in a compatible way to Ext3, and support for the different modes hasn't been implemented (due to the block
and file cache incompatibility). Correct revoke management is also lacking, as is proper management of the superblock state and copies and block group copies.
* The code is partly based and inspired by the BFS implementation. Author information might need to be fixed.

I'd like to congratulate and thank Janito for his hard work to bring the implementation to the current state. I hope he'll keep on maintaining it and become a regular
contributor/committer.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38573 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 919f9c41da4d06c2ac637035adcfb62501d5dc88 28-Jun-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho with fixes by myself: Ext3 Indexed Directory Lookup (as part of GSOC).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37295 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 17aad616d2e30fb17ae710ded5daa0ea2ba76192 19-Apr-2010 Jérôme Duval <korli@users.berlios.de>

Patch from Janito Ferreira Filho (bug #5706): limit the Inode ID to the maximum number of Inodes. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36358 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 82e4f70df1cee196def51bbe9de96bb87add2f16 13-Jan-2010 Axel Dörfler <axeld@pinc-software.de>

* Volume::Unmount() never put the root node, and never deleted the volume's
block cache.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35069 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 431a51cc9143c5abf87efa933964f9f8ea37045f 14-Mar-2009 Axel Dörfler <axeld@pinc-software.de>

* Added the new incompatible features of ext4.
* Now correctly only check for the incompatible features we do understand,
not for the ones we don't. Ie. we won't mount ext4 partitions anymore that
are using extents.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29510 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c4d5cef0c6efb959ec8ae8a3cc3d47ed13cc0223 03-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Now prints the disk size as part of the default name so that different
volumes are easier to differentiate.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26241 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 13de3d07679ac012dcb2f247d615073dd8f56c2f 02-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Fixed wrong group block offset computation: the
ext2_super_block::first_data_block must be used; the superblock offset
doesn't matter if the block size is greater than 2KB.
* Fixed block access beyond the 4GB limit - we need to cast the block to
a 64 bit type in ext2_get_file_map() before shifting it.
* Tested with various larger ext3 disks, and everything seems to work fine.
* Added some optional debug output.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26213 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 63db34c816c7067b251f03c50286d594ceac3cc2 01-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

* Implemented a read-only ext2 file system.
* It's not yet complete, doesn't support some ext2 stuff (like files over 4 GB),
and might have some other bugs (I only tested it with a single 20 MB ext2
image).
* To have a read/write ext2 file system, it would probably make more sense to
port GNU sources (like ext2fs lib), and use that. But a small read-only ext2
file sytem doesn't hurt, I think, and I don't know if ext2fs lib would be
feasible for kernel use (porting the file system from Linux directly would
also be an alternative, but probably more work).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26187 a95241bf-73f2-0310-859d-f6bbb57e9c96