Home | History | Annotate | Download | only in sdcard

Lines Matching defs:node

52  * CREAT) must bump that node's refcount
61 * - need to move/rename node on RENAME
79 struct node *node;
84 struct node *node;
88 struct node {
92 struct node *next;
93 struct node *child;
94 struct node *all;
95 struct node *parent;
109 struct node *all;
111 struct node root;
117 char *node_get_path(struct node *node, char *buf, const char *name)
128 while (node) {
129 name = node->name;
130 len = node->namelen;
131 node = node->parent;
173 int node_get_attr(struct node *node, struct fuse_attr *attr)
179 path = node_get_path(node, buffer, 0);
187 attr->ino = node->nid;
192 struct node *node_create(struct node *parent, const char *name, __u64 nid, __u64 gen)
194 struct node *node;
197 node = calloc(1, sizeof(struct node) + namelen);
198 if (node == 0) {
202 node->nid = nid;
203 node->gen = gen;
204 node->parent = parent;
205 node->next = parent->child;
206 parent->child = node;
207 memcpy(node->name, name, namelen + 1);
208 node->namelen = namelen;
211 return node;
245 struct node *lookup_by_inode(struct fuse *fuse, __u64 nid)
254 struct node *lookup_child_by_name(struct node *node, const char *name)
256 for (node = node->child; node; node = node->next) {
257 if (!strcmp(name, node->name)) {
258 return node;
264 struct node *lookup_child_by_inode(struct node *node, __u64 nid)
266 for (node = node->child; node; node = node->next) {
267 if (node->nid == nid) {
268 return node;
274 struct node *node_lookup(struct fuse *fuse, struct node *parent, const char *name,
280 struct node *node;
289 node = lookup_child_by_name(parent, name);
290 if (!node) {
291 node = node_create(parent, name, fuse->next_node_id++, fuse->next_generation++);
292 if (!node)
294 node->nid = ptr_to_id(node);
295 node->all = fuse->all;
296 fuse->all = node;
300 attr->ino = node->nid;
302 return node;
305 void node_release(struct node *node)
307 TRACE("RELEASE %p (%s) rc=%d\n", node, node->name, node->refcount);
308 node->refcount--;
309 if (node->refcount == 0) {
310 if (node->parent->child == node) {
311 node->parent->child = node->parent->child->next;
313 struct node *node2;
315 node2 = node->parent->child;
316 while (node2->next != node)
318 node2->next = node->next;
321 TRACE("DESTROY %p (%s)\n", node, node->name);
323 node_release(node->parent);
325 node->parent = 0;
326 node->next = 0;
329 memset(node, 0xef, sizeof(*node) + strlen(node->name));
331 free(node);
368 void lookup_entry(struct fuse *fuse, struct node *node,
375 node = node_lookup(fuse, node, name, &out.attr);
376 if (!node) {
381 node->refcount++;
382 // fprintf(stderr,"ACQUIRE %p (%s) rc=%d\n", node, node->name, node->refcount);
383 out.nodeid = node->nid;
384 out.generation = node->gen;
393 struct node *node;
403 node = lookup_by_inode(fuse, hdr->nodeid);
404 if (!node) {
409 node = 0;
415 lookup_entry(fuse, node, (char*) data, hdr->unique);
420 TRACE("FORGET %llx (%s) #%lld\n", hdr->nodeid, node->name, req->nlookup);
423 node_release(node);
433 node_get_attr(node, &out.attr);
448 node_get_attr(node, &out.attr);
461 path = node_get_path(node, buffer, name);
468 lookup_entry(fuse, node, name, hdr->unique);
479 path = node_get_path(node, buffer, name);
486 lookup_entry(fuse, node, name, hdr->unique);
494 path = node_get_path(node, buffer, (char*) data);
503 path = node_get_path(node, buffer, (char*) data);
514 struct node *newnode;
523 oldpath = node_get_path(node, oldbuffer, oldname);
543 path = node_get_path(node, buffer, 0);
644 path = node_get_path(node, buffer, 0);