bfs_free_cookie() now always write locks the inode - before it only hold a read lock

which wasn't enough when tampering with the inode's data, and it also acquired that
lock too late.
Thanks to Stefano for pointing this out.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20079 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2007-02-06 16:28:48 +00:00
parent 20d237e4d1
commit 230a0989fd
@@ -1254,6 +1254,8 @@ bfs_free_cookie(void *_ns, void *_node, void *_cookie)
Volume *volume = (Volume *)_ns;
Inode *inode = (Inode *)_node;
WriteLocked locked(inode->Lock());
bool needsTrimming = inode->NeedsTrimming();
if ((cookie->open_mode & O_RWMASK) != 0
@@ -1261,7 +1263,6 @@ bfs_free_cookie(void *_ns, void *_node, void *_cookie)
&& (needsTrimming
|| inode->OldLastModified() != inode->LastModified()
|| inode->OldSize() != inode->Size())) {
ReadLocked locked(inode->Lock());
// trim the preallocated blocks and update the size,
// and last_modified indices if needed