Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 886c627650 Fixed debug build (format string/argument mismatches).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38619 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 15:09:14 +00:00
Ingo Weinhold e83635fd5a * RegExp::Prop(): Fixed build (assignment of string literals to a char*).
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38618 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 15:08:01 +00:00
Ingo Weinhold 8cd456aad1 Renamed macros ASSERT() and TRESPASS() to avoid clashes with the ones from
<Debug.h>.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 15:06:15 +00:00
Ingo Weinhold 1bddf9cad1 * Missing <Debug.h> include.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38616 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 15:05:13 +00:00
Ingo Weinhold e13706775f Whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38612 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 11:22:15 +00:00
Ingo Weinhold c1a1df8d83 Typo: & used instead of &&.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 09:58:49 +00:00
Ingo Weinhold 66c75febfd Missing parentheses.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 09:57:59 +00:00
Ingo Weinhold a738ca2c55 Build fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-12 09:57:26 +00:00
Ingo Weinhold 8e192dad09 Fixed build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38290 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-20 20:42:33 +00:00
Ingo Weinhold 3c0b4af4b4 Remove unused macro.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37704 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 20:49:00 +00:00
Ingo Weinhold e653b86511 Free(), FreeRawOrReturnCache(), GetAllocationInfo(), CacheForAddress(): Check
Assert that the meta chunk the given address lies in is actually in use.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37703 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 20:47:12 +00:00
Ingo Weinhold 93a56baf09 Moved the Area structure from the beginning of area to one page inside the
area. The first page is not mapped, so someone writing over the bounds of the
previous area will be axed immediately.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37701 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 20:35:41 +00:00
Ingo Weinhold e82b1340a7 * checksumfs_lookup(): The flags return parameter was never set, leading to
weird behavior when running in kernel.
* checksumfs_io(): Try to lock with timeout when the request is VIP. This
  works around a potential quasi-deadlock: Most write support FS hooks
  potentially allocate memory (e.g. in block_cache_get*()) while holding a
  write lock to a node. When memory is low they have to wait for pages to
  become available. The page writer might block on such node which in turn
  would prevent modified pages from becoming eligible for recycling. Should
  only in rare low memory cases have led to a problem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 12:20:45 +00:00
Ingo Weinhold 6fc498dafd Added ReadLockWithTimeout().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:50:15 +00:00
Ingo Weinhold 3555a42f18 Typo in debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:49:50 +00:00
Ingo Weinhold 539ec8ff1e * File::_UpdateLevelInfos(): Fixed child count computation. Was incorrect (0)
for multiple of kFileBlockMaxCount block counts.
* File::_GrowTree(): The inner loop of the level addition part was bogus.
  Apparently I never tested with files >= 2 MB before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:49:28 +00:00
Ingo Weinhold 5cdadcae91 page_writer(): Fixed the pagesSinceLastSuccessfulWrite computation. Only the
skipped pages were added, not the failed ones.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37682 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:40:18 +00:00
Ingo Weinhold 2ab433ba90 * PageWriteWrapper::Done(): Returns whether the page was successfully written,
now.
* PageWriterRun::Go(): Returns the number of pages that could not be written.
* page_writer()/next_modified_page():
  - Don't use a marker page anymore. A visited page is requeued at the tail.
    This also makes the functions that schedule pages work a bit better (they
    queue the pages at the head of the queue).
  - Have an eye on pages that are busy or failed to write. If we ran through
    the whole modified queue without writing a single page, sleep for a short
    time. This mitigates the busyness the page writer falls into when there
    are enough modified pages to make it run all the time but none that can be
    written successfully.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:32:42 +00:00
Ingo Weinhold 4e08fb8589 Added rw_lock_read_lock_with_timeout().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37680 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:10:48 +00:00
Ingo Weinhold b349aae941 Should have been part of r37678. io_request_is_vip() support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:09:32 +00:00
Ingo Weinhold 0a1dabca7e Added public io_request_is_vip(), returning whether the given request has the
VIP flag set.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37678 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:08:34 +00:00
Ingo Weinhold 4bfbcb535d checksumfs_io(): We are responsible for calling notify_io_request() when we
decide to fail for some reason.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 16:32:59 +00:00
Ingo Weinhold fb2d716a99 Added support for using underlying devices -- we need to get the size with
the B_GET_GEOMETRY ioctl instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 15:29:29 +00:00
Ingo Weinhold 8cb1303cfa * Cleaned up debug output.
* _AllocateInGroup(): Fixed incorrect checks. The allocation group counts the
  free, not the used blocks.
