Lines Matching refs:pos
263 struct kernfs_node *pos; in kernfs_link_sibling() local
266 pos = rb_to_kn(*node); in kernfs_link_sibling()
268 result = kernfs_sd_compare(kn, pos); in kernfs_link_sibling()
270 node = &pos->rb.rb_left; in kernfs_link_sibling()
272 node = &pos->rb.rb_right; in kernfs_link_sibling()
961 static struct kernfs_node *kernfs_leftmost_descendant(struct kernfs_node *pos) in kernfs_leftmost_descendant() argument
968 last = pos; in kernfs_leftmost_descendant()
970 if (kernfs_type(pos) != KERNFS_DIR) in kernfs_leftmost_descendant()
973 rbn = rb_first(&pos->dir.children); in kernfs_leftmost_descendant()
977 pos = rb_to_kn(rbn); in kernfs_leftmost_descendant()
992 static struct kernfs_node *kernfs_next_descendant_post(struct kernfs_node *pos, in kernfs_next_descendant_post() argument
1000 if (!pos) in kernfs_next_descendant_post()
1004 if (pos == root) in kernfs_next_descendant_post()
1008 rbn = rb_next(&pos->rb); in kernfs_next_descendant_post()
1013 return pos->parent; in kernfs_next_descendant_post()
1031 struct kernfs_node *pos; in kernfs_activate() local
1035 pos = NULL; in kernfs_activate()
1036 while ((pos = kernfs_next_descendant_post(pos, kn))) { in kernfs_activate()
1037 if (!pos || (pos->flags & KERNFS_ACTIVATED)) in kernfs_activate()
1040 WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb)); in kernfs_activate()
1041 WARN_ON_ONCE(atomic_read(&pos->active) != KN_DEACTIVATED_BIAS); in kernfs_activate()
1043 atomic_sub(KN_DEACTIVATED_BIAS, &pos->active); in kernfs_activate()
1044 pos->flags |= KERNFS_ACTIVATED; in kernfs_activate()
1052 struct kernfs_node *pos; in __kernfs_remove() local
1067 pos = NULL; in __kernfs_remove()
1068 while ((pos = kernfs_next_descendant_post(pos, kn))) in __kernfs_remove()
1069 if (kernfs_active(pos)) in __kernfs_remove()
1070 atomic_add(KN_DEACTIVATED_BIAS, &pos->active); in __kernfs_remove()
1074 pos = kernfs_leftmost_descendant(kn); in __kernfs_remove()
1082 kernfs_get(pos); in __kernfs_remove()
1091 kernfs_drain(pos); in __kernfs_remove()
1099 if (!pos->parent || kernfs_unlink_sibling(pos)) { in __kernfs_remove()
1101 pos->parent ? pos->parent->iattr : NULL; in __kernfs_remove()
1109 kernfs_put(pos); in __kernfs_remove()
1112 kernfs_put(pos); in __kernfs_remove()
1113 } while (pos != kn); in __kernfs_remove()
1383 struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos) in kernfs_dir_pos() argument
1385 if (pos) { in kernfs_dir_pos()
1386 int valid = kernfs_active(pos) && in kernfs_dir_pos()
1387 pos->parent == parent && hash == pos->hash; in kernfs_dir_pos()
1388 kernfs_put(pos); in kernfs_dir_pos()
1390 pos = NULL; in kernfs_dir_pos()
1392 if (!pos && (hash > 1) && (hash < INT_MAX)) { in kernfs_dir_pos()
1395 pos = rb_to_kn(node); in kernfs_dir_pos()
1397 if (hash < pos->hash) in kernfs_dir_pos()
1399 else if (hash > pos->hash) in kernfs_dir_pos()
1406 while (pos && (!kernfs_active(pos) || pos->ns != ns)) { in kernfs_dir_pos()
1407 struct rb_node *node = rb_next(&pos->rb); in kernfs_dir_pos()
1409 pos = NULL; in kernfs_dir_pos()
1411 pos = rb_to_kn(node); in kernfs_dir_pos()
1413 return pos; in kernfs_dir_pos()
1417 struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) in kernfs_dir_next_pos() argument
1419 pos = kernfs_dir_pos(ns, parent, ino, pos); in kernfs_dir_next_pos()
1420 if (pos) { in kernfs_dir_next_pos()
1422 struct rb_node *node = rb_next(&pos->rb); in kernfs_dir_next_pos()
1424 pos = NULL; in kernfs_dir_next_pos()
1426 pos = rb_to_kn(node); in kernfs_dir_next_pos()
1427 } while (pos && (!kernfs_active(pos) || pos->ns != ns)); in kernfs_dir_next_pos()
1429 return pos; in kernfs_dir_next_pos()
1436 struct kernfs_node *pos = file->private_data; in kernfs_fop_readdir() local
1446 for (pos = kernfs_dir_pos(ns, parent, ctx->pos, pos); in kernfs_fop_readdir()
1447 pos; in kernfs_fop_readdir()
1448 pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) { in kernfs_fop_readdir()
1449 const char *name = pos->name; in kernfs_fop_readdir()
1450 unsigned int type = dt_type(pos); in kernfs_fop_readdir()
1452 ino_t ino = pos->ino; in kernfs_fop_readdir()
1454 ctx->pos = pos->hash; in kernfs_fop_readdir()
1455 file->private_data = pos; in kernfs_fop_readdir()
1456 kernfs_get(pos); in kernfs_fop_readdir()
1465 ctx->pos = INT_MAX; in kernfs_fop_readdir()