Lines Matching refs:kn
64 static const struct kernfs_ops *kernfs_ops(struct kernfs_node *kn) in kernfs_ops() argument
66 if (kn->flags & KERNFS_LOCKDEP) in kernfs_ops()
67 lockdep_assert_held(kn); in kernfs_ops()
68 return kn->attr.ops; in kernfs_ops()
96 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_stop_active()
100 kernfs_put_active(of->kn); in kernfs_seq_stop_active()
113 if (!kernfs_get_active(of->kn)) in kernfs_seq_start()
116 ops = kernfs_ops(of->kn); in kernfs_seq_start()
135 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_next()
166 of->event = atomic_read(&of->kn->attr.open->event); in kernfs_seq_show()
168 return of->kn->attr.ops->seq_show(sf, v); in kernfs_seq_show()
205 if (!kernfs_get_active(of->kn)) { in kernfs_file_direct_read()
211 of->event = atomic_read(&of->kn->attr.open->event); in kernfs_file_direct_read()
212 ops = kernfs_ops(of->kn); in kernfs_file_direct_read()
218 kernfs_put_active(of->kn); in kernfs_file_direct_read()
251 if (of->kn->flags & KERNFS_HAS_SEQ_SHOW) in kernfs_fop_read()
308 if (!kernfs_get_active(of->kn)) { in kernfs_fop_write()
314 ops = kernfs_ops(of->kn); in kernfs_fop_write()
320 kernfs_put_active(of->kn); in kernfs_fop_write()
342 if (!kernfs_get_active(of->kn)) in kernfs_vma_open()
348 kernfs_put_active(of->kn); in kernfs_vma_open()
360 if (!kernfs_get_active(of->kn)) in kernfs_vma_fault()
367 kernfs_put_active(of->kn); in kernfs_vma_fault()
380 if (!kernfs_get_active(of->kn)) in kernfs_vma_page_mkwrite()
389 kernfs_put_active(of->kn); in kernfs_vma_page_mkwrite()
403 if (!kernfs_get_active(of->kn)) in kernfs_vma_access()
410 kernfs_put_active(of->kn); in kernfs_vma_access()
425 if (!kernfs_get_active(of->kn)) in kernfs_vma_set_policy()
432 kernfs_put_active(of->kn); in kernfs_vma_set_policy()
446 if (!kernfs_get_active(of->kn)) in kernfs_vma_get_policy()
453 kernfs_put_active(of->kn); in kernfs_vma_get_policy()
483 if (!(of->kn->flags & KERNFS_HAS_MMAP)) in kernfs_fop_mmap()
489 if (!kernfs_get_active(of->kn)) in kernfs_fop_mmap()
492 ops = kernfs_ops(of->kn); in kernfs_fop_mmap()
522 kernfs_put_active(of->kn); in kernfs_fop_mmap()
543 static int kernfs_get_open_node(struct kernfs_node *kn, in kernfs_get_open_node() argument
552 if (!kn->attr.open && new_on) { in kernfs_get_open_node()
553 kn->attr.open = new_on; in kernfs_get_open_node()
557 on = kn->attr.open; in kernfs_get_open_node()
594 static void kernfs_put_open_node(struct kernfs_node *kn, in kernfs_put_open_node() argument
597 struct kernfs_open_node *on = kn->attr.open; in kernfs_put_open_node()
607 kn->attr.open = NULL; in kernfs_put_open_node()
619 struct kernfs_node *kn = inode->i_private; in kernfs_fop_open() local
620 struct kernfs_root *root = kernfs_root(kn); in kernfs_fop_open()
626 if (!kernfs_get_active(kn)) in kernfs_fop_open()
629 ops = kernfs_ops(kn); in kernfs_fop_open()
672 of->kn = kn; in kernfs_fop_open()
718 error = kernfs_get_open_node(kn, of); in kernfs_fop_open()
730 kernfs_put_active(kn); in kernfs_fop_open()
734 kernfs_put_open_node(kn, of); in kernfs_fop_open()
741 kernfs_put_active(kn); in kernfs_fop_open()
746 static void kernfs_release_file(struct kernfs_node *kn, in kernfs_release_file() argument
764 kn->attr.ops->release(of); in kernfs_release_file()
771 struct kernfs_node *kn = inode->i_private; in kernfs_fop_release() local
774 if (kn->flags & KERNFS_HAS_RELEASE) { in kernfs_fop_release()
776 kernfs_release_file(kn, of); in kernfs_fop_release()
780 kernfs_put_open_node(kn, of); in kernfs_fop_release()
788 void kernfs_drain_open_files(struct kernfs_node *kn) in kernfs_drain_open_files() argument
793 if (!(kn->flags & (KERNFS_HAS_MMAP | KERNFS_HAS_RELEASE))) in kernfs_drain_open_files()
797 on = kn->attr.open; in kernfs_drain_open_files()
809 if (kn->flags & KERNFS_HAS_MMAP) in kernfs_drain_open_files()
812 if (kn->flags & KERNFS_HAS_RELEASE) in kernfs_drain_open_files()
813 kernfs_release_file(kn, of); in kernfs_drain_open_files()
818 kernfs_put_open_node(kn, NULL); in kernfs_drain_open_files()
838 struct kernfs_node *kn = kernfs_dentry_node(filp->f_path.dentry); in kernfs_fop_poll() local
839 struct kernfs_open_node *on = kn->attr.open; in kernfs_fop_poll()
841 if (!kernfs_get_active(kn)) in kernfs_fop_poll()
846 kernfs_put_active(kn); in kernfs_fop_poll()
859 struct kernfs_node *kn; in kernfs_notify_workfn() local
865 kn = kernfs_notify_list; in kernfs_notify_workfn()
866 if (kn == KERNFS_NOTIFY_EOL) { in kernfs_notify_workfn()
870 kernfs_notify_list = kn->attr.notify_next; in kernfs_notify_workfn()
871 kn->attr.notify_next = NULL; in kernfs_notify_workfn()
877 on = kn->attr.open; in kernfs_notify_workfn()
888 list_for_each_entry(info, &kernfs_root(kn)->supers, node) { in kernfs_notify_workfn()
898 inode = ilookup(info->sb, kn->id.ino); in kernfs_notify_workfn()
902 parent = kernfs_get_parent(kn); in kernfs_notify_workfn()
909 inode, FSNOTIFY_EVENT_INODE, kn->name, 0); in kernfs_notify_workfn()
917 kn->name, 0); in kernfs_notify_workfn()
922 kernfs_put(kn); in kernfs_notify_workfn()
933 void kernfs_notify(struct kernfs_node *kn) in kernfs_notify() argument
938 if (WARN_ON(kernfs_type(kn) != KERNFS_FILE)) in kernfs_notify()
942 if (!kn->attr.notify_next) { in kernfs_notify()
943 kernfs_get(kn); in kernfs_notify()
944 kn->attr.notify_next = kernfs_notify_list; in kernfs_notify()
945 kernfs_notify_list = kn; in kernfs_notify()
986 struct kernfs_node *kn; in __kernfs_create_file() local
992 kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, in __kernfs_create_file()
994 if (!kn) in __kernfs_create_file()
997 kn->attr.ops = ops; in __kernfs_create_file()
998 kn->attr.size = size; in __kernfs_create_file()
999 kn->ns = ns; in __kernfs_create_file()
1000 kn->priv = priv; in __kernfs_create_file()
1004 lockdep_init_map(&kn->dep_map, "kn->count", key, 0); in __kernfs_create_file()
1005 kn->flags |= KERNFS_LOCKDEP; in __kernfs_create_file()
1015 kn->flags |= KERNFS_HAS_SEQ_SHOW; in __kernfs_create_file()
1017 kn->flags |= KERNFS_HAS_MMAP; in __kernfs_create_file()
1019 kn->flags |= KERNFS_HAS_RELEASE; in __kernfs_create_file()
1021 rc = kernfs_add_one(kn); in __kernfs_create_file()
1023 kernfs_put(kn); in __kernfs_create_file()
1026 return kn; in __kernfs_create_file()