Lines Matching refs:vnode

123 	struct rootfs_vnode* vnode = (rootfs_vnode*)_v;
126 if (vnode != NULL)
127 return vnode->id % range;
150 struct rootfs_vnode* vnode;
152 vnode = (rootfs_vnode*)malloc(sizeof(struct rootfs_vnode));
153 if (vnode == NULL)
156 memset(vnode, 0, sizeof(struct rootfs_vnode));
159 vnode->name = strdup(name);
160 if (vnode->name == NULL) {
161 free(vnode);
166 vnode->id = fs->next_vnode_id++;
167 vnode->stream.type = type;
168 vnode->creation_time = vnode->modification_time = current_timespec();
169 vnode->uid = geteuid();
170 vnode->gid = parent ? parent->gid : getegid();
174 list_init(&vnode->stream.dir.cookies);
175 mutex_init(&vnode->stream.dir.cookie_lock, "rootfs dir cookies");
178 return vnode;
203 /*! Makes sure none of the dircookies point to the vnode passed in. */
205 update_dir_cookies(struct rootfs_vnode* dir, struct rootfs_vnode* vnode)
212 if (cookie->current == vnode)
213 cookie->current = vnode->dir_next;
221 struct rootfs_vnode* vnode;
228 for (vnode = dir->stream.dir.dir_head; vnode; vnode = vnode->dir_next) {
229 if (!strcmp(vnode->name, path))
230 return vnode;
238 struct rootfs_vnode* vnode)
244 while (node != NULL && strcmp(node->name, vnode->name) < 0) {
249 // the new vnode is the first entry in the list
250 vnode->dir_next = dir->stream.dir.dir_head;
251 dir->stream.dir.dir_head = vnode;
254 vnode->dir_next = last->dir_next;
255 last->dir_next = vnode;
258 vnode->parent = dir;
270 struct rootfs_vnode* vnode;
273 for (vnode = dir->stream.dir.dir_head, lastVnode = NULL; vnode != NULL;
274 lastVnode = vnode, vnode = vnode->dir_next) {
275 if (vnode == removeVnode) {
276 // make sure all dircookies dont point to this vnode
277 update_dir_cookies(dir, vnode);
280 lastVnode->dir_next = vnode->dir_next;
282 dir->stream.dir.dir_head = vnode->dir_next;
283 vnode->dir_next = NULL;
304 struct rootfs_vnode* vnode)
306 // schedule this vnode to be removed when it's ref goes to zero
308 bool gotNode = (get_vnode(fs->volume, vnode->id, NULL) == B_OK);
312 status = remove_vnode(fs->volume, vnode->id);
315 rootfs_remove_from_dir(fs, directory, vnode);
316 notify_entry_removed(fs->id, directory->id, vnode->name, vnode->id);
320 put_vnode(fs->volume, vnode->id);
330 struct rootfs_vnode* vnode;
335 vnode = rootfs_find_in_dir(dir, name);
336 if (!vnode)
338 else if (isDirectory && !S_ISDIR(vnode->stream.type))
340 else if (!isDirectory && S_ISDIR(vnode->stream.type))
342 else if (isDirectory && !rootfs_is_dir_empty(vnode))
350 return remove_node(fs, dir, vnode);
362 struct rootfs_vnode* vnode;
380 (addr_t)&vnode->all_next - (addr_t)vnode, &rootfs_vnode_compare_func,
387 // create the root vnode
388 vnode = rootfs_create_vnode(fs, NULL, ".", S_IFDIR | 0777);
389 if (vnode == NULL) {
393 vnode->parent = vnode;
395 fs->root_vnode = vnode;
396 hash_insert(fs->vnode_list_hash, vnode);
397 publish_vnode(volume, vnode->id, vnode, &sVnodeOps, vnode->stream.type, 0);
399 *_rootID = vnode->id;
427 while (struct rootfs_vnode* vnode = (struct rootfs_vnode*)
429 rootfs_delete_vnode(fs, vnode, true);
456 struct rootfs_vnode* vnode;
465 vnode = rootfs_find_in_dir(dir, name);
466 if (!vnode)
469 status_t status = get_vnode(fs->volume, vnode->id, NULL);
473 entry_cache_add(fs->volume->id, dir->id, name, vnode->id);
475 *_id = vnode->id;
484 struct rootfs_vnode* vnode = (struct rootfs_vnode*)_vnode->private_node;
486 TRACE(("rootfs_get_vnode_name: vnode = %p (name = %s)\n", vnode,
487 vnode->name));
489 strlcpy(buffer, vnode->name, bufferSize);
499 struct rootfs_vnode* vnode;
501 TRACE(("rootfs_getvnode: asking for vnode %Ld, r %d\n", id, reenter));
506 vnode = (rootfs_vnode*)hash_lookup(fs->vnode_list_hash, &id);
511 TRACE(("rootfs_getnvnode: looked it up at %p\n", vnode));
513 if (vnode == NULL)
516 _vnode->private_node = vnode;
518 *_type = vnode->stream.type;
529 struct rootfs_vnode* vnode = (struct rootfs_vnode*)_vnode->private_node;
531 TRACE(("rootfs_putvnode: entry on vnode 0x%Lx, r %d\n", vnode->id, reenter));
541 struct rootfs_vnode* vnode = (struct rootfs_vnode*)_vnode->private_node;
543 TRACE(("rootfs_remove_vnode: remove %p (0x%Lx), r %d\n", vnode, vnode->id,
549 if (vnode->dir_next) {
551 panic("rootfs_remove_vnode: vnode %p asked to be removed is present in "
552 "dir\n", vnode);
555 rootfs_delete_vnode(fs, vnode, false);
585 TRACE(("rootfs_close: entry vnode %p, cookie %p\n", _vnode->private_node,
614 rootfs_write(fs_volume* _volume, fs_vnode* vnode, void* cookie,
617 TRACE(("rootfs_write: vnode %p, cookie %p, pos 0x%Lx , len %#x\n",
618 vnode, cookie, pos, (int)*_length));
630 struct rootfs_vnode* vnode;
637 vnode = rootfs_find_in_dir(dir, name);
638 if (vnode != NULL)
641 TRACE(("rootfs_create: creating new vnode\n"));
642 vnode = rootfs_create_vnode(fs, dir, name, S_IFDIR | (mode & S_IUMSK));
643 if (vnode == NULL)
646 rootfs_insert_in_dir(fs, dir, vnode);
647 hash_insert(fs->vnode_list_hash, vnode);
649 entry_cache_add(fs->volume->id, dir->id, name, vnode->id);
650 notify_entry_created(fs->id, dir->id, name, vnode->id);
673 struct rootfs_vnode* vnode = (struct rootfs_vnode*)_v->private_node;
676 TRACE(("rootfs_open: vnode %p\n", vnode));
678 if (!S_ISDIR(vnode->stream.type))
689 cookie->current = vnode->stream.dir.dir_head;
692 mutex_lock(&vnode->stream.dir.cookie_lock);
693 list_add_item(&vnode->stream.dir.cookies, cookie);
694 mutex_unlock(&vnode->stream.dir.cookie_lock);
706 struct rootfs_vnode* vnode = (rootfs_vnode*)_vnode->private_node;
711 mutex_lock(&vnode->stream.dir.cookie_lock);
712 list_remove_item(&vnode->stream.dir.cookies, cookie);
713 mutex_unlock(&vnode->stream.dir.cookie_lock);
728 struct rootfs_vnode* vnode = (struct rootfs_vnode*)_vnode->private_node;
735 TRACE(("rootfs_read_dir: vnode %p, cookie %p, buffer = %p, bufferSize = %d, "
745 childNode = vnode;
747 nextChildNode = vnode->stream.dir.dir_head;
751 childNode = vnode->parent;
753 nextChildNode = vnode->stream.dir.dir_head;
794 struct rootfs_vnode* vnode = (rootfs_vnode*)_vnode->private_node;
800 cookie->current = vnode->stream.dir.dir_head;
811 TRACE(("rootfs_ioctl: vnode %p, cookie %p, op %d, buf %p, length %d\n",
864 struct rootfs_vnode* vnode;
870 vnode = rootfs_find_in_dir(dir, name);
871 if (vnode != NULL)
875 vnode = rootfs_create_vnode(fs, dir, name, S_IFLNK | (mode & S_IUMSK));
876 if (vnode == NULL)
879 rootfs_insert_in_dir(fs, dir, vnode);
880 hash_insert(fs->vnode_list_hash, vnode);
882 vnode->stream.symlink.path = strdup(path);
883 if (vnode->stream.symlink.path == NULL) {
884 rootfs_delete_vnode(fs, vnode, false);
887 vnode->stream.symlink.length = strlen(path);
889 entry_cache_add(fs->volume->id, dir->id, name, vnode->id);
891 notify_entry_created(fs->id, dir->id, name, vnode->id);
934 struct rootfs_vnode* vnode = rootfs_find_in_dir(fromDirectory, fromName);
935 if (vnode == NULL)
941 if (parent == vnode)
965 free(vnode->name);
966 vnode->name = nameBuffer;
969 strcpy(vnode->name, toName);
974 rootfs_remove_from_dir(fs, fromDirectory, vnode);
979 rootfs_insert_in_dir(fs, toDirectory, vnode);
981 entry_cache_add(fs->volume->id, toDirectory->id, toName, vnode->id);
984 toName, vnode->id);
994 struct rootfs_vnode* vnode = (rootfs_vnode*)_v->private_node;
996 TRACE(("rootfs_read_stat: vnode %p (0x%Lx), stat %p\n", vnode, vnode->id,
1002 stat->st_ino = vnode->id;
1003 if (S_ISLNK(vnode->stream.type))
1004 stat->st_size = vnode->stream.symlink.length;
1007 stat->st_mode = vnode->stream.type;
1013 stat->st_uid = vnode->uid;
1014 stat->st_gid = vnode->gid;
1018 stat->st_mtim = stat->st_ctim = vnode->modification_time;
1019 stat->st_crtim = vnode->creation_time;
1030 struct rootfs_vnode* vnode = (rootfs_vnode*)_vnode->private_node;
1032 TRACE(("rootfs_write_stat: vnode %p (0x%Lx), stat %p\n", vnode, vnode->id,
1042 vnode->stream.type = (vnode->stream.type & ~S_IUMSK)
1047 vnode->uid = stat->st_uid;
1049 vnode->gid = stat->st_gid;
1052 vnode->modification_time = stat->st_mtim;
1054 vnode->creation_time = stat->st_crtim;
1058 notify_stat_changed(fs->id, vnode->id, statMask);
1070 struct rootfs_vnode* vnode;
1075 vnode = rootfs_find_in_dir(dir, name);
1076 if (vnode != NULL)
1080 vnode = rootfs_create_vnode(fs, dir, name, mode);
1081 if (vnode == NULL)
1085 rootfs_insert_in_dir(fs, dir, vnode);
1089 hash_insert(fs->vnode_list_hash, vnode);
1091 _superVnode->private_node = vnode;
1093 *_nodeID = vnode->id;
1098 status_t status = publish_vnode(fs->volume, vnode->id,
1102 rootfs_remove_from_dir(fs, dir, vnode);
1103 rootfs_delete_vnode(fs, vnode, false);
1108 entry_cache_add(fs->volume->id, dir->id, name, vnode->id);
1109 notify_entry_created(fs->id, dir->id, name, vnode->id);