History log of /haiku/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp
Revision Date Author Comments
# 9d972e32 24-Nov-2023 Adrien Destugues <adrien.destugues@opensource.viveris.fr>

ext2: do not use "extfs" as a short name.

The original Linux extfs was short lived (less than a year) and is long
forgotten. Still, to avoid any confusion, it's better to refer to our
filesystem as ext4 (even if it is backwards compatible with versions 2
and 3).

Mention all 3 versions in the "pretty name" to be even clearer about
this.

Previously this was called "ext2" but people then assume that it does
not handle the later upgrades in versions 3 and 4 (which makes sense).


# e1480b40 23-Nov-2023 Augustin Cavalier <waddlesplash@gmail.com>

ext2: Adjust short and pretty names to just be "ext" and not "ext2".

The filesystem name returned by read_fs_info will be correct (i.e.
returning "ext3" or "ext4" as appropriate), but some things just list
the filesystem driver's name, which can cause confusion.

Change-Id: Ic4acf497fc5db5c167131aeb323b45eeb78594d6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7126
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# 2d005cca 03-Nov-2023 Jérôme Duval <jerome.duval@gmail.com>

ext2: implement set_flags

needed for fcntl(F_SETFL)

Change-Id: I2e71bcf70d794f690985e8c26ae1b0be51a0e590
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7094
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# 6dd87330 29-Oct-2023 Jérôme Duval <jerome.duval@gmail.com>

ext2: ext2_rename(): if the target exists, it should be unlinked.

* the target inode would still exist, unreferenced.
* also remove from entry_cache.
* this fixes fsck complaining about unreferenced inodes.

Change-Id: I4d48d6bf89bdd37d366da0ae4795e42bcc0532d9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7078
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 35b40030 27-Jan-2023 Augustin Cavalier <waddlesplash@gmail.com>

file_systems/fs_ops_support: Add open_mode_to_access.

This is duplicated across multiple filesystems, and could probably be
used in more still.

Adjusted only BFS, EXT2, and NTFS in this commit, as they are the ones
which make use of fs_ops_support.h already and thus need to be modified
to avoid duplicate-definition errors.

Also tweak next_dirent to support being built under fs_shell.
(Possibly we should define ASSERT there, though?)


# a4f09ce9 09-Sep-2022 Jérôme Duval <jerome.duval@gmail.com>

ext2: align dirent struct pointers with next_dirent()

Change-Id: Iaf102916d77f077c48348e2d1e7deff8f37d1232
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5634
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Reviewed-by: David Karoly <karolyd577@gmail.com>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# cf5f513b 27-Apr-2022 Jérôme Duval <jerome.duval@gmail.com>

file_systems: add entry_cache_(add/missing) in btrfs,ext2,exfat lookup methods.

Change-Id: I77857421a65f371bc885f1d4eb66ef2ab4376e56
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5252
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 30294b6d 20-Apr-2022 Jérôme Duval <jerome.duval@gmail.com>

ext2: use st_blocks from the disk inode structure

* this lets cp from coreutils use lseek to find the data chunks in a
sparse file.
* fix endian conversion macro used for num_blocks_high

Change-Id: I221d6316002b1c491ae987aeef3f25e8721b5ab9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5218
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# 711e2dc0 01-Dec-2021 Augustin Cavalier <waddlesplash@gmail.com>

Adjust all struct dirent creations (again), this time to use offsetof().

The dirent struct is not packed, so offsetof(dirent, d_name) != sizeof(dirent).
Thus in order not to waste the alignment bytes (which are significant,
on x86_64 at least, sizeof(dirent)==32, but offsetof(...)=26.)

This is also the most portable way to handle things, and should
work just fine in cross-platform code that has a non-zero-sized d_name.


# 9d242fb9 18-Nov-2021 Augustin Cavalier <waddlesplash@gmail.com>

file_systems & Tracker: Do not assume sizeof(dirent) contains 1 byte for the name.

At present, it does, but that is an oddity we have preserved from BeOS
that the next commit is going to remove. (This commit thus wastes 1 byte
without the following one.)

Most changes are pretty straightforward: only a +1 is needed,
and a few removed from sizing calculations. Some filesystems like UDF
originally passed back the length with the \0 included, so they have
been adjusted further. UFS2 had some other sizing problems which are also
corrected in this commit.


# 1fb138bf 12-Sep-2021 Franck LeCodeur <cassisian@gmail.com>

