Lines Matching full:of

44  * pending queue is implemented as a singly linked list of kernfs_nodes.
94 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop_active() local
95 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_stop_active()
99 kernfs_put_active(of->kn); in kernfs_seq_stop_active()
104 struct kernfs_open_file *of = sf->private; in kernfs_seq_start() local
108 * @of->mutex nests outside active ref and is primarily to ensure that in kernfs_seq_start()
111 mutex_lock(&of->mutex); in kernfs_seq_start()
112 if (!kernfs_get_active(of->kn)) in kernfs_seq_start()
115 ops = kernfs_ops(of->kn); in kernfs_seq_start()
133 struct kernfs_open_file *of = sf->private; in kernfs_seq_next() local
134 const struct kernfs_ops *ops = kernfs_ops(of->kn); in kernfs_seq_next()
154 struct kernfs_open_file *of = sf->private; in kernfs_seq_stop() local
158 mutex_unlock(&of->mutex); in kernfs_seq_stop()
163 struct kernfs_open_file *of = sf->private; in kernfs_seq_show() local
165 of->event = atomic_read(&of->kn->attr.open->event); in kernfs_seq_show()
167 return of->kn->attr.ops->seq_show(sf, v); in kernfs_seq_show()
183 static ssize_t kernfs_file_direct_read(struct kernfs_open_file *of, in kernfs_file_direct_read() argument
191 buf = of->prealloc_buf; in kernfs_file_direct_read()
193 mutex_lock(&of->prealloc_mutex); in kernfs_file_direct_read()
200 * @of->mutex nests outside active ref and is used both to ensure that in kernfs_file_direct_read()
203 mutex_lock(&of->mutex); in kernfs_file_direct_read()
204 if (!kernfs_get_active(of->kn)) { in kernfs_file_direct_read()
206 mutex_unlock(&of->mutex); in kernfs_file_direct_read()
210 of->event = atomic_read(&of->kn->attr.open->event); in kernfs_file_direct_read()
211 ops = kernfs_ops(of->kn); in kernfs_file_direct_read()
213 len = ops->read(of, buf, len, *ppos); in kernfs_file_direct_read()
217 kernfs_put_active(of->kn); in kernfs_file_direct_read()
218 mutex_unlock(&of->mutex); in kernfs_file_direct_read()
231 if (buf == of->prealloc_buf) in kernfs_file_direct_read()
232 mutex_unlock(&of->prealloc_mutex); in kernfs_file_direct_read()
242 * @count: number of bytes
248 struct kernfs_open_file *of = kernfs_of(file); in kernfs_fop_read() local
250 if (of->kn->flags & KERNFS_HAS_SEQ_SHOW) in kernfs_fop_read()
253 return kernfs_file_direct_read(of, user_buf, count, ppos); in kernfs_fop_read()
260 * @count: number of bytes
275 struct kernfs_open_file *of = kernfs_of(file); in kernfs_fop_write() local
280 if (of->atomic_write_len) { in kernfs_fop_write()
282 if (len > of->atomic_write_len) in kernfs_fop_write()
288 buf = of->prealloc_buf; in kernfs_fop_write()
290 mutex_lock(&of->prealloc_mutex); in kernfs_fop_write()
303 * @of->mutex nests outside active ref and is used both to ensure that in kernfs_fop_write()
306 mutex_lock(&of->mutex); in kernfs_fop_write()
307 if (!kernfs_get_active(of->kn)) { in kernfs_fop_write()
308 mutex_unlock(&of->mutex); in kernfs_fop_write()
313 ops = kernfs_ops(of->kn); in kernfs_fop_write()
315 len = ops->write(of, buf, len, *ppos); in kernfs_fop_write()
319 kernfs_put_active(of->kn); in kernfs_fop_write()
320 mutex_unlock(&of->mutex); in kernfs_fop_write()
326 if (buf == of->prealloc_buf) in kernfs_fop_write()
327 mutex_unlock(&of->prealloc_mutex); in kernfs_fop_write()
336 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_open() local
338 if (!of->vm_ops) in kernfs_vma_open()
341 if (!kernfs_get_active(of->kn)) in kernfs_vma_open()
344 if (of->vm_ops->open) in kernfs_vma_open()
345 of->vm_ops->open(vma); in kernfs_vma_open()
347 kernfs_put_active(of->kn); in kernfs_vma_open()
353 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_fault() local
356 if (!of->vm_ops) in kernfs_vma_fault()
359 if (!kernfs_get_active(of->kn)) in kernfs_vma_fault()
363 if (of->vm_ops->fault) in kernfs_vma_fault()
364 ret = of->vm_ops->fault(vmf); in kernfs_vma_fault()
366 kernfs_put_active(of->kn); in kernfs_vma_fault()
373 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_page_mkwrite() local
376 if (!of->vm_ops) in kernfs_vma_page_mkwrite()
379 if (!kernfs_get_active(of->kn)) in kernfs_vma_page_mkwrite()
383 if (of->vm_ops->page_mkwrite) in kernfs_vma_page_mkwrite()
384 ret = of->vm_ops->page_mkwrite(vmf); in kernfs_vma_page_mkwrite()
388 kernfs_put_active(of->kn); in kernfs_vma_page_mkwrite()
396 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_access() local
399 if (!of->vm_ops) in kernfs_vma_access()
402 if (!kernfs_get_active(of->kn)) in kernfs_vma_access()
406 if (of->vm_ops->access) in kernfs_vma_access()
407 ret = of->vm_ops->access(vma, addr, buf, len, write); in kernfs_vma_access()
409 kernfs_put_active(of->kn); in kernfs_vma_access()
418 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_set_policy() local
421 if (!of->vm_ops) in kernfs_vma_set_policy()
424 if (!kernfs_get_active(of->kn)) in kernfs_vma_set_policy()
428 if (of->vm_ops->set_policy) in kernfs_vma_set_policy()
429 ret = of->vm_ops->set_policy(vma, new); in kernfs_vma_set_policy()
431 kernfs_put_active(of->kn); in kernfs_vma_set_policy()
439 struct kernfs_open_file *of = kernfs_of(file); in kernfs_vma_get_policy() local
442 if (!of->vm_ops) in kernfs_vma_get_policy()
445 if (!kernfs_get_active(of->kn)) in kernfs_vma_get_policy()
449 if (of->vm_ops->get_policy) in kernfs_vma_get_policy()
450 pol = of->vm_ops->get_policy(vma, addr); in kernfs_vma_get_policy()
452 kernfs_put_active(of->kn); in kernfs_vma_get_policy()
471 struct kernfs_open_file *of = kernfs_of(file); in kernfs_fop_mmap() local
476 * mmap path and of->mutex are prone to triggering spurious lockdep in kernfs_fop_mmap()
479 * without grabbing @of->mutex by testing HAS_MMAP flag. See the in kernfs_fop_mmap()
482 if (!(of->kn->flags & KERNFS_HAS_MMAP)) in kernfs_fop_mmap()
485 mutex_lock(&of->mutex); in kernfs_fop_mmap()
488 if (!kernfs_get_active(of->kn)) in kernfs_fop_mmap()
491 ops = kernfs_ops(of->kn); in kernfs_fop_mmap()
492 rc = ops->mmap(of, vma); in kernfs_fop_mmap()
497 * PowerPC's pci_mmap of legacy_mem uses shmem_zero_setup() in kernfs_fop_mmap()
498 * to satisfy versions of X which crash if the mmap fails: that in kernfs_fop_mmap()
505 if (of->mmapped && of->vm_ops != vma->vm_ops) in kernfs_fop_mmap()
517 of->mmapped = true; in kernfs_fop_mmap()
518 of->vm_ops = vma->vm_ops; in kernfs_fop_mmap()
521 kernfs_put_active(of->kn); in kernfs_fop_mmap()
523 mutex_unlock(&of->mutex); in kernfs_fop_mmap()
531 * @of: kernfs_open_file for this instance of open
534 * create one. @of is chained to the files list.
543 struct kernfs_open_file *of) in kernfs_get_open_node() argument
559 list_add_tail(&of->list, &on->files); in kernfs_get_open_node()
585 * @of: associated kernfs_open_file
587 * Put @kn->attr.open and unlink @of from the files list. If
594 struct kernfs_open_file *of) in kernfs_put_open_node() argument
602 if (of) in kernfs_put_open_node()
603 list_del(&of->list); in kernfs_put_open_node()
621 struct kernfs_open_file *of; in kernfs_fop_open() local
647 of = kzalloc(sizeof(struct kernfs_open_file), GFP_KERNEL); in kernfs_fop_open()
648 if (!of) in kernfs_fop_open()
653 * @of->mutex for files which implement mmap. This is a rather in kernfs_fop_open()
655 * mm->mmap_lock - mmap nests @of->mutex under mm->mmap_lock and in kernfs_fop_open()
657 * which mm->mmap_lock nests, while holding @of->mutex. As each in kernfs_fop_open()
663 * Both paths of the branch look the same. They're supposed to in kernfs_fop_open()
664 * look that way and give @of->mutex different static lockdep keys. in kernfs_fop_open()
667 mutex_init(&of->mutex); in kernfs_fop_open()
669 mutex_init(&of->mutex); in kernfs_fop_open()
671 of->kn = kn; in kernfs_fop_open()
672 of->file = file; in kernfs_fop_open()
678 of->atomic_write_len = ops->atomic_write_len; in kernfs_fop_open()
689 int len = of->atomic_write_len ?: PAGE_SIZE; in kernfs_fop_open()
690 of->prealloc_buf = kmalloc(len + 1, GFP_KERNEL); in kernfs_fop_open()
692 if (!of->prealloc_buf) in kernfs_fop_open()
694 mutex_init(&of->prealloc_mutex); in kernfs_fop_open()
709 of->seq_file = file->private_data; in kernfs_fop_open()
710 of->seq_file->private = of; in kernfs_fop_open()
717 error = kernfs_get_open_node(kn, of); in kernfs_fop_open()
722 /* nobody has access to @of yet, skip @of->mutex */ in kernfs_fop_open()
723 error = ops->open(of); in kernfs_fop_open()
733 kernfs_put_open_node(kn, of); in kernfs_fop_open()
737 kfree(of->prealloc_buf); in kernfs_fop_open()
738 kfree(of); in kernfs_fop_open()
746 struct kernfs_open_file *of) in kernfs_release_file() argument
749 * @of is guaranteed to have no other file operations in flight and in kernfs_release_file()
751 * @kernfs_open_file_mutex is enough. @of->mutex can't be used in kernfs_release_file()
757 if (!of->released) { in kernfs_release_file()
763 kn->attr.ops->release(of); in kernfs_release_file()
764 of->released = true; in kernfs_release_file()
771 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_release() local
775 kernfs_release_file(kn, of); in kernfs_fop_release()
779 kernfs_put_open_node(kn, of); in kernfs_fop_release()
781 kfree(of->prealloc_buf); in kernfs_fop_release()
782 kfree(of); in kernfs_fop_release()
790 struct kernfs_open_file *of; in kernfs_drain_open_files() local
805 list_for_each_entry(of, &on->files, list) { in kernfs_drain_open_files()
806 struct inode *inode = file_inode(of->file); in kernfs_drain_open_files()
812 kernfs_release_file(kn, of); in kernfs_drain_open_files()
834 __poll_t kernfs_generic_poll(struct kernfs_open_file *of, poll_table *wait) in kernfs_generic_poll() argument
836 struct kernfs_node *kn = kernfs_dentry_node(of->file->f_path.dentry); in kernfs_generic_poll()
839 poll_wait(of->file, &on->poll, wait); in kernfs_generic_poll()
841 if (of->event != atomic_read(&on->event)) in kernfs_generic_poll()
849 struct kernfs_open_file *of = kernfs_of(filp); in kernfs_fop_poll() local
857 ret = kn->attr.ops->poll(of, wait); in kernfs_fop_poll()
859 ret = kernfs_generic_poll(of, wait); in kernfs_fop_poll()
976 * @name: name of the file
977 * @mode: mode of the file
978 * @uid: uid of the file
979 * @gid: gid of the file
980 * @size: size of the file
983 * @ns: optional namespace tag of the file