* _AllocateInBitmapBlock(): Fixed allocation loop. It was neither incrementing
  the array pointer, nor resetting the bit offset.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37656 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 15:28:03 +00:00
Ingo Weinhold 1e7497da42 Debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 15:23:46 +00:00
Ingo Weinhold 4701667eb2 Get{Writable,Zero}(): Fixed return values. The type is bool not status_t.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37654 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 15:23:29 +00:00
Ingo Weinhold 94b89e4bcc Debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37653 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 15:16:36 +00:00
Ingo Weinhold 8f6bf75670 * Resize(): Resize the file cache before trying to fill the added space with
zeroes.
* Compute and propagate the check sums of the written file data to the
  underlying device.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 09:58:48 +00:00
Ingo Weinhold 83f46ed6ab file_cache_write() can get a NULL buffer and still a size != 0, which the
request handling wasn't taking into account.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 09:55:04 +00:00
Ingo Weinhold 9bc87c767b Block does now register writable blocks with Transaction. On commit
Transaction sets the check sums for the changed blocks on the underlying
device, respectively reverts them on roll-back.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37639 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 23:21:26 +00:00
Ingo Weinhold 8d591ecc41 * Added CHECKSUM_DEVICE_IOCTL_GET_CHECK_SUM ioctl.
* Added some debug output.
* CheckSumCache::_GetBlock(): Fixed incorrect check. The method could return
  an arbitrary block.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37638 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 23:16:46 +00:00
Ingo Weinhold 7514b57ebf Added Data() getter and an assignment operator getting a raw buffer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37637 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 23:14:48 +00:00
Ingo Weinhold 5520ec0ea0 Enable -Werror.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 23:13:51 +00:00
Ingo Weinhold 0f9dda9f00 Moved Block implementation to its own source file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37633 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 21:19:11 +00:00
Ingo Weinhold decde2b030 * _Free[InBitmapBlock](): Don't use Block::Discard() (block_cache_discard()).
It doesn't have the intended semantics (reverting the change). The caller
  is now expected to roll back the transaction.
* AllocateExactly(): Don't try to revert a partially successful allocation.
  The caller is expected to roll back the transaction.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37632 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 21:11:56 +00:00
Ingo Weinhold 8794d8c48f * Volume::Create{File,Directory,SymLink}():
- Simplified by using the new common _CreateNode(). Changed the constructors
    slightly -- the block index is now set via a separate SetBlockIndex()
    method.
  - The block allocated for the node was not cleared. At least for directories
    that is required, though.