ext2: Fix build warnings, enable Werror

This fix is for ticket #9460 to enable -Werror for ext2.

- Unused functions are removed.

- The ASSERT macro was redefining a different ASSERT macro from the included files. Now it gets undefined first.

- One comparison side was cast to ptrdiff_t because X86_gcc2 complained about signed/unsigned comparison

Change-Id: Ib0caade2f83de34c04acc0fc6aa5ed50712daec4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4453
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# ab57ee42 04-Dec-2020 X512 <danger_mail@list.ru>

fix build after MethodDeleter interface change

Change-Id: Iadb9e37772fd6588636085944c1455249ac0f926
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3457
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 602051e8 09-Nov-2020 Jérôme Duval <jerome.duval@gmail.com>

ext2: implement FIOSEEKDATA and FIOSEEKHOLE ioctl commands

Change-Id: I5f267620e904fe7bb294a4864a8ed017d27a7e68
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3387
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# f9b218aa 26-May-2020 Jérôme Duval <jerome.duval@gmail.com>

file_systems: fs_read_link() doesn't use a user buffer

introduced in hrev26728 and hrev54107.

Change-Id: I3e98d54e829bcce559c43a8ee1abe4d889c0a571
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2819
Reviewed-by: waddlesplash <waddlesplash@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>


# e1b7c1c7 19-Apr-2020 Kyle Ambroff-Kao <kyle@ambroffkao.com>

storage/SymLink: Fix Be API regression in ReadLink

After this patch, "UnitTester BSymLink" passes.

BSymLink::ReadLink() in BeOS would always return the length of the
link unless an error occurred. Before this patch, Haiku instead seemed
to emulate posix readlink() behavior, returning the number of bytes
copied into the output buffer.

BeOS also did not guarantee that the string written into the output
buffer is NULL terminated if the output buffer cannot contain the
entire link contents, but the Haiku implementation does since it is is
a basic safety issue.

This patch fixes this and updates the Haiku API docs to describe the
behavior explicitly.

Fixing this required changing behavior in bfs_read_link, which
required changes in many more places.

docs/user/storage/SymLink.dox:
src/kits/storage/SymLink.cpp:
* Don't return B_BUFFER_OVERFLOW if the provided buffer is not large
enough to hold the link contents.
* Update documentation to clearly describe behavior.

src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp:
* Change bfs_read_link() to always return the link length. This is
called by common_read_link in the VFS, which is called by
_kern_read_link().

src/add-ons/kernel/file_systems/btrfs/kernel_interface.cpp:
src/add-ons/kernel/file_systems/exfat/kernel_interface.cpp:
src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp:
src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp:
src/add-ons/kernel/file_systems/netfs/client/netfs.cpp:
src/add-ons/kernel/file_systems/nfs/nfs_add_on.c:
src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp:
src/add-ons/kernel/file_systems/reiserfs/Iterators.cpp:
src/add-ons/kernel/file_systems/reiserfs/Iterators.h:
src/add-ons/kernel/file_systems/reiserfs/Volume.cpp:
src/add-ons/kernel/file_systems/reiserfs/Volume.h:
* Update the implementation of read_link for these filesystems. Some
of them were incorrect, and some had just copied the posix behavior of
bfs from before this patch.
* Use user_memcpy in ext2_read_link()
* Use user_memcpy in nfs fs_read_link()
* Use user_memcpy in reiserfs StreamReader::_ReadIndirectItem and
StreamReader::_ReadDirectItem
* Remove unused method Volume::ReadObject in reiserfs.

src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp:
src/add-ons/kernel/file_systems/packagefs/package_links/PackageLinkSymlink.cpp:
* Update UnpackingLeafNode::ReadSymlink and
PackageSymLink::ReadSymLink() to set the bufferSize out parameter to
the symlink length. Both of these are called by
packagefs_read_symlink.
* Use user_memcpy

src/add-ons/kernel/file_systems/netfs/client/netfs.cpp:
* netfs seems mostly unimplemented. Added a FIXME note for future
implementers so that they know to implement the correct behavior.

src/system/libroot/posix/unistd/link.c:
* readlinkat() was just wrapping _kern_read_link() because before this
patch it had expected posix behavior. But now it does not, so we
need to return the number of bytes written to the output
buffer.

src/build/libroot/fs.cpp:
* Update _kern_read_link() in the compatibility code to emulate the
Haiku behavior on the host system. This is done by using an
intermediate buffer that is guaranteed to fit the link contents and
returning its length. The intermediate buffer is copied into the
output buffer until there is no more room.

