示例#1
0
文件: Volume.cpp 项目: luciang/haiku
// NewVNode
status_t
Volume::NewVNode(vnode_id vnid, Node* node)
{
	status_t error = new_vnode(fVolumeManager->GetID(), vnid, node);
	if (error == B_OK)
		node->SetKnownToVFS(true);
	return error;
}
示例#2
0
// NewVNode
status_t
Volume::NewVNode(Node *node)
{
	status_t error = NodeAdded(node);
	if (error == B_OK) {
		error = new_vnode(GetID(), node->GetID(), node);
		if (error != B_OK)
			NodeRemoved(node);
	}
	return error;
}
示例#3
0
文件: sos.c 项目: ldfaiztt/MSCS
SOS()
{
        readyq = new_dllist();
        mt_init();
        writeok     = mt_sem_create(0);
        writers     = mt_sem_create(1);
        readers     = mt_sem_create(1);
        nelem       = mt_sem_create(0);
        consoleWait = mt_sem_create(0);
        
        wr_iobuf = make_io_buffer(1);
        cr_iobuf = make_io_buffer(256);
        crb_no_chars = 0;
        crb_end = 0; 
        crb_begin = 0;

        curpid = -1;
//      pids = make_rb();
        init_partitions(); 
        DEBUG('e', "pagesize: %d\n", PageSize);

	jrbTree = make_jrb();		// Step 20

	init = new_pcb();		// Step 22
	init->pid = get_new_pid();	// Step 22
   
        cread_vnode = new_vnode();
        cread_vnode->iobuf =cr_iobuf;
        cr_iobuf->nwriters = 1;
        cwrite_vnode = new_vnode();               
        cwrite_vnode->iobuf = wr_iobuf;
        wr_iobuf->nreaders = 1;
        
        start_timer(10);	
	bzero(main_memory, MemorySize);
        mt_create(read_console_io, (void *)cr_iobuf);
        mt_create(write_console_io, (void *)wr_iobuf);
        //mt_create(read_console, NULL);
        mt_create(initialize_user_process, (void *)Argv);
        schedule();
}
示例#4
0
static int
rootfs_mount(nspace_id nsid, const char *device, ulong flags, void *parms,
        size_t len, void **data, vnode_id *vnid)
{
    int             err;
    nspace          *ns;
    vnode           *root;
    vnode_id        rvnid;

    if (device || parms || (len != 0)) {
        err = EINVAL;
        goto error1;
    }

    ns = (nspace *) malloc(sizeof(nspace));
    if (!ns) {
        err = ENOMEM;
        goto error1;
    }

    root = (vnode *) malloc(sizeof(vnode));
    if (!root) {
        err = ENOMEM;
        goto error2;
    }

    rvnid = 1;

    ns->nsid = nsid;
    ns->vnnum = 0;
    ns->nxvnid = rvnid;
    ns->root = root;
    if (new_lock(&ns->lock, "rootfs") < 0) {
        err = -1;
        goto error3;
    }
    ns->skiplist = NewSL(&compare_vnode, NULL, NO_DUPLICATES);
    if (!ns->skiplist) {
        err = -1;
        goto error4;
    }

    root->vnid = rvnid;
    root->parent = root;
    root->ns = ns;
    root->removed = FALSE;
    root->name = NULL;
    root->next = root->prev = NULL;
    root->head = NULL;
    root->symlink = NULL;

    /* ### do it for real */
    root->uid = 0;
    root->gid = 0;
    root->mode = MY_S_IFDIR | 0777;
    root->mtime = time(NULL);

    err = new_vnode(nsid, rvnid, root);
    if (err)
        goto error5;

    *data = ns;
    *vnid = rvnid;

    return 0;

error5:
    FreeSL(ns->skiplist);
error4:
    free_lock(&ns->lock);
error3:
    free(root);
error2:
    free(ns);
error1:
    return err;
}