Lines Matching refs:of
65 static struct kernfs_open_node *of_on(struct kernfs_open_file *of) in of_on() argument
67 return rcu_dereference_protected(of->kn->attr.open, in of_on()
68 !list_empty(&of->list)); in of_on()
133 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop_active() local
134 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_stop_active()
138 kernfs_put_active(of->kn); in kernfs_seq_stop_active()
143 struct kernfs_open_file *of = sf->private; in kernfs_seq_start() local
150 mutex_lock(&of->mutex); in kernfs_seq_start()
151 if (!kernfs_get_active(of->kn)) in kernfs_seq_start()
154 ops = kernfs_ops(of->kn); in kernfs_seq_start()
167 struct kernfs_open_file *of = sf->private; in kernfs_seq_next() local
168 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_next()
188 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop() local
192 mutex_unlock(&of->mutex); in kernfs_seq_stop()
197 struct kernfs_open_file *of = sf->private; in kernfs_seq_show() local
199 of->event = atomic_read(&of_on(of)->event); in kernfs_seq_show()
201 return of->kn->attr.ops->seq_show(sf, v); in kernfs_seq_show()
219 struct kernfs_open_file *of = kernfs_of(iocb->ki_filp); in kernfs_file_read_iter() local
224 buf = of->prealloc_buf; in kernfs_file_read_iter()
226 mutex_lock(&of->prealloc_mutex); in kernfs_file_read_iter()
236 mutex_lock(&of->mutex); in kernfs_file_read_iter()
237 if (!kernfs_get_active(of->kn)) { in kernfs_file_read_iter()
239 mutex_unlock(&of->mutex); in kernfs_file_read_iter()
243 of->event = atomic_read(&of_on(of)->event); in kernfs_file_read_iter()
245 ops = kernfs_ops(of->kn); in kernfs_file_read_iter()
247 len = ops->read(of, buf, len, iocb->ki_pos); in kernfs_file_read_iter()
251 kernfs_put_active(of->kn); in kernfs_file_read_iter()
252 mutex_unlock(&of->mutex); in kernfs_file_read_iter()
265 if (buf == of->prealloc_buf) in kernfs_file_read_iter()
266 mutex_unlock(&of->prealloc_mutex); in kernfs_file_read_iter()
291 struct kernfs_open_file *of = kernfs_of(iocb->ki_filp); in kernfs_fop_write_iter() local
296 if (of->atomic_write_len) { in kernfs_fop_write_iter()
297 if (len > of->atomic_write_len) in kernfs_fop_write_iter()
303 buf = of->prealloc_buf; in kernfs_fop_write_iter()
305 mutex_lock(&of->prealloc_mutex); in kernfs_fop_write_iter()
321 mutex_lock(&of->mutex); in kernfs_fop_write_iter()
322 if (!kernfs_get_active(of->kn)) { in kernfs_fop_write_iter()
323 mutex_unlock(&of->mutex); in kernfs_fop_write_iter()
328 ops = kernfs_ops(of->kn); in kernfs_fop_write_iter()
330 len = ops->write(of, buf, len, iocb->ki_pos); in kernfs_fop_write_iter()
334 kernfs_put_active(of->kn); in kernfs_fop_write_iter()
335 mutex_unlock(&of->mutex); in kernfs_fop_write_iter()
341 if (buf == of->prealloc_buf) in kernfs_fop_write_iter()
342 mutex_unlock(&of->prealloc_mutex); in kernfs_fop_write_iter()
351 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_open() local
353 if (!of->vm_ops) in kernfs_vma_open()
356 if (!kernfs_get_active(of->kn)) in kernfs_vma_open()
359 if (of->vm_ops->open) in kernfs_vma_open()
360 of->vm_ops->open(vma); in kernfs_vma_open()
362 kernfs_put_active(of->kn); in kernfs_vma_open()
368 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_fault() local
371 if (!of->vm_ops) in kernfs_vma_fault()
374 if (!kernfs_get_active(of->kn)) in kernfs_vma_fault()
378 if (of->vm_ops->fault) in kernfs_vma_fault()
379 ret = of->vm_ops->fault(vmf); in kernfs_vma_fault()
381 kernfs_put_active(of->kn); in kernfs_vma_fault()
388 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_page_mkwrite() local
391 if (!of->vm_ops) in kernfs_vma_page_mkwrite()
394 if (!kernfs_get_active(of->kn)) in kernfs_vma_page_mkwrite()
398 if (of->vm_ops->page_mkwrite) in kernfs_vma_page_mkwrite()
399 ret = of->vm_ops->page_mkwrite(vmf); in kernfs_vma_page_mkwrite()
403 kernfs_put_active(of->kn); in kernfs_vma_page_mkwrite()
411 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_access() local
414 if (!of->vm_ops) in kernfs_vma_access()
417 if (!kernfs_get_active(of->kn)) in kernfs_vma_access()
421 if (of->vm_ops->access) in kernfs_vma_access()
422 ret = of->vm_ops->access(vma, addr, buf, len, write); in kernfs_vma_access()
424 kernfs_put_active(of->kn); in kernfs_vma_access()
433 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_set_policy() local
436 if (!of->vm_ops) in kernfs_vma_set_policy()
439 if (!kernfs_get_active(of->kn)) in kernfs_vma_set_policy()
443 if (of->vm_ops->set_policy) in kernfs_vma_set_policy()
444 ret = of->vm_ops->set_policy(vma, new); in kernfs_vma_set_policy()
446 kernfs_put_active(of->kn); in kernfs_vma_set_policy()
454 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_get_policy() local
457 if (!of->vm_ops) in kernfs_vma_get_policy()
460 if (!kernfs_get_active(of->kn)) in kernfs_vma_get_policy()
464 if (of->vm_ops->get_policy) in kernfs_vma_get_policy()
465 pol = of->vm_ops->get_policy(vma, addr); in kernfs_vma_get_policy()
467 kernfs_put_active(of->kn); in kernfs_vma_get_policy()
486 struct kernfs_open_file *of = kernfs_of(file); in kernfs_fop_mmap() local
497 if (!(of->kn->flags & KERNFS_HAS_MMAP)) in kernfs_fop_mmap()
500 mutex_lock(&of->mutex); in kernfs_fop_mmap()
503 if (!kernfs_get_active(of->kn)) in kernfs_fop_mmap()
506 ops = kernfs_ops(of->kn); in kernfs_fop_mmap()
507 rc = ops->mmap(of, vma); in kernfs_fop_mmap()
520 if (of->mmapped && of->vm_ops != vma->vm_ops) in kernfs_fop_mmap()
531 of->mmapped = true; in kernfs_fop_mmap()
532 of_on(of)->nr_mmapped++; in kernfs_fop_mmap()
533 of->vm_ops = vma->vm_ops; in kernfs_fop_mmap()
536 kernfs_put_active(of->kn); in kernfs_fop_mmap()
538 mutex_unlock(&of->mutex); in kernfs_fop_mmap()
558 struct kernfs_open_file *of) in kernfs_get_open_node() argument
579 list_add_tail(&of->list, &on->files); in kernfs_get_open_node()
602 struct kernfs_open_file *of, in kernfs_unlink_open_file() argument
616 if (of) { in kernfs_unlink_open_file()
618 WARN_ON_ONCE(of->released == open_failed); in kernfs_unlink_open_file()
622 if (of->mmapped) in kernfs_unlink_open_file()
624 list_del(&of->list); in kernfs_unlink_open_file()
640 struct kernfs_open_file *of; in kernfs_fop_open() local
666 of = kzalloc(sizeof(struct kernfs_open_file), GFP_KERNEL); in kernfs_fop_open()
667 if (!of) in kernfs_fop_open()
686 mutex_init(&of->mutex); in kernfs_fop_open()
688 mutex_init(&of->mutex); in kernfs_fop_open()
690 of->kn = kn; in kernfs_fop_open()
691 of->file = file; in kernfs_fop_open()
697 of->atomic_write_len = ops->atomic_write_len; in kernfs_fop_open()
708 int len = of->atomic_write_len ?: PAGE_SIZE; in kernfs_fop_open()
709 of->prealloc_buf = kmalloc(len + 1, GFP_KERNEL); in kernfs_fop_open()
711 if (!of->prealloc_buf) in kernfs_fop_open()
713 mutex_init(&of->prealloc_mutex); in kernfs_fop_open()
728 of->seq_file = file->private_data; in kernfs_fop_open()
729 of->seq_file->private = of; in kernfs_fop_open()
736 error = kernfs_get_open_node(kn, of); in kernfs_fop_open()
742 error = ops->open(of); in kernfs_fop_open()
752 kernfs_unlink_open_file(kn, of, true); in kernfs_fop_open()
756 kfree(of->prealloc_buf); in kernfs_fop_open()
757 kfree(of); in kernfs_fop_open()
765 struct kernfs_open_file *of) in kernfs_release_file() argument
776 if (!of->released) { in kernfs_release_file()
782 kn->attr.ops->release(of); in kernfs_release_file()
783 of->released = true; in kernfs_release_file()
784 of_on(of)->nr_to_release--; in kernfs_release_file()
791 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_release() local
797 kernfs_release_file(kn, of); in kernfs_fop_release()
801 kernfs_unlink_open_file(kn, of, false); in kernfs_fop_release()
803 kfree(of->prealloc_buf); in kernfs_fop_release()
804 kfree(of); in kernfs_fop_release()
831 struct kernfs_open_file *of; in kernfs_drain_open_files() local
841 list_for_each_entry(of, &on->files, list) { in kernfs_drain_open_files()
842 struct inode *inode = file_inode(of->file); in kernfs_drain_open_files()
844 if (of->mmapped) { in kernfs_drain_open_files()
846 of->mmapped = false; in kernfs_drain_open_files()
851 kernfs_release_file(kn, of); in kernfs_drain_open_files()
872 __poll_t kernfs_generic_poll(struct kernfs_open_file *of, poll_table *wait) in kernfs_generic_poll() argument
874 struct kernfs_open_node *on = of_on(of); in kernfs_generic_poll()
876 poll_wait(of->file, &on->poll, wait); in kernfs_generic_poll()
878 if (of->event != atomic_read(&on->event)) in kernfs_generic_poll()
886 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_poll() local
894 ret = kn->attr.ops->poll(of, wait); in kernfs_fop_poll()
896 ret = kernfs_generic_poll(of, wait); in kernfs_fop_poll()