src/tests/kits/storage/SymLinkTest.cpp:
* This patch also resolves some test failures similar to those
resolved in ee8cf35f0 which fixed tests for BNode. The tests were
failing because Haiku's error checking is just better.

BeOS allowed constructing a BSymLink with BSymLink(BDirectory*,
const char*) with the entry name of "". The same is true of the
equivilant SetTo() method. The BSymLink object will appear valid
until you attempt to use it by, for example, calling the ReadLink
method, which will return B_BAD_VALUE.

Haiku does a more appropriate thing and returns B_ENTRY_NOT_FOUND,
for this constructor and the equivilant SetTo(BDirectory*, const
char*) method. This patch fixes these test assertions to match Haiku
behavior.

docs/develop/file_systems/overview.txt:
* Add notes for future filesystem driver implementers to call this
mistake when implementing fs_vnode_ops::read_symlink.

docs/user/drivers/fs_interface.dox:
* Fix documentation for fs_vnode_ops::read_symlink

Change-Id: I8bcb8b2a0c9333059c84ace15844c32d4efeed9d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2502
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>


# 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>


# cd6365c7 17-May-2018 Jérôme Duval <jerome.duval@gmail.com>

style fixes


# 6f7fc220 07-Mar-2016 Axel Dörfler <axeld@pinc-software.de>

NodeMonitor: Added B_WATCH_CHILDREN flag.

* Added a directory argument for notify_{stat/attribute}_changed().
* This allows to watch only a directory, and get the notifications for
all of its files, not just add/remove entry notifications.


# 26aef3ac 11-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

ext2: Fix enabling/disabling the file cache

* Inode:
- Rename {Enable,Disable}FileCache() to {Create,Delete}FileCache()
and IsFileCacheDisabled() to HasFileCache(), since that is what they
actually do. DeleteFileCache() now also sets the attributes to NULL,
which makes fCached superfluous.
- Introduce {Enable,Disable}FileCache(), which actually enable/disable
the file cache. Use those methods for handling O_NOCACHE.
* ext2_free_cookie(): Reenable the file cache in case of O_NOCACHE.

Fixes crash when O_NOCACHE was used, since the file cache was deleted
without clearing the attribute and Inode::ReadAt() would use the deleted
object afterward.


# 05826ec7 11-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

ext2_get_file_map(): Fix broken termination condition


# a130bab3 08-May-2013 Jérôme Duval <jerome.duval@gmail.com>

ext2: fixes 64 bit warnings


# c33b645d 02-May-2013 Jerome Duval <jerome.duval@gmail.com>

ext2: Return more than a single dirent at a time in ext2_read_dir().

* similar to what mmlr did in hrev45575 for bfs.


# a735bdeb 31-Oct-2011 Michael Lotz <mmlr@mlotz.ch>

Align all filesystem relevant places to use B_UNSUPPORTED for unsupported
instead of a mix of B_NOT_SUPPORTED and B_UNSUPPORTED. This allows checking for
a specific error code. Probably one of those should be phased out...


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


# f53ec236 02-Mar-2011 Jérôme Duval <korli@users.berlios.de>

changed ioctl hook return code when the opcode isn't supported.


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


# 886d6531 31-Jan-2011 Jérôme Duval <korli@users.berlios.de>

forgot to add B_FS_HAS_ATTR when adding attribute support


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


# 85f15b4b 24-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* uses std::nothrow when calling new.
* fix an UDF reference.


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


# 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


# 230b9a69 20-Dec-2010 Jérôme Duval <korli@users.berlios.de>

resource leaks CID 5711, 5712, 5713, 5714


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39902 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


# f7218c21 10-Dec-2010 Jérôme Duval <korli@users.berlios.de>

* HTree::Lookup() was trying to find the entry .. through indexed search instead of linear search. Should fix #6305
* DirectoryIterator::FindEntry() now takes name length in account for name comparison.
* cleanup


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


# ea75a051 09-Nov-2010 Axel Dörfler <axeld@pinc-software.de>

* Applied patch by Rohit Yadav that fixes #6750 for ext2. Thanks a lot!
* Fixed warning in Inode::WriteAt(), but left warnings in kernel_interface.cpp
in there; I guess that's work in progress (although having the io hook would
be nice).


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


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

