Lines Matching refs:kn
64 static const struct kernfs_ops *kernfs_ops(struct kernfs_node *kn)
66 if (kn->flags & KERNFS_LOCKDEP)
67 lockdep_assert_held(kn);
68 return kn->attr.ops;
96 const struct kernfs_ops *ops = kernfs_ops(of->kn);
100 kernfs_put_active(of->kn);
113 if (!kernfs_get_active(of->kn))
116 ops = kernfs_ops(of->kn);
135 const struct kernfs_ops *ops = kernfs_ops(of->kn);
166 of->event = atomic_read(&of->kn->attr.open->event);
168 return of->kn->attr.ops->seq_show(sf, v);
204 if (!kernfs_get_active(of->kn)) {
210 of->event = atomic_read(&of->kn->attr.open->event);
211 ops = kernfs_ops(of->kn);
217 kernfs_put_active(of->kn);
240 if (kernfs_of(iocb->ki_filp)->kn->flags & KERNFS_HAS_SEQ_SHOW)
288 if (!kernfs_get_active(of->kn)) {
294 ops = kernfs_ops(of->kn);
300 kernfs_put_active(of->kn);
322 if (!kernfs_get_active(of->kn))
328 kernfs_put_active(of->kn);
340 if (!kernfs_get_active(of->kn))
347 kernfs_put_active(of->kn);
360 if (!kernfs_get_active(of->kn))
369 kernfs_put_active(of->kn);
383 if (!kernfs_get_active(of->kn))
390 kernfs_put_active(of->kn);
405 if (!kernfs_get_active(of->kn))
412 kernfs_put_active(of->kn);
426 if (!kernfs_get_active(of->kn))
433 kernfs_put_active(of->kn);
463 if (!(of->kn->flags & KERNFS_HAS_MMAP))
469 if (!kernfs_get_active(of->kn))
472 ops = kernfs_ops(of->kn);
502 kernfs_put_active(of->kn);
511 * @kn: target kernfs_node
514 * If @kn->attr.open exists, increment its reference count; otherwise,
523 static int kernfs_get_open_node(struct kernfs_node *kn,
532 if (!kn->attr.open && new_on) {
533 kn->attr.open = new_on;
537 on = kn->attr.open;
565 * @kn: target kernfs_nodet
568 * Put @kn->attr.open and unlink @of from the files list. If
574 static void kernfs_put_open_node(struct kernfs_node *kn,
577 struct kernfs_open_node *on = kn->attr.open;
587 kn->attr.open = NULL;
599 struct kernfs_node *kn = inode->i_private;
600 struct kernfs_root *root = kernfs_root(kn);
606 if (!kernfs_get_active(kn))
609 ops = kernfs_ops(kn);
652 of->kn = kn;
698 error = kernfs_get_open_node(kn, of);
710 kernfs_put_active(kn);
714 kernfs_put_open_node(kn, of);
721 kernfs_put_active(kn);
726 static void kernfs_release_file(struct kernfs_node *kn,
744 kn->attr.ops->release(of);
751 struct kernfs_node *kn = inode->i_private;
754 if (kn->flags & KERNFS_HAS_RELEASE) {
756 kernfs_release_file(kn, of);
760 kernfs_put_open_node(kn, of);
768 void kernfs_drain_open_files(struct kernfs_node *kn)
773 if (!(kn->flags & (KERNFS_HAS_MMAP | KERNFS_HAS_RELEASE)))
777 on = kn->attr.open;
789 if (kn->flags & KERNFS_HAS_MMAP)
792 if (kn->flags & KERNFS_HAS_RELEASE)
793 kernfs_release_file(kn, of);
798 kernfs_put_open_node(kn, NULL);
817 struct kernfs_node *kn = kernfs_dentry_node(of->file->f_path.dentry);
818 struct kernfs_open_node *on = kn->attr.open;
831 struct kernfs_node *kn = kernfs_dentry_node(filp->f_path.dentry);
834 if (!kernfs_get_active(kn))
837 if (kn->attr.ops->poll)
838 ret = kn->attr.ops->poll(of, wait);
842 kernfs_put_active(kn);
848 struct kernfs_node *kn;
853 kn = kernfs_notify_list;
854 if (kn == KERNFS_NOTIFY_EOL) {
858 kernfs_notify_list = kn->attr.notify_next;
859 kn->attr.notify_next = NULL;
865 list_for_each_entry(info, &kernfs_root(kn)->supers, node) {
872 * We want fsnotify_modify() on @kn but as the
877 inode = ilookup(info->sb, kernfs_ino(kn));
881 name = (struct qstr)QSTR_INIT(kn->name, strlen(kn->name));
882 parent = kernfs_get_parent(kn);
902 kernfs_put(kn);
908 * @kn: file to notify
910 * Notify @kn such that poll(2) on @kn wakes up. Maybe be called from any
913 void kernfs_notify(struct kernfs_node *kn)
919 if (WARN_ON(kernfs_type(kn) != KERNFS_FILE))
924 on = kn->attr.open;
933 if (!kn->attr.notify_next) {
934 kernfs_get(kn);
935 kn->attr.notify_next = kernfs_notify_list;
936 kernfs_notify_list = kn;
979 struct kernfs_node *kn;
985 kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG,
987 if (!kn)
990 kn->attr.ops = ops;
991 kn->attr.size = size;
992 kn->ns = ns;
993 kn->priv = priv;
997 lockdep_init_map(&kn->dep_map, "kn->active", key, 0);
998 kn->flags |= KERNFS_LOCKDEP;
1003 * kn->attr.ops is accesible only while holding active ref. We
1008 kn->flags |= KERNFS_HAS_SEQ_SHOW;
1010 kn->flags |= KERNFS_HAS_MMAP;
1012 kn->flags |= KERNFS_HAS_RELEASE;
1014 rc = kernfs_add_one(kn);
1016 kernfs_put(kn);
1019 return kn;