• Home
  • Raw
  • Download

Lines Matching refs:node

98 struct node {  struct
103 struct node *next; /* per-dir sibling list */ argument
104 struct node *child; /* first contained file by this dir */ argument
105 struct node *parent; /* containing directory */ argument
123 struct node root; argument
150 static void acquire_node_locked(struct node* node) in acquire_node_locked() argument
152 node->refcount++; in acquire_node_locked()
153 TRACE("ACQUIRE %p (%s) rc=%d\n", node, node->name, node->refcount); in acquire_node_locked()
156 static void remove_node_from_parent_locked(struct node* node);
158 static void release_node_locked(struct node* node) in release_node_locked() argument
160 TRACE("RELEASE %p (%s) rc=%d\n", node, node->name, node->refcount); in release_node_locked()
161 if (node->refcount > 0) { in release_node_locked()
162 node->refcount--; in release_node_locked()
163 if (!node->refcount) { in release_node_locked()
164 TRACE("DESTROY %p (%s)\n", node, node->name); in release_node_locked()
165 remove_node_from_parent_locked(node); in release_node_locked()
168 memset(node->name, 0xef, node->namelen); in release_node_locked()
169 free(node->name); in release_node_locked()
170 free(node->actual_name); in release_node_locked()
171 memset(node, 0xfc, sizeof(*node)); in release_node_locked()
172 free(node); in release_node_locked()
175 ERROR("Zero refcnt %p\n", node); in release_node_locked()
179 static void add_node_to_parent_locked(struct node *node, struct node *parent) { in add_node_to_parent_locked() argument
180 node->parent = parent; in add_node_to_parent_locked()
181 node->next = parent->child; in add_node_to_parent_locked()
182 parent->child = node; in add_node_to_parent_locked()
186 static void remove_node_from_parent_locked(struct node* node) in remove_node_from_parent_locked() argument
188 if (node->parent) { in remove_node_from_parent_locked()
189 if (node->parent->child == node) { in remove_node_from_parent_locked()
190 node->parent->child = node->parent->child->next; in remove_node_from_parent_locked()
192 struct node *node2; in remove_node_from_parent_locked()
193 node2 = node->parent->child; in remove_node_from_parent_locked()
194 while (node2->next != node) in remove_node_from_parent_locked()
196 node2->next = node->next; in remove_node_from_parent_locked()
198 release_node_locked(node->parent); in remove_node_from_parent_locked()
199 node->parent = NULL; in remove_node_from_parent_locked()
200 node->next = NULL; in remove_node_from_parent_locked()
209 static ssize_t get_node_path_locked(struct node* node, char* buf, size_t bufsize) in get_node_path_locked() argument
211 size_t namelen = node->namelen; in get_node_path_locked()
217 if (node->parent) { in get_node_path_locked()
218 pathlen = get_node_path_locked(node->parent, buf, bufsize - namelen - 2); in get_node_path_locked()
225 const char* name = node->actual_name ? node->actual_name : node->name; in get_node_path_locked()
303 struct node *create_node_locked(struct fuse* fuse, in create_node_locked()
304 struct node *parent, const char *name, const char* actual_name) in create_node_locked()
306 struct node *node; in create_node_locked() local
309 node = calloc(1, sizeof(struct node)); in create_node_locked()
310 if (!node) { in create_node_locked()
313 node->name = malloc(namelen + 1); in create_node_locked()
314 if (!node->name) { in create_node_locked()
315 free(node); in create_node_locked()
318 memcpy(node->name, name, namelen + 1); in create_node_locked()
320 node->actual_name = malloc(namelen + 1); in create_node_locked()
321 if (!node->actual_name) { in create_node_locked()
322 free(node->name); in create_node_locked()
323 free(node); in create_node_locked()
326 memcpy(node->actual_name, actual_name, namelen + 1); in create_node_locked()
328 node->namelen = namelen; in create_node_locked()
329 node->nid = ptr_to_id(node); in create_node_locked()
330 node->gen = fuse->next_generation++; in create_node_locked()
331 acquire_node_locked(node); in create_node_locked()
332 add_node_to_parent_locked(node, parent); in create_node_locked()
333 return node; in create_node_locked()
336 static int rename_node_locked(struct node *node, const char *name, in rename_node_locked() argument
344 if (namelen > node->namelen) { in rename_node_locked()
345 char* new_name = realloc(node->name, namelen + 1); in rename_node_locked()
349 node->name = new_name; in rename_node_locked()
350 if (need_actual_name && node->actual_name) { in rename_node_locked()
351 char* new_actual_name = realloc(node->actual_name, namelen + 1); in rename_node_locked()
355 node->actual_name = new_actual_name; in rename_node_locked()
361 if (!node->actual_name) { in rename_node_locked()
362 node->actual_name = malloc(namelen + 1); in rename_node_locked()
363 if (!node->actual_name) { in rename_node_locked()
367 memcpy(node->actual_name, actual_name, namelen + 1); in rename_node_locked()
369 free(node->actual_name); in rename_node_locked()
370 node->actual_name = NULL; in rename_node_locked()
372 memcpy(node->name, name, namelen + 1); in rename_node_locked()
373 node->namelen = namelen; in rename_node_locked()
377 static struct node *lookup_node_by_id_locked(struct fuse *fuse, __u64 nid) in lookup_node_by_id_locked()
386 static struct node* lookup_node_and_path_by_id_locked(struct fuse* fuse, __u64 nid, in lookup_node_and_path_by_id_locked()
389 struct node* node = lookup_node_by_id_locked(fuse, nid); in lookup_node_and_path_by_id_locked() local
390 if (node && get_node_path_locked(node, buf, bufsize) < 0) { in lookup_node_and_path_by_id_locked()
391 node = NULL; in lookup_node_and_path_by_id_locked()
393 return node; in lookup_node_and_path_by_id_locked()
396 static struct node *lookup_child_by_name_locked(struct node *node, const char *name) in lookup_child_by_name_locked() argument
398 for (node = node->child; node; node = node->next) { in lookup_child_by_name_locked()
403 if (!strcmp(name, node->name)) { in lookup_child_by_name_locked()
404 return node; in lookup_child_by_name_locked()
410 static struct node* acquire_or_create_child_locked( in acquire_or_create_child_locked()
411 struct fuse* fuse, struct node* parent, in acquire_or_create_child_locked()
414 struct node* child = lookup_child_by_name_locked(parent, name); in acquire_or_create_child_locked()
468 struct node* parent, const char* name, const char* actual_name, in fuse_reply_entry()
471 struct node* node; in fuse_reply_entry() local
480 node = acquire_or_create_child_locked(fuse, parent, name, actual_name); in fuse_reply_entry()
481 if (!node) { in fuse_reply_entry()
486 attr_from_stat(&out.attr, &s, node->nid); in fuse_reply_entry()
489 out.nodeid = node->nid; in fuse_reply_entry()
490 out.generation = node->gen; in fuse_reply_entry()
515 struct node* parent_node; in handle_lookup()
537 struct node* node; in handle_forget() local
540 node = lookup_node_by_id_locked(fuse, hdr->nodeid); in handle_forget()
542 hdr->nodeid, node ? node->name : "?"); in handle_forget()
543 if (node) { in handle_forget()
546 release_node_locked(node); in handle_forget()
556 struct node* node; in handle_getattr() local
560 node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path)); in handle_getattr()
562 req->getattr_flags, req->fh, hdr->nodeid, node ? node->name : "?"); in handle_getattr()
565 if (!node) { in handle_getattr()
574 struct node* node; in handle_setattr() local
579 node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path)); in handle_setattr()
581 req->fh, req->valid, hdr->nodeid, node ? node->name : "?"); in handle_setattr()
584 if (!node) { in handle_setattr()
632 struct node* parent_node; in handle_mknod()
658 struct node* parent_node; in handle_mkdir()
684 struct node* parent_node; in handle_unlink()
708 struct node* parent_node; in handle_rmdir()
733 struct node* old_parent_node; in handle_rename()
734 struct node* new_parent_node; in handle_rename()
735 struct node* child_node; in handle_rename()
804 struct node* node; in handle_open() local
810 node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path)); in handle_open()
812 req->flags, hdr->nodeid, node ? node->name : "?"); in handle_open()
815 if (!node) { in handle_open()
948 struct node* node; in handle_opendir() local
954 node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path)); in handle_opendir()
956 hdr->nodeid, node ? node->name : "?"); in handle_opendir()
959 if (!node) { in handle_opendir()