DirectoryIterator changes:
* RemoveEntry(): set inode id to zero when reaching the end of block
* FindEntry(): keep on searching if Get() returns B_BAD_DATA
* added _Offset() based on fLogicalBlock and fDisplacement
* Next(): keep on searching when inode id is zero; also when entry length is zero, keep on with next block
* added GetNext() to get the next valid entry.
* Get(): now returns B_BAD_DATA on a zero length or inode id.


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


# 82b3bdd4 06-Nov-2010 Jérôme Duval <korli@users.berlios.de>

Stop the journal on Sync(), start the journal when a transaction is written. This helps with fs state on shutdown.


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


# 583f39e9 31-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* switched more uint32 to off_t for 64bit support
* added error messages in InodeAllocator, Inode
* if BlockAllocator can't initialize, don't fail completely but switch to readonly
* fixed a bug in FindNextMarked() for bitmaps with a length non multiple of 32
* Inode::FindBlock() now returns an optional block_run length, useful for get_file_map()
* added flag for Inode for extents


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39234 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


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

added B_DISK_SYSTEM_SUPPORTS_WRITING flag on ext2 disk system, this is required to have mount_server ask whether mounting should be done readwrite or readonly


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


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

ext3 inodes whose size is at least 256 bytes can also contain attributes (like smalldata for bfs).
We now use the Attribute class from bfs (instead of AttributeIterator) to manage small data and block attributes, though it's still readonly.


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


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

added a file system call preallocate() as described in #6285, currently unused


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


# 6bfb10d3 13-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added support for extra inode attributes in volumes with an inodesize of 256 or more:
this brings nanoseconds for access, change and modification times, and also brings creation time.
* switched off some debug output
* HTreeEntryIterator: fCount can equal fLimit.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38964 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


# 2365cde2 11-Apr-2010 François Revol <revol@free.fr>

- cleanup,
- fix copyright,
- disable tracing,
- add support for reading attributes. The current naming is not final as I'm actually experimenting with it.


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


# b026d219 11-Apr-2010 François Revol <revol@free.fr>

Partial implementation for attribute support. Currently listattr successfully lists attributes on files.


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


# 425cb3d7 09-Sep-2009 Oliver Tappe <zooey@hirschkaefer.de>

