Lines Matching refs:pde
63 ei->pde = NULL; in proc_alloc_inode()
78 if (ei->pde) in proc_free_inode()
79 pde_put(ei->pde); in proc_free_inode()
198 static inline int use_pde(struct proc_dir_entry *pde) in use_pde() argument
200 return likely(atomic_inc_unless_negative(&pde->in_use)); in use_pde()
203 static void unuse_pde(struct proc_dir_entry *pde) in unuse_pde() argument
205 if (unlikely(atomic_dec_return(&pde->in_use) == BIAS)) in unuse_pde()
206 complete(pde->pde_unload_completion); in unuse_pde()
218 static void close_pdeo(struct proc_dir_entry *pde, struct pde_opener *pdeo) in close_pdeo() argument
219 __releases(&pde->pde_unload_lock) in close_pdeo()
232 spin_unlock(&pde->pde_unload_lock); in close_pdeo()
239 spin_unlock(&pde->pde_unload_lock); in close_pdeo()
242 pde->proc_ops->proc_release(file_inode(file), file); in close_pdeo()
244 spin_lock(&pde->pde_unload_lock); in close_pdeo()
248 spin_unlock(&pde->pde_unload_lock); in close_pdeo()
277 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_llseek() local
280 if (pde_is_permanent(pde)) { in proc_reg_llseek()
281 return pde->proc_ops->proc_lseek(file, offset, whence); in proc_reg_llseek()
282 } else if (use_pde(pde)) { in proc_reg_llseek()
283 rv = pde->proc_ops->proc_lseek(file, offset, whence); in proc_reg_llseek()
284 unuse_pde(pde); in proc_reg_llseek()
291 struct proc_dir_entry *pde = PDE(file_inode(iocb->ki_filp)); in proc_reg_read_iter() local
294 if (pde_is_permanent(pde)) in proc_reg_read_iter()
295 return pde->proc_ops->proc_read_iter(iocb, iter); in proc_reg_read_iter()
297 if (!use_pde(pde)) in proc_reg_read_iter()
299 ret = pde->proc_ops->proc_read_iter(iocb, iter); in proc_reg_read_iter()
300 unuse_pde(pde); in proc_reg_read_iter()
304 static ssize_t pde_read(struct proc_dir_entry *pde, struct file *file, char __user *buf, size_t cou… in pde_read() argument
306 const auto read = pde->proc_ops->proc_read; in pde_read()
314 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_read() local
317 if (pde_is_permanent(pde)) { in proc_reg_read()
318 return pde_read(pde, file, buf, count, ppos); in proc_reg_read()
319 } else if (use_pde(pde)) { in proc_reg_read()
320 rv = pde_read(pde, file, buf, count, ppos); in proc_reg_read()
321 unuse_pde(pde); in proc_reg_read()
326 static ssize_t pde_write(struct proc_dir_entry *pde, struct file *file, const char __user *buf, siz… in pde_write() argument
328 const auto write = pde->proc_ops->proc_write; in pde_write()
336 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_write() local
339 if (pde_is_permanent(pde)) { in proc_reg_write()
340 return pde_write(pde, file, buf, count, ppos); in proc_reg_write()
341 } else if (use_pde(pde)) { in proc_reg_write()
342 rv = pde_write(pde, file, buf, count, ppos); in proc_reg_write()
343 unuse_pde(pde); in proc_reg_write()
348 static __poll_t pde_poll(struct proc_dir_entry *pde, struct file *file, struct poll_table_struct *p… in pde_poll() argument
350 const auto poll = pde->proc_ops->proc_poll; in pde_poll()
358 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_poll() local
361 if (pde_is_permanent(pde)) { in proc_reg_poll()
362 return pde_poll(pde, file, pts); in proc_reg_poll()
363 } else if (use_pde(pde)) { in proc_reg_poll()
364 rv = pde_poll(pde, file, pts); in proc_reg_poll()
365 unuse_pde(pde); in proc_reg_poll()
370 static long pde_ioctl(struct proc_dir_entry *pde, struct file *file, unsigned int cmd, unsigned lon… in pde_ioctl() argument
372 const auto ioctl = pde->proc_ops->proc_ioctl; in pde_ioctl()
380 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_unlocked_ioctl() local
383 if (pde_is_permanent(pde)) { in proc_reg_unlocked_ioctl()
384 return pde_ioctl(pde, file, cmd, arg); in proc_reg_unlocked_ioctl()
385 } else if (use_pde(pde)) { in proc_reg_unlocked_ioctl()
386 rv = pde_ioctl(pde, file, cmd, arg); in proc_reg_unlocked_ioctl()
387 unuse_pde(pde); in proc_reg_unlocked_ioctl()
393 static long pde_compat_ioctl(struct proc_dir_entry *pde, struct file *file, unsigned int cmd, unsig… in pde_compat_ioctl() argument
395 const auto compat_ioctl = pde->proc_ops->proc_compat_ioctl; in pde_compat_ioctl()
403 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_compat_ioctl() local
405 if (pde_is_permanent(pde)) { in proc_reg_compat_ioctl()
406 return pde_compat_ioctl(pde, file, cmd, arg); in proc_reg_compat_ioctl()
407 } else if (use_pde(pde)) { in proc_reg_compat_ioctl()
408 rv = pde_compat_ioctl(pde, file, cmd, arg); in proc_reg_compat_ioctl()
409 unuse_pde(pde); in proc_reg_compat_ioctl()
415 static int pde_mmap(struct proc_dir_entry *pde, struct file *file, struct vm_area_struct *vma) in pde_mmap() argument
417 const auto mmap = pde->proc_ops->proc_mmap; in pde_mmap()
425 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_mmap() local
428 if (pde_is_permanent(pde)) { in proc_reg_mmap()
429 return pde_mmap(pde, file, vma); in proc_reg_mmap()
430 } else if (use_pde(pde)) { in proc_reg_mmap()
431 rv = pde_mmap(pde, file, vma); in proc_reg_mmap()
432 unuse_pde(pde); in proc_reg_mmap()
438 pde_get_unmapped_area(struct proc_dir_entry *pde, struct file *file, unsigned long orig_addr, in pde_get_unmapped_area() argument
442 if (pde->proc_ops->proc_get_unmapped_area) in pde_get_unmapped_area()
443 return pde->proc_ops->proc_get_unmapped_area(file, orig_addr, len, pgoff, flags); in pde_get_unmapped_area()
457 struct proc_dir_entry *pde = PDE(file_inode(file)); in proc_reg_get_unmapped_area() local
460 if (pde_is_permanent(pde)) { in proc_reg_get_unmapped_area()
461 return pde_get_unmapped_area(pde, file, orig_addr, len, pgoff, flags); in proc_reg_get_unmapped_area()
462 } else if (use_pde(pde)) { in proc_reg_get_unmapped_area()
463 rv = pde_get_unmapped_area(pde, file, orig_addr, len, pgoff, flags); in proc_reg_get_unmapped_area()
464 unuse_pde(pde); in proc_reg_get_unmapped_area()
471 struct proc_dir_entry *pde = PDE(inode); in proc_reg_open() local
476 if (!pde_has_proc_lseek(pde)) in proc_reg_open()
479 if (pde_is_permanent(pde)) { in proc_reg_open()
480 open = pde->proc_ops->proc_open; in proc_reg_open()
497 if (!use_pde(pde)) in proc_reg_open()
500 const auto release = pde->proc_ops->proc_release; in proc_reg_open()
509 open = pde->proc_ops->proc_open; in proc_reg_open()
519 spin_lock(&pde->pde_unload_lock); in proc_reg_open()
520 list_add(&pdeo->lh, &pde->pde_openers); in proc_reg_open()
521 spin_unlock(&pde->pde_unload_lock); in proc_reg_open()
527 unuse_pde(pde); in proc_reg_open()
533 struct proc_dir_entry *pde = PDE(inode); in proc_reg_release() local
536 if (pde_is_permanent(pde)) { in proc_reg_release()
537 const auto release = pde->proc_ops->proc_release; in proc_reg_release()
543 spin_lock(&pde->pde_unload_lock); in proc_reg_release()
544 list_for_each_entry(pdeo, &pde->pde_openers, lh) { in proc_reg_release()
546 close_pdeo(pde, pdeo); in proc_reg_release()
550 spin_unlock(&pde->pde_unload_lock); in proc_reg_release()
617 struct proc_dir_entry *pde = PDE(inode); in proc_get_link() local
618 if (!use_pde(pde)) in proc_get_link()
620 set_delayed_call(done, proc_put_link, pde); in proc_get_link()
621 return pde->data; in proc_get_link()
640 PROC_I(inode)->pde = de; in proc_get_inode()