Removed the debug output that was accidently added by the last commit.
Included NewOS change 1656 (O_CLOEXEC support, and a bug fix in get_vnode()). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1431 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -236,21 +236,6 @@ struct fd_ops gIndexDirectoryOps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
check_wall(int32 line, void *address)
|
|
||||||
{
|
|
||||||
// uint32 *wall = (uint32 *)((uint8 *)address - 12);
|
|
||||||
// uint32 size = wall[0];
|
|
||||||
//
|
|
||||||
// if (wall[1] != 0xabadcafe || wall[2] != 0xabadcafe)
|
|
||||||
// panic("check_wall: line %ld, front wall was overwritten (allocation at %p, %lu bytes): %08lx %08lx\n", line, address, size, wall[1], wall[2]);
|
|
||||||
//
|
|
||||||
// wall = (uint32 *)((uint8 *)address + size);
|
|
||||||
// if (wall[0] != 0xabadcafe || wall[1] != 0xabadcafe)
|
|
||||||
// panic("check_wall: line %ld, back wall was overwritten (allocation at %p, %lu bytes): %08lx %08lx\n", line, address, size, wall[0], wall[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mount_compare(void *_m, const void *_key)
|
mount_compare(void *_m, const void *_key)
|
||||||
{
|
{
|
||||||
@@ -523,8 +508,6 @@ dec_vnode_ref_count(struct vnode *vnode, bool reenter)
|
|||||||
int err;
|
int err;
|
||||||
int old_ref;
|
int old_ref;
|
||||||
|
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
|
|
||||||
mutex_lock(&gVnodeMutex);
|
mutex_lock(&gVnodeMutex);
|
||||||
|
|
||||||
if (vnode->busy == true)
|
if (vnode->busy == true)
|
||||||
@@ -597,7 +580,7 @@ get_vnode(mount_id mountID, vnode_id vnodeID, struct vnode **_vnode, int reenter
|
|||||||
|
|
||||||
mutex_lock(&gVnodeMutex);
|
mutex_lock(&gVnodeMutex);
|
||||||
|
|
||||||
do {
|
while (true) {
|
||||||
vnode = lookup_vnode(mountID, vnodeID);
|
vnode = lookup_vnode(mountID, vnodeID);
|
||||||
if (vnode) {
|
if (vnode) {
|
||||||
if (vnode->busy) {
|
if (vnode->busy) {
|
||||||
@@ -607,7 +590,8 @@ get_vnode(mount_id mountID, vnode_id vnodeID, struct vnode **_vnode, int reenter
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (0);
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
PRINT(("get_vnode: tried to lookup vnode, got 0x%p\n", vnode));
|
PRINT(("get_vnode: tried to lookup vnode, got 0x%p\n", vnode));
|
||||||
|
|
||||||
@@ -616,14 +600,12 @@ get_vnode(mount_id mountID, vnode_id vnodeID, struct vnode **_vnode, int reenter
|
|||||||
} else {
|
} else {
|
||||||
// we need to create a new vnode and read it in
|
// we need to create a new vnode and read it in
|
||||||
vnode = create_new_vnode();
|
vnode = create_new_vnode();
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
if (!vnode) {
|
if (!vnode) {
|
||||||
err = B_NO_MEMORY;
|
err = B_NO_MEMORY;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
vnode->mount_id = mountID;
|
vnode->mount_id = mountID;
|
||||||
vnode->id = vnodeID;
|
vnode->id = vnodeID;
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
|
|
||||||
mutex_lock(&gMountMutex);
|
mutex_lock(&gMountMutex);
|
||||||
|
|
||||||
@@ -633,7 +615,6 @@ check_wall(__LINE__, vnode);
|
|||||||
err = ERR_INVALID_HANDLE;
|
err = ERR_INVALID_HANDLE;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
vnode->busy = true;
|
vnode->busy = true;
|
||||||
hash_insert(gVnodeTable, vnode);
|
hash_insert(gVnodeTable, vnode);
|
||||||
mutex_unlock(&gVnodeMutex);
|
mutex_unlock(&gVnodeMutex);
|
||||||
@@ -641,7 +622,6 @@ check_wall(__LINE__, vnode);
|
|||||||
add_vnode_to_mount_list(vnode, vnode->mount);
|
add_vnode_to_mount_list(vnode, vnode->mount);
|
||||||
mutex_unlock(&gMountMutex);
|
mutex_unlock(&gMountMutex);
|
||||||
|
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
err = FS_CALL(vnode, get_vnode)(vnode->mount->cookie, vnodeID, &vnode->private_node, reenter);
|
err = FS_CALL(vnode, get_vnode)(vnode->mount->cookie, vnodeID, &vnode->private_node, reenter);
|
||||||
if (err < 0 && vnode->private_node == NULL) {
|
if (err < 0 && vnode->private_node == NULL) {
|
||||||
remove_vnode_from_mount_list(vnode, vnode->mount);
|
remove_vnode_from_mount_list(vnode, vnode->mount);
|
||||||
@@ -654,7 +634,6 @@ check_wall(__LINE__, vnode);
|
|||||||
|
|
||||||
vnode->busy = false;
|
vnode->busy = false;
|
||||||
vnode->ref_count = 1;
|
vnode->ref_count = 1;
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&gVnodeMutex);
|
mutex_unlock(&gVnodeMutex);
|
||||||
@@ -767,7 +746,6 @@ vnode_path_to_vnode(struct vnode *vnode, char *path, bool traverseLeafLink, stru
|
|||||||
put_vnode(vnode);
|
put_vnode(vnode);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
check_wall(__LINE__, vnode);
|
|
||||||
|
|
||||||
// lookup the vnode, the call to fs_lookup should have caused a get_vnode to be called
|
// lookup the vnode, the call to fs_lookup should have caused a get_vnode to be called
|
||||||
// from inside the filesystem, thus the vnode would have to be in the list and it's
|
// from inside the filesystem, thus the vnode would have to be in the list and it's
|
||||||
@@ -879,7 +857,6 @@ path_to_vnode(char *path, bool traverseLink, struct vnode **_vnode, bool kernel)
|
|||||||
inc_vnode_ref_count(start);
|
inc_vnode_ref_count(start);
|
||||||
mutex_unlock(&context->io_mutex);
|
mutex_unlock(&context->io_mutex);
|
||||||
}
|
}
|
||||||
check_wall(__LINE__, start);
|
|
||||||
|
|
||||||
return vnode_path_to_vnode(start, path, traverseLink, _vnode, 0);
|
return vnode_path_to_vnode(start, path, traverseLink, _vnode, 0);
|
||||||
}
|
}
|
||||||
@@ -1406,9 +1383,8 @@ vfs_new_io_context(void *_parentContext)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Copy all parent files which don't have the O_CLOEXEC flag set
|
||||||
* copy parent files
|
|
||||||
*/
|
|
||||||
if (parentContext) {
|
if (parentContext) {
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -1419,7 +1395,7 @@ vfs_new_io_context(void *_parentContext)
|
|||||||
inc_vnode_ref_count(context->cwd);
|
inc_vnode_ref_count(context->cwd);
|
||||||
|
|
||||||
for (i = 0; i < table_size; i++) {
|
for (i = 0; i < table_size; i++) {
|
||||||
if (parentContext->fds[i]) {
|
if (parentContext->fds[i] && (parentContext->fds[i]->open_mode & O_CLOEXEC) == 0) {
|
||||||
context->fds[i] = parentContext->fds[i];
|
context->fds[i] = parentContext->fds[i];
|
||||||
atomic_add(&context->fds[i]->ref_count, 1);
|
atomic_add(&context->fds[i]->ref_count, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user