* revert r32999 and adjusted each filesystem to return B_NOT_A_DIRECTORY in
its open_dir() implementation instead (as suggested by Ingo).
-alphabranch (it's only a cleanup)


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


# 53ef70a0 29-Jul-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Patch by Bryce Groff: Fixed return values of the identify() hook.


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


# 49004dc7 19-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not
needed at all when used as intended. Thanks Ingo for the explanation on how this
is intended to work. Adjusted the overlay fs accordingly and updated/reverted
the changes to the other filesystems.


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


# 00405f22 09-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the
node. That is needed for a layered filesystem to be able to construct a full
fs_vnode out of a volume/inode pair.
* Adapt places where get_vnode is used. Sadly this is a C API and we can't just
use a default NULL for that argument.
* Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the
flags field of a fs get_vnode call. A filesystem can use this flag to indicate
that it doesn't support the full set of fs features (attributes, write support)
and it'd like to have unsupported calls emulated by an overlay sub node.
* Add a perliminary overlay filesystem that emulates file attributes using files
on a filesystem where attributes aren't supported. It does currently only
support reading attributes/attribute directories though. All other calls are
just passed through to the super filesystem.
* Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation
is supported. For the overlay filesystem we may later return a B_UNSUPPORTED,
so make sure that in that case proper fallback options are taken.
* Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned
later to only trigger where there are features on a CD that need emulation
at all.

If you happened to know the attribute file format and location you could build
an iso with read-only attribute support now. Note that this won't be enough to
get a bootable iso-only image as the query and index support is yet missing.


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


# 55ddbd7b 13-Nov-2008 Axel Dörfler <axeld@pinc-software.de>

* When a file system reports -1 offsets in its fs_get_file_map() function, this
will now accepted and regarded as sparse file data. FileMap::_Add() also
correctly joins multiple vecs with that offset together, FileMap::Translate()
will always report offset -1 even for offsets into that extent.
* read_file_io_vec_pages() (or rather, its backend common_file_io_vec_pages())
now supports sparse files, and will just clear the memory it should read from
offset -1 instead of passing a request to the vnode.
* ext2 now correctly reports sparse files. This should close bug #2889, as well
as #975.


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


# 2c348abb 30-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* Most of the other file systems now maintain the st_blocks value. It might not
always be correct, but should be at least close.


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


# 46124337 30-Aug-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added parameter "size_t align" to file_map_translate(). If > 1, the
vector at the end of the file will be aligned to the given value.
* BFS uses an alignment of 512 bytes (should be block size of the
underlying device or BFS block size, whatever is less), which should
be fine, since file data are only stored in BFS blocks. This totally
avoids any partial operations at the I/O scheduler level, thus saving
disk operations. Not that I could measure any performance difference.
Theoretically it should help a lot though, particularly when dealing
with lots of small files, since we avoid using bounce buffers, which
are (a) limited in number and (b) require copying of the data.


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


# ec598fe4 27-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added FS interface hooks io() and cancel_io(). The former is supposed
to provide asynchrounous (or only synchronous, if asynchronous is not
supported) I/O request support. It will eventually replace
{read,write}_pages(). None of the FS implementations implement them
yet.
* Implemented some support functions for request-based I/O. File system
implementations can use do_fd_io() which passes an I/O request to the
layer responsible for a given FD, and do_iterative_fd_io(), which
translates a request for a file to subrequests for the underlying
device and passes them on. Both fall back to synchrounous processing
when the io() hook is not supported.
Furthermore added vfs_synchronous_io() which should be handy for the
devfs to perform io_requests synchronously for devices that don't
support the io() hook.


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


# e6bd90c5 23-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* bfs_fsync() was the only place which could cause the
fs_vnode_ops::write_pages() to be called with fsReenter = true. Since
this is no longer the case, the argument has become superfluous. For
read_pages() it always was. Removed the argument from the functions
and all functions that propagated it.
* Some whitespace at the end of lines was removed.


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


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

* Seems like GCC4 does not like declaring structures inside unnamed unions;
that looks like a compiler bug to me, though.
* Pulled struct data_stream out of the union (now called ext2_data_stream),
based on a patch by Maurice, thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26214 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


# af206cf2 01-Jul-2008 Jérôme Duval <korli@users.berlios.de>

gcc4 build fix


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


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

* Added support for files larger than 4GB - not yet tested, though.
* The stat::st_nlink value is now correctly reported.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26188 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


# 26aef3ac62e67e29e7895213ef7c5253798564f4 11-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

ext2: Fix enabling/disabling the file cache

* Inode:
- Rename {Enable,Disable}FileCache() to {Create,Delete}FileCache()
and IsFileCacheDisabled() to HasFileCache(), since that is what they
actually do. DeleteFileCache() now also sets the attributes to NULL,
which makes fCached superfluous.
- Introduce {Enable,Disable}FileCache(), which actually enable/disable
the file cache. Use those methods for handling O_NOCACHE.
* ext2_free_cookie(): Reenable the file cache in case of O_NOCACHE.

Fixes crash when O_NOCACHE was used, since the file cache was deleted
without clearing the attribute and Inode::ReadAt() would use the deleted
object afterward.


# 05826ec74b13fa9e5daf7a56f30dc4aa40b67707 11-Nov-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

ext2_get_file_map(): Fix broken termination condition


# a130bab351822fb76ee1750cd4af6ba11ad70bbe 08-May-2013 Jérôme Duval <jerome.duval@gmail.com>

ext2: fixes 64 bit warnings


# c33b645d33c3c568b0371e13ee527676bf4931db 02-May-2013 Jerome Duval <jerome.duval@gmail.com>

ext2: Return more than a single dirent at a time in ext2_read_dir().

* similar to what mmlr did in hrev45575 for bfs.


# a735bdebb94ce14c72f56204f022038de7a49e2f 31-Oct-2011 Michael Lotz <mmlr@mlotz.ch>

Align all filesystem relevant places to use B_UNSUPPORTED for unsupported
instead of a mix of B_NOT_SUPPORTED and B_UNSUPPORTED. This allows checking for
a specific error code. Probably one of those should be phased out...


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


# f53ec236e22695929663822b4050b3cfe9a10c09 02-Mar-2011 Jérôme Duval <korli@users.berlios.de>

changed ioctl hook return code when the opcode isn't supported.


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


# 886d6531a6aac8b135930367a0037069d6e5d7f2 31-Jan-2011 Jérôme Duval <korli@users.berlios.de>

forgot to add B_FS_HAS_ATTR when adding attribute support


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


# 85f15b4bf0968c13f0a7bc97dc507a7fce05dbdd 24-Jan-2011 Jérôme Duval <korli@users.berlios.de>

* uses std::nothrow when calling new.
* fix an UDF reference.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40281 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


# 230b9a69d3c77475de1a012055f99641f3884726 20-Dec-2010 Jérôme Duval <korli@users.berlios.de>

resource leaks CID 5711, 5712, 5713, 5714


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39902 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


# f7218c2187ea34f01be1bed46a233afa1a641dcf 10-Dec-2010 Jérôme Duval <korli@users.berlios.de>

* HTree::Lookup() was trying to find the entry .. through indexed search instead of linear search. Should fix #6305
* DirectoryIterator::FindEntry() now takes name length in account for name comparison.
* cleanup


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


# ea75a051ad0471a7fdeecd3be146bf73ca640716 09-Nov-2010 Axel Dörfler <axeld@pinc-software.de>

* Applied patch by Rohit Yadav that fixes #6750 for ext2. Thanks a lot!
* Fixed warning in Inode::WriteAt(), but left warnings in kernel_interface.cpp
in there; I guess that's work in progress (although having the io hook would
be nice).


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


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

