diff --git a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.h b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.h index f05923e29d..1eaeaaaad4 100644 --- a/src/add-ons/kernel/file_systems/bfs/BlockAllocator.h +++ b/src/add-ons/kernel/file_systems/bfs/BlockAllocator.h @@ -47,7 +47,7 @@ class BlockAllocator { static status_t initialize(BlockAllocator *); Volume *fVolume; - Benaphore fLock; + Semaphore fLock; AllocationGroup *fGroups; int32 fNumGroups, fBlocksPerGroup; uint32 *fCheckBitmap; diff --git a/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp b/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp index d4e86e0f39..f9305d40ed 100644 --- a/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp +++ b/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp @@ -20,6 +20,11 @@ BufferPool::BufferPool() { fLock = create_sem(1, "buffer lock"); fFreeBuffers = create_sem(0, "free buffers"); + +#ifndef USER + set_sem_owner(fLock, B_SYSTEM_TEAM); + set_sem_owner(fFreeBuffers, B_SYSTEM_TEAM); +#endif } diff --git a/src/add-ons/kernel/file_systems/bfs/Journal.h b/src/add-ons/kernel/file_systems/bfs/Journal.h index 55e6dc96eb..18159436ea 100644 --- a/src/add-ons/kernel/file_systems/bfs/Journal.h +++ b/src/add-ons/kernel/file_systems/bfs/Journal.h @@ -69,7 +69,7 @@ class Journal { status_t TransactionDone(bool success); Volume *fVolume; - Benaphore fLock; + Semaphore fLock; Transaction *fOwner; thread_id fOwningThread; BlockArray fArray; diff --git a/src/add-ons/kernel/file_systems/bfs/Lock.h b/src/add-ons/kernel/file_systems/bfs/Lock.h index 8ffd9dc133..0073faa107 100644 --- a/src/add-ons/kernel/file_systems/bfs/Lock.h +++ b/src/add-ons/kernel/file_systems/bfs/Lock.h @@ -1,6 +1,6 @@ #ifndef LOCK_H #define LOCK_H -/* Lock - benaphores, read/write lock implementation +/* Lock - simple semaphores, read/write lock implementation ** ** Initial version by Axel Dörfler, axeld@pinc-software.de ** Roughly based on a Be sample code written by Nathan Schrenk. @@ -12,16 +12,27 @@ #include -class Benaphore { +// configure here if and when real benaphores should be used +#ifdef USER +# define USE_BENAPHORE 1 +#endif + + +class Semaphore { public: - Benaphore(const char *name = "bfs benaphore") + Semaphore(const char *name = "bfs sem") : - fSemaphore(create_sem(0, name)), - fCount(1) + fSemaphore(create_sem(0, name)) +#ifdef USE_BENAPHORE + , fCount(1) +#endif { +#ifndef USER + set_sem_owner(fSemaphore, B_SYSTEM_TEAM); +#endif } - ~Benaphore() + ~Semaphore() { delete_sem(fSemaphore); } @@ -36,28 +47,38 @@ class Benaphore { status_t Lock() { +#ifdef USE_BENAPHORE if (atomic_add(&fCount, -1) <= 0) +#endif return acquire_sem(fSemaphore); - +#ifdef USE_BENAPHORE return B_OK; +#endif } - void Unlock() + status_t Unlock() { +#ifdef USE_BENAPHORE if (atomic_add(&fCount, 1) < 0) - release_sem(fSemaphore); +#endif + return release_sem(fSemaphore); +#ifdef USE_BENAPHORE + return B_OK; +#endif } private: sem_id fSemaphore; +#ifdef USE_BENAPHORE vint32 fCount; +#endif }; // a convenience class to lock the benaphore class Locker { public: - Locker(Benaphore &lock) + Locker(Semaphore &lock) : fLock(lock) { fStatus = lock.Lock(); @@ -68,9 +89,14 @@ class Locker { if (fStatus == B_OK) fLock.Unlock(); } - + + status_t Status() const + { + return fStatus; + } + private: - Benaphore &fLock; + Semaphore &fLock; status_t fStatus; }; @@ -118,6 +144,9 @@ class ReadWriteLock { fCount(MAX_READERS), fWriteLock() { +#ifndef USER + set_sem_owner(fSemaphore, B_SYSTEM_TEAM); +#endif } ~ReadWriteLock() @@ -181,7 +210,7 @@ class ReadWriteLock { sem_id fSemaphore; vint32 fCount; - Benaphore fWriteLock; + Semaphore fWriteLock; }; #else // FAST_LOCK class ReadWriteLock { @@ -190,6 +219,9 @@ class ReadWriteLock { : fSemaphore(create_sem(MAX_READERS, name)) { +#ifndef USER + set_sem_owner(fSemaphore, B_SYSTEM_TEAM); +#endif } ~ReadWriteLock() diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.h b/src/add-ons/kernel/file_systems/bfs/Volume.h index d75c28edf1..118a472a11 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.h +++ b/src/add-ons/kernel/file_systems/bfs/Volume.h @@ -43,7 +43,7 @@ class Volume { bool IsValidSuperBlock(); bool IsReadOnly() const; void Panic(); - Benaphore &Lock(); + Semaphore &Lock(); block_run Root() const { return fSuperBlock.root_dir; } Inode *RootNode() const { return fRootNode; } @@ -114,7 +114,7 @@ class Volume { int fDevice; disk_super_block fSuperBlock; BlockAllocator fBlockAllocator; - Benaphore fLock; + Semaphore fLock; Journal *fJournal; vint32 fLogStart, fLogEnd; @@ -142,7 +142,7 @@ Volume::IsReadOnly() const } -inline Benaphore & +inline Semaphore & Volume::Lock() { return fLock;