Lines Matching full:of

33  * pending queue is implemented as a singly linked list of kernfs_nodes.
62 * of_on - Get the kernfs_open_node of the specified kernfs_open_file
63 * @of: target kernfs_open_file
65 * Return: the kernfs_open_node of the kernfs_open_file
67 static struct kernfs_open_node *of_on(struct kernfs_open_file *of) in of_on() argument
69 return rcu_dereference_protected(of->kn->attr.open, in of_on()
70 !list_empty(&of->list)); in of_on()
78 * Fetch and return ->attr.open of @kn when caller holds the
81 * Update of ->attr.open happens under kernfs_open_file_mutex_ptr(kn). So when
137 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop_active() local
138 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_stop_active()
142 kernfs_put_active(of->kn); in kernfs_seq_stop_active()
147 struct kernfs_open_file *of = sf->private; in kernfs_seq_start() local
151 * @of->mutex nests outside active ref and is primarily to ensure that in kernfs_seq_start()
154 mutex_lock(&of->mutex); in kernfs_seq_start()
155 if (!kernfs_get_active(of->kn)) in kernfs_seq_start()
158 ops = kernfs_ops(of->kn); in kernfs_seq_start()
171 struct kernfs_open_file *of = sf->private; in kernfs_seq_next() local
172 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_next()
192 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop() local
196 mutex_unlock(&of->mutex); in kernfs_seq_stop()
201 struct kernfs_open_file *of = sf->private; in kernfs_seq_show() local
203 of->event = atomic_read(&of_on(of)->event); in kernfs_seq_show()
205 return of->kn->attr.ops->seq_show(sf, v); in kernfs_seq_show()
223 struct kernfs_open_file *of = kernfs_of(iocb->ki_filp); in kernfs_file_read_iter() local
228 buf = of->prealloc_buf; in kernfs_file_read_iter()
230 mutex_lock(&of->prealloc_mutex); in kernfs_file_read_iter()
237 * @of->mutex nests outside active ref and is used both to ensure that in kernfs_file_read_iter()
240 mutex_lock(&of->mutex); in kernfs_file_read_iter()
241 if (!kernfs_get_active(of->kn)) { in kernfs_file_read_iter()
243 mutex_unlock(&of->mutex); in kernfs_file_read_iter()
247 of->event = atomic_read(&of_on(of)->event); in kernfs_file_read_iter()
249 ops = kernfs_ops(of->kn); in kernfs_file_read_iter()
251 len = ops->read(of, buf, len, iocb->ki_pos); in kernfs_file_read_iter()
255 kernfs_put_active(of->kn); in kernfs_file_read_iter()
256 mutex_unlock(&of->mutex); in kernfs_file_read_iter()
269 if (buf == of->prealloc_buf) in kernfs_file_read_iter()
270 mutex_unlock(&of->prealloc_mutex); in kernfs_file_read_iter()
295 struct kernfs_open_file *of = kernfs_of(iocb->ki_filp); in kernfs_fop_write_iter() local
300 if (of->atomic_write_len) { in kernfs_fop_write_iter()
301 if (len > of->atomic_write_len) in kernfs_fop_write_iter()
307 buf = of->prealloc_buf; in kernfs_fop_write_iter()
309 mutex_lock(&of->prealloc_mutex); in kernfs_fop_write_iter()
322 * @of->mutex nests outside active ref and is used both to ensure that in kernfs_fop_write_iter()
325 mutex_lock(&of->mutex); in kernfs_fop_write_iter()
326 if (!kernfs_get_active(of->kn)) { in kernfs_fop_write_iter()
327 mutex_unlock(&of->mutex); in kernfs_fop_write_iter()
332 ops = kernfs_ops(of->kn); in kernfs_fop_write_iter()
334 len = ops->write(of, buf, len, iocb->ki_pos); in kernfs_fop_write_iter()
338 kernfs_put_active(of->kn); in kernfs_fop_write_iter()
339 mutex_unlock(&of->mutex); in kernfs_fop_write_iter()
345 if (buf == of->prealloc_buf) in kernfs_fop_write_iter()
346 mutex_unlock(&of->prealloc_mutex); in kernfs_fop_write_iter()
355 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_open() local
357 if (!of->vm_ops) in kernfs_vma_open()
360 if (!kernfs_get_active(of->kn)) in kernfs_vma_open()
363 if (of->vm_ops->open) in kernfs_vma_open()
364 of->vm_ops->open(vma); in kernfs_vma_open()
366 kernfs_put_active(of->kn); in kernfs_vma_open()
372 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_fault() local
375 if (!of->vm_ops) in kernfs_vma_fault()
378 if (!kernfs_get_active(of->kn)) in kernfs_vma_fault()
382 if (of->vm_ops->fault) in kernfs_vma_fault()
383 ret = of->vm_ops->fault(vmf); in kernfs_vma_fault()
385 kernfs_put_active(of->kn); in kernfs_vma_fault()
392 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_page_mkwrite() local
395 if (!of->vm_ops) in kernfs_vma_page_mkwrite()
398 if (!kernfs_get_active(of->kn)) in kernfs_vma_page_mkwrite()
402 if (of->vm_ops->page_mkwrite) in kernfs_vma_page_mkwrite()
403 ret = of->vm_ops->page_mkwrite(vmf); in kernfs_vma_page_mkwrite()
407 kernfs_put_active(of->kn); in kernfs_vma_page_mkwrite()
415 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_access() local
418 if (!of->vm_ops) in kernfs_vma_access()
421 if (!kernfs_get_active(of->kn)) in kernfs_vma_access()
425 if (of->vm_ops->access) in kernfs_vma_access()
426 ret = of->vm_ops->access(vma, addr, buf, len, write); in kernfs_vma_access()
428 kernfs_put_active(of->kn); in kernfs_vma_access()
437 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_set_policy() local
440 if (!of->vm_ops) in kernfs_vma_set_policy()
443 if (!kernfs_get_active(of->kn)) in kernfs_vma_set_policy()
447 if (of->vm_ops->set_policy) in kernfs_vma_set_policy()
448 ret = of->vm_ops->set_policy(vma, new); in kernfs_vma_set_policy()
450 kernfs_put_active(of->kn); in kernfs_vma_set_policy()
458 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_get_policy() local
461 if (!of->vm_ops) in kernfs_vma_get_policy()
464 if (!kernfs_get_active(of->kn)) in kernfs_vma_get_policy()
468 if (of->vm_ops->get_policy) in kernfs_vma_get_policy()
469 pol = of->vm_ops->get_policy(vma, addr); in kernfs_vma_get_policy()
471 kernfs_put_active(of->kn); in kernfs_vma_get_policy()
490 struct kernfs_open_file *of = kernfs_of(file); in kernfs_fop_mmap() local
495 * mmap path and of->mutex are prone to triggering spurious lockdep in kernfs_fop_mmap()
498 * without grabbing @of->mutex by testing HAS_MMAP flag. See the in kernfs_fop_mmap()
501 if (!(of->kn->flags & KERNFS_HAS_MMAP)) in kernfs_fop_mmap()
504 mutex_lock(&of->mutex); in kernfs_fop_mmap()
507 if (!kernfs_get_active(of->kn)) in kernfs_fop_mmap()
510 ops = kernfs_ops(of->kn); in kernfs_fop_mmap()
511 rc = ops->mmap(of, vma); in kernfs_fop_mmap()
516 * PowerPC's pci_mmap of legacy_mem uses shmem_zero_setup() in kernfs_fop_mmap()
517 * to satisfy versions of X which crash if the mmap fails: that in kernfs_fop_mmap()
524 if (of->mmapped && of->vm_ops != vma->vm_ops) in kernfs_fop_mmap()
535 of->mmapped = true; in kernfs_fop_mmap()
536 of_on(of)->nr_mmapped++; in kernfs_fop_mmap()
537 of->vm_ops = vma->vm_ops; in kernfs_fop_mmap()
540 kernfs_put_active(of->kn); in kernfs_fop_mmap()
542 mutex_unlock(&of->mutex); in kernfs_fop_mmap()
550 * @of: kernfs_open_file for this instance of open
553 * create one. @of is chained to the files list.
562 struct kernfs_open_file *of) in kernfs_get_open_node() argument
583 list_add_tail(&of->list, &on->files); in kernfs_get_open_node()
592 * kernfs_unlink_open_file - Unlink @of from @kn.
595 * @of: associated kernfs_open_file
598 * Unlink @of from list of @kn's associated open files. If list of
606 struct kernfs_open_file *of, in kernfs_unlink_open_file() argument
620 if (of) { in kernfs_unlink_open_file()
622 WARN_ON_ONCE(of->released == open_failed); in kernfs_unlink_open_file()
626 if (of->mmapped) in kernfs_unlink_open_file()
628 list_del(&of->list); in kernfs_unlink_open_file()
644 struct kernfs_open_file *of; in kernfs_fop_open() local
670 of = kzalloc(sizeof(struct kernfs_open_file), GFP_KERNEL); in kernfs_fop_open()
671 if (!of) in kernfs_fop_open()
676 * @of->mutex for files which implement mmap. This is a rather in kernfs_fop_open()
678 * mm->mmap_lock - mmap nests @of->mutex under mm->mmap_lock and in kernfs_fop_open()
680 * which mm->mmap_lock nests, while holding @of->mutex. As each in kernfs_fop_open()
686 * Both paths of the branch look the same. They're supposed to in kernfs_fop_open()
687 * look that way and give @of->mutex different static lockdep keys. in kernfs_fop_open()
690 mutex_init(&of->mutex); in kernfs_fop_open()
692 mutex_init(&of->mutex); in kernfs_fop_open()
694 of->kn = kn; in kernfs_fop_open()
695 of->file = file; in kernfs_fop_open()
701 of->atomic_write_len = ops->atomic_write_len; in kernfs_fop_open()
712 int len = of->atomic_write_len ?: PAGE_SIZE; in kernfs_fop_open()
713 of->prealloc_buf = kmalloc(len + 1, GFP_KERNEL); in kernfs_fop_open()
715 if (!of->prealloc_buf) in kernfs_fop_open()
717 mutex_init(&of->prealloc_mutex); in kernfs_fop_open()
732 of->seq_file = file->private_data; in kernfs_fop_open()
733 of->seq_file->private = of; in kernfs_fop_open()
740 error = kernfs_get_open_node(kn, of); in kernfs_fop_open()
745 /* nobody has access to @of yet, skip @of->mutex */ in kernfs_fop_open()
746 error = ops->open(of); in kernfs_fop_open()
756 kernfs_unlink_open_file(kn, of, true); in kernfs_fop_open()
760 kfree(of->prealloc_buf); in kernfs_fop_open()
761 kfree(of); in kernfs_fop_open()
769 struct kernfs_open_file *of) in kernfs_release_file() argument
772 * @of is guaranteed to have no other file operations in flight and in kernfs_release_file()
774 * @kernfs_open_file_mutex_ptr(kn) is enough. @of->mutex can't be used in kernfs_release_file()
780 if (!of->released) { in kernfs_release_file()
786 kn->attr.ops->release(of); in kernfs_release_file()
787 of->released = true; in kernfs_release_file()
788 of_on(of)->nr_to_release--; in kernfs_release_file()
795 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_release() local
801 kernfs_release_file(kn, of); in kernfs_fop_release()
805 kernfs_unlink_open_file(kn, of, false); in kernfs_fop_release()
807 kfree(of->prealloc_buf); in kernfs_fop_release()
808 kfree(of); in kernfs_fop_release()
835 struct kernfs_open_file *of; in kernfs_drain_open_files() local
845 list_for_each_entry(of, &on->files, list) { in kernfs_drain_open_files()
846 struct inode *inode = file_inode(of->file); in kernfs_drain_open_files()
848 if (of->mmapped) { in kernfs_drain_open_files()
850 of->mmapped = false; in kernfs_drain_open_files()
855 kernfs_release_file(kn, of); in kernfs_drain_open_files()
876 __poll_t kernfs_generic_poll(struct kernfs_open_file *of, poll_table *wait) in kernfs_generic_poll() argument
878 struct kernfs_open_node *on = of_on(of); in kernfs_generic_poll()
880 poll_wait(of->file, &on->poll, wait); in kernfs_generic_poll()
882 if (of->event != atomic_read(&on->event)) in kernfs_generic_poll()
890 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_poll() local
898 ret = kn->attr.ops->poll(of, wait); in kernfs_fop_poll()
900 ret = kernfs_generic_poll(of, wait); in kernfs_fop_poll()
1021 * @name: name of the file
1022 * @mode: mode of the file
1023 * @uid: uid of the file
1024 * @gid: gid of the file
1025 * @size: size of the file
1028 * @ns: optional namespace tag of the file