DirectoryIterator changes:
* RemoveEntry(): set inode id to zero when reaching the end of block
* FindEntry(): keep on searching if Get() returns B_BAD_DATA
* added _Offset() based on fLogicalBlock and fDisplacement
* Next(): keep on searching when inode id is zero; also when entry length is zero, keep on with next block
* added GetNext() to get the next valid entry.
* Get(): now returns B_BAD_DATA on a zero length or inode id.


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


# 82b3bdd45c2e1ccf7b80729aa9b52926b95d232b 06-Nov-2010 Jérôme Duval <korli@users.berlios.de>

Stop the journal on Sync(), start the journal when a transaction is written. This helps with fs state on shutdown.


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


# 583f39e94d4065be3e621924661b98d231f29b10 31-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* switched more uint32 to off_t for 64bit support
* added error messages in InodeAllocator, Inode
* if BlockAllocator can't initialize, don't fail completely but switch to readonly
* fixed a bug in FindNextMarked() for bitmaps with a length non multiple of 32
* Inode::FindBlock() now returns an optional block_run length, useful for get_file_map()
* added flag for Inode for extents


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39234 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


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

added B_DISK_SYSTEM_SUPPORTS_WRITING flag on ext2 disk system, this is required to have mount_server ask whether mounting should be done readwrite or readonly


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


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

ext3 inodes whose size is at least 256 bytes can also contain attributes (like smalldata for bfs).
We now use the Attribute class from bfs (instead of AttributeIterator) to manage small data and block attributes, though it's still readonly.


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


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

added a file system call preallocate() as described in #6285, currently unused


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


# 6bfb10d31252e972766d0f33ec85b431b2af2c15 13-Oct-2010 Jérôme Duval <korli@users.berlios.de>

* added support for extra inode attributes in volumes with an inodesize of 256 or more:
this brings nanoseconds for access, change and modification times, and also brings creation time.
* switched off some debug output
* HTreeEntryIterator: fCount can equal fLimit.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38964 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


# 2365cde279adec2bb61e0ec37e37d8d4d8974f1f 11-Apr-2010 François Revol <revol@free.fr>

- cleanup,
- fix copyright,
- disable tracing,
- add support for reading attributes. The current naming is not final as I'm actually experimenting with it.


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


# b026d219fc2f97ac9df09996d41f408a459006d8 11-Apr-2010 François Revol <revol@free.fr>

Partial implementation for attribute support. Currently listattr successfully lists attributes on files.


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


# 425cb3d71644c19d925f97846964a32475b09b95 09-Sep-2009 Oliver Tappe <zooey@hirschkaefer.de>

