diff --git a/src/add-ons/kernel/file_systems/bfs/Lock.h b/src/add-ons/kernel/file_systems/bfs/Lock.h index 98c55dc69b..0375694b8a 100644 --- a/src/add-ons/kernel/file_systems/bfs/Lock.h +++ b/src/add-ons/kernel/file_systems/bfs/Lock.h @@ -1,12 +1,11 @@ +/* Lock - simple semaphores, read/write lock implementation + * Roughly based on a Be sample code written by Nathan Schrenk. + * + * Copyright 2001-2006, Axel Dörfler, axeld@pinc-software.de. + * This file may be used under the terms of the MIT License. + */ #ifndef LOCK_H #define LOCK_H -/* 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. -** -** This file may be used under the terms of the OpenBeOS License. -*/ #include @@ -444,6 +443,11 @@ class ReadLocked { fLock.Unlock(); } + status_t IsLocked() + { + return fStatus; + } + private: ReadWriteLock &fLock; status_t fStatus; diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index 5b88472018..eaae76b23f 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -1,4 +1,4 @@ -/* kernel_interface - file system interface to BeOS' vnode layer +/* kernel_interface - file system interface to Haiku's vnode layer * * Copyright 2001-2006, Axel Dörfler, axeld@pinc-software.de. * This file may be used under the terms of the MIT License. @@ -657,6 +657,12 @@ bfs_fsync(void *_ns, void *_node) return B_BAD_VALUE; Inode *inode = (Inode *)_node; + ReadLocked locked(inode->Lock()); + + status_t status = locked.IsLocked(); + if (status < B_OK) + RETURN_ERROR(status); + return inode->Sync(); }