* Added attribute support:
  - Refactored/extended {open,create}_file() and DirCookie a bit, so they can
    also be used for attributes/attribute directories.
  - Implemented all relevant attribute FS hooks.
  - Node::DeletingNode(): Changed interface (it creates the transaction(s) as
    needed, now and doesn't return the error code anymore. The base class
    implementation frees the attribute directory, the Directory implementation
    also unlinks all entries and frees the entry tree.
* checksumfs_write_stat(): B_STAT_MODE was not handled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37626 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 17:13:34 +00:00
Ingo Weinhold 7461b83d3b Removed unused checksumfs_node::content. We use the rest of the node block
for managing the content.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 17:01:24 +00:00
Ingo Weinhold 72e9c2846a * Added flags for removing/unremoving the node.
* Added more optional notification parameters to Commit().
* Added some handy methods.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 16:59:53 +00:00
Ingo Weinhold c6bc0bdd73 When opening the device read-write failed, retry read-only.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 08:44:30 +00:00
Ingo Weinhold 814057885c Patch by Alex Wilson:
* Added support for archiving/unarchiving.
* Coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37613 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 08:28:55 +00:00
Ingo Weinhold 12463fa891 Patch by Alex Wilson: Added archiving/unarchiving support to BSplitView.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37612 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-20 08:24:19 +00:00
Ingo Weinhold e828231248 Added node monitoring support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37601 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 15:31:08 +00:00
Ingo Weinhold 4b53c2ba4f Implemented hooks write_fs_info(), sync(), set_flags(), fsync(), access().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 13:58:03 +00:00
Ingo Weinhold 1e0016e1a9 BlockAllocator didn't update the freeBlocks field in the superblock. So after
unmounting and remounting the number of free blocks could be off.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 11:59:22 +00:00
Ingo Weinhold 284f17739e Open the underlying file (or device) with O_NOCACHE. This works around a
potential page writer deadlock.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 11:57:57 +00:00
Ingo Weinhold 470934be8c Implemented link() hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37582 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 10:49:29 +00:00
Ingo Weinhold ae3bba85bb Volume::Link(): Also unwrap the target vnode. The client FS would get a wrong
vnode pointer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37581 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 10:48:44 +00:00
Ingo Weinhold 69d34a505b Implemented rename() hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37579 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 10:27:26 +00:00
Ingo Weinhold 5b3d789879 File::GetFileVecs():
* Added debug output.
* Rounding up the size argument could cause an overflow. Use uint64 and block
  indexes, now.
* The iteration index wasn't incremented in the main loop.
* The in-block index was ignored when filling the first vector. Shouldn't
  really matter since we pass back complete blocks only, so the file map
  should never supply an unaligned offset, but anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37573 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 01:19:44 +00:00
Ingo Weinhold 08e2a0556c do_iterative_fd_io(): Don't fail when the getVecs callback returns
B_BUFFER_OVERFLOW. It will have returned valid vectors in this case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37572 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 01:14:02 +00:00
Ingo Weinhold 45849022ce syslog_sender():
* After an unsuccessful find_port() wait a while before trying again.
  find_port() is quite expensive and particularly during the boot process it
  was called quite busily. Essentially a find_port() per written syslog
  message was performed.
* Added TODOs regarding using a semaphore and using find_port().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37571 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-18 23:55:39 +00:00
Ingo Weinhold 935c5e8278 Fixed build with TRACE_VFS_REQUEST_IO enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37564 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-18 13:25:26 +00:00
Ingo Weinhold a628d23613 Prevent creation of entries in unlinked directories.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37563 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-18 13:17:43 +00:00
Ingo Weinhold 54f25b672a Fixed build with TRACE_VM86 enabled. Closes #6325.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37556 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 16:17:14 +00:00
Ingo Weinhold c019945cbd Added detail to the comment about why we can't call the create() hook without
O_EXCL.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37555 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 16:11:56 +00:00
Ingo Weinhold 1a38616f35 Fixed fs_vnode_ops::create() documentation: The function shall not fail, if
the file already exists, unless O_EXCL has been specified. At least that's
how our file systems with write support implement it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37554 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 16:00:48 +00:00
Ingo Weinhold 1f23605dd7 Added description for fs_volume_ops::get_vnode()'s _type and _flags
parameters.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 15:39:39 +00:00
Ingo Weinhold e5ea208d71 Patch by Alex Wilson:
* Added archiving/unarchiving support.
* Coding style cleanup (some by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37549 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 02:04:32 +00:00
Ingo Weinhold 4b20c303bd Patch by Alex Wilson:
* Added archiving/unarchiving support.
* Coding style cleanup (some more by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37548 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 01:46:40 +00:00
Ingo Weinhold 39c72631a3 Patch by Alex Wilson:
* Added archiving/unarchving support.
* Coding style cleanup (some more by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37547 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 01:05:28 +00:00
Ingo Weinhold ff626c8e29 Patch by Alex Wilson: Added archiving/unarchiving support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 00:46:40 +00:00
Ingo Weinhold 3fb74eb796 Patch by Alex Wilson (with minor changes by myself):
* Added support for archiving/unarchiving.
* Coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37545 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 00:41:56 +00:00
Ingo Weinhold a3d9e70188 dos2unix
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 00:20:19 +00:00
Ingo Weinhold 849e11ad8d Patch by Alex Wilson:
* Implemented archiving/unarchiving support.
* Coding style cleanup (some more by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37543 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 00:15:31 +00:00
Ingo Weinhold d1535a45df Patch by Alex Wilson:
* Implemented archiving/unarchiving support.
* Coding style cleanup (some more by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37542 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-17 00:09:06 +00:00
Ingo Weinhold 80c2bbd8ae Patch by Alex Wilson (with small style changes by myself): Added support for
archiving/unarchiving.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37541 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 18:11:24 +00:00
Ingo Weinhold 7ed1644c55 Patch by Alex Wilson:
* Added archiving/unarchiving support.
* Style cleanup (also some by myself).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37540 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 17:23:15 +00:00
Ingo Weinhold cbac1a2355 Patch by Alex Wilson: Added archiving/unarchiving of layout and layout
related data.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37539 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 17:06:55 +00:00
Ingo Weinhold b137ab3eb3 Patch by Alex Wilson (minor changes by myself) related to the new archiving
features:
* Some cosmetic adjustments of the API, like using references instead of
  pointers, argument order, method names, etc.
* Added convenience template methods for archiving and unarchiving to BArchiver
  and BUnarchiver.
* BUnarchiver (respectively the private BUnarchiveManager) explicitly deals with
  object ownership, now. This is necessary since an error while unarchiving
  could leave an already unarchived object without owning object, which would
  result in it being leaked. The BUnarchiver::{Get,Find}Object() methods do now
  have an optional parameter to specify whether object ownership shall be
  transferred.
* Fixed incorrect header guard in headers/private/binary_compatibility/Global.h.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37538 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 16:49:42 +00:00
Ingo Weinhold 3aea1d4f53 * Added ObjectCache::alignment, the object alignment and used the alignment for
incrementing the cache color cycle. Using the fixed value (8) would
  potentially misalign the object again.
* Don't use CACHE_ALIGN_ON_SIZE for object caches any longer -- we have the
  alignment parameter anyway (the flag is still used for the MemoryManager,
  though).
* ObjectCache::InitSlab(): Slab coloring *was* done when CACHE_ALIGN_ON_SIZE
  was given, i.e. exactly the wrong way around. Also the cache_color_cycle
  computation was weird -- color 0 was used twice in a row.
* The "slabs" and "slab_cache" KDL commands also print the alignment, now.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37534 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 01:27:27 +00:00
Ingo Weinhold 44db70a313 * Resolved TODO: Use an object cache for the thread structure alloction.
* Align the allocated objects to 16 byte. This is required by the x86
  arch_thread structure. Haiku only didn't crash and burn since the until
  recently used heap allocator apparently aligned the structures to 16 byte
  anyway and the now used slab allocator has a bug preventing slab coloring
  for that object size.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 01:13:22 +00:00
Ingo Weinhold 266681e27c Patch by Nathan Mentley: Build the x86-64 build tools with multilib support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37522 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 23:03:59 +00:00
Ingo Weinhold 1977401106 Simplified Jamfiles. The drivers isn't built anyway, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37520 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 21:11:24 +00:00
Ingo Weinhold 3121f39481 thread_exit(): Postpone deleting the thread's user stack until after sending
the thread's death notifications. The fixes issues where other threads depend
on objects on its stack (particularly relevant for the main thread). Fixes
#6315.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37509 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 01:20:58 +00:00
Ingo Weinhold 737b989128 Patch by Lucian Adrian Grijincu (slightly modified by myself):
ObjectCache::ReturnObjectToSlab(): Check the returned object pointer for
obvious invalidity (out of bounds or misalignment).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37508 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 00:48:45 +00:00
Ingo Weinhold 87c30de789 * Added a File class for representing regular files. We use a simple block tree
for the data management. Reading/writing (using file cache and file map) is
  implemented, but not exactly well tested yet.
* Renamed SymLink::{Read,Write}() to {Read,Write}SymLink().
* Implemented FS hooks write_stat(), create(), read(), write(), io().
* Added O_TRUNC support to open() hook.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37507 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 00:12:52 +00:00
Ingo Weinhold 4a6cd3b3f9 * Added some stat data setters.
* Added virtual methods needed for files.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37506 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 00:04:43 +00:00
Ingo Weinhold 4cc1203416 * Added node locking related flags.
* Added convenience method StartAndAddNode().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37505 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 00:03:42 +00:00
Ingo Weinhold 7704e36304 Use RETURN_ERROR() in the free paths, so we see where things go wrong.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37504 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 00:02:43 +00:00
Ingo Weinhold e40e5ebf8c arch_clear_watchpoint(): Passed incorrect flag to clear_breakpoint(), so
watchpoints would never be cleared.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-13 23:56:14 +00:00
Ingo Weinhold 2fd209cf00 page_writer(): Added TODO about potential deadlock in case of loop file
systems/devices.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37502 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-13 23:42:31 +00:00
Ingo Weinhold 06b318ef9b Added symlink support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37481 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-12 16:15:47 +00:00
Ingo Weinhold a2e7c7417b * Added Transaction class which wraps a block cache transaction and performs
all other operations required to roll back a transaction. Transactions are
  fully serialized -- due to limitations of our block cache and also to keep
  things simple.
* Use a transaction for all write operations.
* Implemented the directory entry management code (a simple tree algorithm).
* Finished/implemented the FS hooks for directory entry lookup, directory
  iteration, creation, and removal.
* Added non-persistent support for node access times.
* Set the user and group IDs on node creation.
* Added permission checks to several FS hooks.
* BlockAllocator::_Free(): The number of freed blocks was subtracted from
  fFreeBlocks instead of added.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37478 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-12 13:21:42 +00:00
Ingo Weinhold bb486a7223 cache_end_transaction(): Allow the hook parameter to be NULL.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37461 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-10 15:09:46 +00:00
Ingo Weinhold b944766870 * Moved the vm_page initialization from vm_page.cpp:vm_page_init() to the new
vm_page::Init().
* Made vm_page::wired_count private and added accessor methods.
* Added VMCache::fWiredPagesCount (the number of wired pages the cache
  contains) and accessor methods.
* Made more use of vm_page::IsMapped().
* vm_copy_on_write_area(): Added vm_page_reservation* parameter that can be
  used to request a special handling for wired pages. If given the wired pages
  are replaced by copies and the original pages are moved to the upper cache.
* vm_copy_area():
  - We don't need to do any wired ranges handling, if the source area is a
    B_SHARED_AREA, since we don't touch the area's mappings in this case.
  - We no longer wait for wired ranges of the concerned areas to disappear.
    Instead we use the new vm_copy_on_write_area() feature and just let it
    copy the wired pages. This fixes #6288, an issue introduced with the use
    of user mutexes in libroot: When executing multiple concurrent fork()s all
    but the first one would wait on the fork mutex, which (being a user mutex)
    would wire a page that the vm_copy_area() of the first fork() would wait
    for.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37460 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-10 15:08:13 +00:00
Ingo Weinhold 61728e1e09 Use MovePage() instead of RemovePage() + InsertPage().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37459 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-10 14:39:15 +00:00
Ingo Weinhold fbb6335d2a Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37432 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-08 15:04:38 +00:00
Ingo Weinhold e5150e2847 Patch by Alex Wilson (compilation fixes by myself): Extended the archiving/
unarchiving protocol to support archival of arbitrary object graphs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37431 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-08 14:54:25 +00:00
Ingo Weinhold f75e014cb8 Patch by Lucian Adrian Grijincu: Added support for loading kernel modules
with only a single readable/writable/executable text+data segment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37415 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-06 21:47:08 +00:00
Ingo Weinhold 4d7859f031 elf_resolve_symbol(): If a weak undefined symbol could not be resolved,
return 0 as its address.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-06 15:41:33 +00:00
Ingo Weinhold 59c754571e Fixed warnings with TRACE_VM_PAGE enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37411 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-06 14:31:34 +00:00
Ingo Weinhold 74956f4385 * Added the beginnings of node support.
* Added the bare minimum of file system hooks to mount the file system. Can't
  do anything more than listing the (empty) root directory yet, though.
* Added Jamfile for building the file system for the userlandfs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 16:53:06 +00:00
Ingo Weinhold e66231742e Added a bit of stuff referenced by inline functions in private kernel
headers. GCC 2 has the unpleasant habit of actually linking the unused inline
functions in. That doesn't suffice to build the userlandfs server with debug
info (it would be the wrong file anyway), but allows to build checksumfs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37405 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 16:48:44 +00:00
Ingo Weinhold 7b2003907a * Replace remaining BeOS int types.
* Removed inclusion of <SupportDefs.h>, respectively replaced it with
  <stdint.h>.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37404 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 16:11:43 +00:00
Ingo Weinhold 281e8a3d0e Removed the annoying bash_completion script from the image. Fixes #5950.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37403 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 15:14:12 +00:00
Ingo Weinhold 05951b9b6a * Added optional paranoid checking of the slab memory manager meta chunks
after each chunk allocation/deallocation.
* The commands that dump chunks also verify, whether chunks that look free
  are in the free list.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37360 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-02 23:33:55 +00:00
Ingo Weinhold b0eaa06c26 Disable re-attaching the tracing buffer of a previous session. It still has
some problems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-02 23:29:59 +00:00
Ingo Weinhold c33b89b3bb Implemented a simple block allocator.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37312 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-30 13:27:11 +00:00
Ingo Weinhold 952d6c8cc4 * Moved the checksum device driver to subdir "driver".
* Created a file system module and a disk system add-on. Currently only
  initializing and identifying/scanning is supported.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37300 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-29 10:52:16 +00:00
Ingo Weinhold 06237dd800 Removed obsolete check. Initialization parameter editing is provided by the
disk system add-ons.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37299 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-29 10:49:03 +00:00