* revert r32999 and adjusted each filesystem to return B_NOT_A_DIRECTORY in
its open_dir() implementation instead (as suggested by Ingo).
-alphabranch (it's only a cleanup)


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


# 53ef70a0df9328be0c46e32447bc5cc32f678770 29-Jul-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Patch by Bryce Groff: Fixed return values of the identify() hook.


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


# 49004dc730f842ea3c162b56dee63696c51d17c7 19-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not
needed at all when used as intended. Thanks Ingo for the explanation on how this
is intended to work. Adjusted the overlay fs accordingly and updated/reverted
the changes to the other filesystems.


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


# 00405f2286fd370a0bd264d0bbac0cfa120e7646 09-Feb-2009 Michael Lotz <mmlr@mlotz.ch>

* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the
node. That is needed for a layered filesystem to be able to construct a full
fs_vnode out of a volume/inode pair.
* Adapt places where get_vnode is used. Sadly this is a C API and we can't just
use a default NULL for that argument.
* Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the
flags field of a fs get_vnode call. A filesystem can use this flag to indicate
that it doesn't support the full set of fs features (attributes, write support)
and it'd like to have unsupported calls emulated by an overlay sub node.
* Add a perliminary overlay filesystem that emulates file attributes using files
on a filesystem where attributes aren't supported. It does currently only
support reading attributes/attribute directories though. All other calls are
just passed through to the super filesystem.
* Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation
is supported. For the overlay filesystem we may later return a B_UNSUPPORTED,
so make sure that in that case proper fallback options are taken.
* Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned
later to only trigger where there are features on a CD that need emulation
at all.

If you happened to know the attribute file format and location you could build
an iso with read-only attribute support now. Note that this won't be enough to
get a bootable iso-only image as the query and index support is yet missing.


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


# 55ddbd7bca54878d861861e82c0c5a0d196c1b85 13-Nov-2008 Axel Dörfler <axeld@pinc-software.de>

* When a file system reports -1 offsets in its fs_get_file_map() function, this
will now accepted and regarded as sparse file data. FileMap::_Add() also
correctly joins multiple vecs with that offset together, FileMap::Translate()
will always report offset -1 even for offsets into that extent.
* read_file_io_vec_pages() (or rather, its backend common_file_io_vec_pages())
now supports sparse files, and will just clear the memory it should read from
offset -1 instead of passing a request to the vnode.
* ext2 now correctly reports sparse files. This should close bug #2889, as well
as #975.


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


# 2c348abbf7aca35c66b88e159bdafa41f2a9743f 30-Sep-2008 Axel Dörfler <axeld@pinc-software.de>

* Most of the other file systems now maintain the st_blocks value. It might not
always be correct, but should be at least close.


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


# 4612433715fc0477740693682ec4a642c1a4c6e1 30-Aug-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added parameter "size_t align" to file_map_translate(). If > 1, the
vector at the end of the file will be aligned to the given value.
* BFS uses an alignment of 512 bytes (should be block size of the
underlying device or BFS block size, whatever is less), which should
be fine, since file data are only stored in BFS blocks. This totally
avoids any partial operations at the I/O scheduler level, thus saving
disk operations. Not that I could measure any performance difference.
Theoretically it should help a lot though, particularly when dealing
with lots of small files, since we avoid using bounce buffers, which
are (a) limited in number and (b) require copying of the data.


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


# ec598fe493579e3d522453cb407ca3c6b57d715a 27-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added FS interface hooks io() and cancel_io(). The former is supposed
to provide asynchrounous (or only synchronous, if asynchronous is not
supported) I/O request support. It will eventually replace
{read,write}_pages(). None of the FS implementations implement them
yet.
* Implemented some support functions for request-based I/O. File system
implementations can use do_fd_io() which passes an I/O request to the
layer responsible for a given FD, and do_iterative_fd_io(), which
translates a request for a file to subrequests for the underlying
device and passes them on. Both fall back to synchrounous processing
when the io() hook is not supported.
Furthermore added vfs_synchronous_io() which should be handy for the
devfs to perform io_requests synchronously for devices that don't
support the io() hook.


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


# e6bd90c58dbae64f3b464edcff90dcb06e63a716 23-Jul-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* bfs_fsync() was the only place which could cause the
fs_vnode_ops::write_pages() to be called with fsReenter = true. Since
this is no longer the case, the argument has become superfluous. For
read_pages() it always was. Removed the argument from the functions
and all functions that propagated it.
* Some whitespace at the end of lines was removed.


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


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

* Seems like GCC4 does not like declaring structures inside unnamed unions;
that looks like a compiler bug to me, though.
* Pulled struct data_stream out of the union (now called ext2_data_stream),
based on a patch by Maurice, thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26214 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


# af206cf2d6d0c40d004ff5c8dccdcb2c070157db 01-Jul-2008 Jérôme Duval <korli@users.berlios.de>

gcc4 build fix


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


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

* Added support for files larger than 4GB - not yet tested, though.
* The stat::st_nlink value is now correctly reported.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26188 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