1 /* 2 * fs/kernfs/file.c - kernfs file implementation 3 * 4 * Copyright (c) 2001-3 Patrick Mochel 5 * Copyright (c) 2007 SUSE Linux Products GmbH 6 * Copyright (c) 2007, 2013 Tejun Heo <tj@kernel.org> 7 * 8 * This file is released under the GPLv2. 9 */ 10 11 #include <linux/fs.h> 12 #include <linux/seq_file.h> 13 #include <linux/slab.h> 14 #include <linux/poll.h> 15 #include <linux/pagemap.h> 16 #include <linux/sched.h> 17 #include <linux/fsnotify.h> 18 19 #include "kernfs-internal.h" 20 21 /* 22 * There's one kernfs_open_file for each open file and one kernfs_open_node 23 * for each kernfs_node with one or more open files. 24 * 25 * kernfs_node->attr.open points to kernfs_open_node. attr.open is 26 * protected by kernfs_open_node_lock. 27 * 28 * filp->private_data points to seq_file whose ->private points to 29 * kernfs_open_file. kernfs_open_files are chained at 30 * kernfs_open_node->files, which is protected by kernfs_open_file_mutex. 31 */ 32 static DEFINE_SPINLOCK(kernfs_open_node_lock); 33 static DEFINE_MUTEX(kernfs_open_file_mutex); 34 35 struct kernfs_open_node { 36 atomic_t refcnt; 37 atomic_t event; 38 wait_queue_head_t poll; 39 struct list_head files; /* goes through kernfs_open_file.list */ 40 }; 41 42 static struct kernfs_open_file *kernfs_of(struct file *file) 43 { 44 return ((struct seq_file *)file->private_data)->private; 45 } 46 47 /* 48 * Determine the kernfs_ops for the given kernfs_node. This function must 49 * be called while holding an active reference. 50 */ 51 static const struct kernfs_ops *kernfs_ops(struct kernfs_node *kn) 52 { 53 if (kn->flags & KERNFS_LOCKDEP) 54 lockdep_assert_held(kn); 55 return kn->attr.ops; 56 } 57 58 /* 59 * As kernfs_seq_stop() is also called after kernfs_seq_start() or 60 * kernfs_seq_next() failure, it needs to distinguish whether it's stopping 61 * a seq_file iteration which is fully initialized with an active reference 62 * or an aborted kernfs_seq_start() due to get_active failure. The 63 * position pointer is the only context for each seq_file iteration and 64 * thus the stop condition should be encoded in it. As the return value is 65 * directly visible to userland, ERR_PTR(-ENODEV) is the only acceptable 66 * choice to indicate get_active failure. 67 * 68 * Unfortunately, this is complicated due to the optional custom seq_file 69 * operations which may return ERR_PTR(-ENODEV) too. kernfs_seq_stop() 70 * can't distinguish whether ERR_PTR(-ENODEV) is from get_active failure or 71 * custom seq_file operations and thus can't decide whether put_active 72 * should be performed or not only on ERR_PTR(-ENODEV). 73 * 74 * This is worked around by factoring out the custom seq_stop() and 75 * put_active part into kernfs_seq_stop_active(), skipping it from 76 * kernfs_seq_stop() if ERR_PTR(-ENODEV) while invoking it directly after 77 * custom seq_file operations fail with ERR_PTR(-ENODEV) - this ensures 78 * that kernfs_seq_stop_active() is skipped only after get_active failure. 79 */ 80 static void kernfs_seq_stop_active(struct seq_file *sf, void *v) 81 { 82 struct kernfs_open_file *of = sf->private; 83 const struct kernfs_ops *ops = kernfs_ops(of->kn); 84 85 if (ops->seq_stop) 86 ops->seq_stop(sf, v); 87 kernfs_put_active(of->kn); 88 } 89 90 static void *kernfs_seq_start(struct seq_file *sf, loff_t *ppos) 91 { 92 struct kernfs_open_file *of = sf->private; 93 const struct kernfs_ops *ops; 94 95 /* 96 * @of->mutex nests outside active ref and is just to ensure that 97 * the ops aren't called concurrently for the same open file. 98 */ 99 mutex_lock(&of->mutex); 100 if (!kernfs_get_active(of->kn)) 101 return ERR_PTR(-ENODEV); 102 103 ops = kernfs_ops(of->kn); 104 if (ops->seq_start) { 105 void *next = ops->seq_start(sf, ppos); 106 /* see the comment above kernfs_seq_stop_active() */ 107 if (next == ERR_PTR(-ENODEV)) 108 kernfs_seq_stop_active(sf, next); 109 return next; 110 } else { 111 /* 112 * The same behavior and code as single_open(). Returns 113 * !NULL if pos is at the beginning; otherwise, NULL. 114 */ 115 return NULL + !*ppos; 116 } 117 } 118 119 static void *kernfs_seq_next(struct seq_file *sf, void *v, loff_t *ppos) 120 { 121 struct kernfs_open_file *of = sf->private; 122 const struct kernfs_ops *ops = kernfs_ops(of->kn); 123 124 if (ops->seq_next) { 125 void *next = ops->seq_next(sf, v, ppos); 126 /* see the comment above kernfs_seq_stop_active() */ 127 if (next == ERR_PTR(-ENODEV)) 128 kernfs_seq_stop_active(sf, next); 129 return next; 130 } else { 131 /* 132 * The same behavior and code as single_open(), always 133 * terminate after the initial read. 134 */ 135 ++*ppos; 136 return NULL; 137 } 138 } 139 140 static void kernfs_seq_stop(struct seq_file *sf, void *v) 141 { 142 struct kernfs_open_file *of = sf->private; 143 144 if (v != ERR_PTR(-ENODEV)) 145 kernfs_seq_stop_active(sf, v); 146 mutex_unlock(&of->mutex); 147 } 148 149 static int kernfs_seq_show(struct seq_file *sf, void *v) 150 { 151 struct kernfs_open_file *of = sf->private; 152 153 of->event = atomic_read(&of->kn->attr.open->event); 154 155 return of->kn->attr.ops->seq_show(sf, v); 156 } 157 158 static const struct seq_operations kernfs_seq_ops = { 159 .start = kernfs_seq_start, 160 .next = kernfs_seq_next, 161 .stop = kernfs_seq_stop, 162 .show = kernfs_seq_show, 163 }; 164 165 /* 166 * As reading a bin file can have side-effects, the exact offset and bytes 167 * specified in read(2) call should be passed to the read callback making 168 * it difficult to use seq_file. Implement simplistic custom buffering for 169 * bin files. 170 */ 171 static ssize_t kernfs_file_direct_read(struct kernfs_open_file *of, 172 char __user *user_buf, size_t count, 173 loff_t *ppos) 174 { 175 ssize_t len = min_t(size_t, count, PAGE_SIZE); 176 const struct kernfs_ops *ops; 177 char *buf; 178 179 buf = kmalloc(len, GFP_KERNEL); 180 if (!buf) 181 return -ENOMEM; 182 183 /* 184 * @of->mutex nests outside active ref and is just to ensure that 185 * the ops aren't called concurrently for the same open file. 186 */ 187 mutex_lock(&of->mutex); 188 if (!kernfs_get_active(of->kn)) { 189 len = -ENODEV; 190 mutex_unlock(&of->mutex); 191 goto out_free; 192 } 193 194 ops = kernfs_ops(of->kn); 195 if (ops->read) 196 len = ops->read(of, buf, len, *ppos); 197 else 198 len = -EINVAL; 199 200 kernfs_put_active(of->kn); 201 mutex_unlock(&of->mutex); 202 203 if (len < 0) 204 goto out_free; 205 206 if (copy_to_user(user_buf, buf, len)) { 207 len = -EFAULT; 208 goto out_free; 209 } 210 211 *ppos += len; 212 213 out_free: 214 kfree(buf); 215 return len; 216 } 217 218 /** 219 * kernfs_fop_read - kernfs vfs read callback 220 * @file: file pointer 221 * @user_buf: data to write 222 * @count: number of bytes 223 * @ppos: starting offset 224 */ 225 static ssize_t kernfs_fop_read(struct file *file, char __user *user_buf, 226 size_t count, loff_t *ppos) 227 { 228 struct kernfs_open_file *of = kernfs_of(file); 229 230 if (of->kn->flags & KERNFS_HAS_SEQ_SHOW) 231 return seq_read(file, user_buf, count, ppos); 232 else 233 return kernfs_file_direct_read(of, user_buf, count, ppos); 234 } 235 236 /** 237 * kernfs_fop_write - kernfs vfs write callback 238 * @file: file pointer 239 * @user_buf: data to write 240 * @count: number of bytes 241 * @ppos: starting offset 242 * 243 * Copy data in from userland and pass it to the matching kernfs write 244 * operation. 245 * 246 * There is no easy way for us to know if userspace is only doing a partial 247 * write, so we don't support them. We expect the entire buffer to come on 248 * the first write. Hint: if you're writing a value, first read the file, 249 * modify only the the value you're changing, then write entire buffer 250 * back. 251 */ 252 static ssize_t kernfs_fop_write(struct file *file, const char __user *user_buf, 253 size_t count, loff_t *ppos) 254 { 255 struct kernfs_open_file *of = kernfs_of(file); 256 const struct kernfs_ops *ops; 257 size_t len; 258 char *buf; 259 260 if (of->atomic_write_len) { 261 len = count; 262 if (len > of->atomic_write_len) 263 return -E2BIG; 264 } else { 265 len = min_t(size_t, count, PAGE_SIZE); 266 } 267 268 buf = kmalloc(len + 1, GFP_KERNEL); 269 if (!buf) 270 return -ENOMEM; 271 272 if (copy_from_user(buf, user_buf, len)) { 273 len = -EFAULT; 274 goto out_free; 275 } 276 buf[len] = '\0'; /* guarantee string termination */ 277 278 /* 279 * @of->mutex nests outside active ref and is just to ensure that 280 * the ops aren't called concurrently for the same open file. 281 */ 282 mutex_lock(&of->mutex); 283 if (!kernfs_get_active(of->kn)) { 284 mutex_unlock(&of->mutex); 285 len = -ENODEV; 286 goto out_free; 287 } 288 289 ops = kernfs_ops(of->kn); 290 if (ops->write) 291 len = ops->write(of, buf, len, *ppos); 292 else 293 len = -EINVAL; 294 295 kernfs_put_active(of->kn); 296 mutex_unlock(&of->mutex); 297 298 if (len > 0) 299 *ppos += len; 300 out_free: 301 kfree(buf); 302 return len; 303 } 304 305 static void kernfs_vma_open(struct vm_area_struct *vma) 306 { 307 struct file *file = vma->vm_file; 308 struct kernfs_open_file *of = kernfs_of(file); 309 310 if (!of->vm_ops) 311 return; 312 313 if (!kernfs_get_active(of->kn)) 314 return; 315 316 if (of->vm_ops->open) 317 of->vm_ops->open(vma); 318 319 kernfs_put_active(of->kn); 320 } 321 322 static int kernfs_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf) 323 { 324 struct file *file = vma->vm_file; 325 struct kernfs_open_file *of = kernfs_of(file); 326 int ret; 327 328 if (!of->vm_ops) 329 return VM_FAULT_SIGBUS; 330 331 if (!kernfs_get_active(of->kn)) 332 return VM_FAULT_SIGBUS; 333 334 ret = VM_FAULT_SIGBUS; 335 if (of->vm_ops->fault) 336 ret = of->vm_ops->fault(vma, vmf); 337 338 kernfs_put_active(of->kn); 339 return ret; 340 } 341 342 static int kernfs_vma_page_mkwrite(struct vm_area_struct *vma, 343 struct vm_fault *vmf) 344 { 345 struct file *file = vma->vm_file; 346 struct kernfs_open_file *of = kernfs_of(file); 347 int ret; 348 349 if (!of->vm_ops) 350 return VM_FAULT_SIGBUS; 351 352 if (!kernfs_get_active(of->kn)) 353 return VM_FAULT_SIGBUS; 354 355 ret = 0; 356 if (of->vm_ops->page_mkwrite) 357 ret = of->vm_ops->page_mkwrite(vma, vmf); 358 else 359 file_update_time(file); 360 361 kernfs_put_active(of->kn); 362 return ret; 363 } 364 365 static int kernfs_vma_access(struct vm_area_struct *vma, unsigned long addr, 366 void *buf, int len, int write) 367 { 368 struct file *file = vma->vm_file; 369 struct kernfs_open_file *of = kernfs_of(file); 370 int ret; 371 372 if (!of->vm_ops) 373 return -EINVAL; 374 375 if (!kernfs_get_active(of->kn)) 376 return -EINVAL; 377 378 ret = -EINVAL; 379 if (of->vm_ops->access) 380 ret = of->vm_ops->access(vma, addr, buf, len, write); 381 382 kernfs_put_active(of->kn); 383 return ret; 384 } 385 386 #ifdef CONFIG_NUMA 387 static int kernfs_vma_set_policy(struct vm_area_struct *vma, 388 struct mempolicy *new) 389 { 390 struct file *file = vma->vm_file; 391 struct kernfs_open_file *of = kernfs_of(file); 392 int ret; 393 394 if (!of->vm_ops) 395 return 0; 396 397 if (!kernfs_get_active(of->kn)) 398 return -EINVAL; 399 400 ret = 0; 401 if (of->vm_ops->set_policy) 402 ret = of->vm_ops->set_policy(vma, new); 403 404 kernfs_put_active(of->kn); 405 return ret; 406 } 407 408 static struct mempolicy *kernfs_vma_get_policy(struct vm_area_struct *vma, 409 unsigned long addr) 410 { 411 struct file *file = vma->vm_file; 412 struct kernfs_open_file *of = kernfs_of(file); 413 struct mempolicy *pol; 414 415 if (!of->vm_ops) 416 return vma->vm_policy; 417 418 if (!kernfs_get_active(of->kn)) 419 return vma->vm_policy; 420 421 pol = vma->vm_policy; 422 if (of->vm_ops->get_policy) 423 pol = of->vm_ops->get_policy(vma, addr); 424 425 kernfs_put_active(of->kn); 426 return pol; 427 } 428 429 static int kernfs_vma_migrate(struct vm_area_struct *vma, 430 const nodemask_t *from, const nodemask_t *to, 431 unsigned long flags) 432 { 433 struct file *file = vma->vm_file; 434 struct kernfs_open_file *of = kernfs_of(file); 435 int ret; 436 437 if (!of->vm_ops) 438 return 0; 439 440 if (!kernfs_get_active(of->kn)) 441 return 0; 442 443 ret = 0; 444 if (of->vm_ops->migrate) 445 ret = of->vm_ops->migrate(vma, from, to, flags); 446 447 kernfs_put_active(of->kn); 448 return ret; 449 } 450 #endif 451 452 static const struct vm_operations_struct kernfs_vm_ops = { 453 .open = kernfs_vma_open, 454 .fault = kernfs_vma_fault, 455 .page_mkwrite = kernfs_vma_page_mkwrite, 456 .access = kernfs_vma_access, 457 #ifdef CONFIG_NUMA 458 .set_policy = kernfs_vma_set_policy, 459 .get_policy = kernfs_vma_get_policy, 460 .migrate = kernfs_vma_migrate, 461 #endif 462 }; 463 464 static int kernfs_fop_mmap(struct file *file, struct vm_area_struct *vma) 465 { 466 struct kernfs_open_file *of = kernfs_of(file); 467 const struct kernfs_ops *ops; 468 int rc; 469 470 /* 471 * mmap path and of->mutex are prone to triggering spurious lockdep 472 * warnings and we don't want to add spurious locking dependency 473 * between the two. Check whether mmap is actually implemented 474 * without grabbing @of->mutex by testing HAS_MMAP flag. See the 475 * comment in kernfs_file_open() for more details. 476 */ 477 if (!(of->kn->flags & KERNFS_HAS_MMAP)) 478 return -ENODEV; 479 480 mutex_lock(&of->mutex); 481 482 rc = -ENODEV; 483 if (!kernfs_get_active(of->kn)) 484 goto out_unlock; 485 486 ops = kernfs_ops(of->kn); 487 rc = ops->mmap(of, vma); 488 if (rc) 489 goto out_put; 490 491 /* 492 * PowerPC's pci_mmap of legacy_mem uses shmem_zero_setup() 493 * to satisfy versions of X which crash if the mmap fails: that 494 * substitutes a new vm_file, and we don't then want bin_vm_ops. 495 */ 496 if (vma->vm_file != file) 497 goto out_put; 498 499 rc = -EINVAL; 500 if (of->mmapped && of->vm_ops != vma->vm_ops) 501 goto out_put; 502 503 /* 504 * It is not possible to successfully wrap close. 505 * So error if someone is trying to use close. 506 */ 507 rc = -EINVAL; 508 if (vma->vm_ops && vma->vm_ops->close) 509 goto out_put; 510 511 rc = 0; 512 of->mmapped = 1; 513 of->vm_ops = vma->vm_ops; 514 vma->vm_ops = &kernfs_vm_ops; 515 out_put: 516 kernfs_put_active(of->kn); 517 out_unlock: 518 mutex_unlock(&of->mutex); 519 520 return rc; 521 } 522 523 /** 524 * kernfs_get_open_node - get or create kernfs_open_node 525 * @kn: target kernfs_node 526 * @of: kernfs_open_file for this instance of open 527 * 528 * If @kn->attr.open exists, increment its reference count; otherwise, 529 * create one. @of is chained to the files list. 530 * 531 * LOCKING: 532 * Kernel thread context (may sleep). 533 * 534 * RETURNS: 535 * 0 on success, -errno on failure. 536 */ 537 static int kernfs_get_open_node(struct kernfs_node *kn, 538 struct kernfs_open_file *of) 539 { 540 struct kernfs_open_node *on, *new_on = NULL; 541 542 retry: 543 mutex_lock(&kernfs_open_file_mutex); 544 spin_lock_irq(&kernfs_open_node_lock); 545 546 if (!kn->attr.open && new_on) { 547 kn->attr.open = new_on; 548 new_on = NULL; 549 } 550 551 on = kn->attr.open; 552 if (on) { 553 atomic_inc(&on->refcnt); 554 list_add_tail(&of->list, &on->files); 555 } 556 557 spin_unlock_irq(&kernfs_open_node_lock); 558 mutex_unlock(&kernfs_open_file_mutex); 559 560 if (on) { 561 kfree(new_on); 562 return 0; 563 } 564 565 /* not there, initialize a new one and retry */ 566 new_on = kmalloc(sizeof(*new_on), GFP_KERNEL); 567 if (!new_on) 568 return -ENOMEM; 569 570 atomic_set(&new_on->refcnt, 0); 571 atomic_set(&new_on->event, 1); 572 init_waitqueue_head(&new_on->poll); 573 INIT_LIST_HEAD(&new_on->files); 574 goto retry; 575 } 576 577 /** 578 * kernfs_put_open_node - put kernfs_open_node 579 * @kn: target kernfs_nodet 580 * @of: associated kernfs_open_file 581 * 582 * Put @kn->attr.open and unlink @of from the files list. If 583 * reference count reaches zero, disassociate and free it. 584 * 585 * LOCKING: 586 * None. 587 */ 588 static void kernfs_put_open_node(struct kernfs_node *kn, 589 struct kernfs_open_file *of) 590 { 591 struct kernfs_open_node *on = kn->attr.open; 592 unsigned long flags; 593 594 mutex_lock(&kernfs_open_file_mutex); 595 spin_lock_irqsave(&kernfs_open_node_lock, flags); 596 597 if (of) 598 list_del(&of->list); 599 600 if (atomic_dec_and_test(&on->refcnt)) 601 kn->attr.open = NULL; 602 else 603 on = NULL; 604 605 spin_unlock_irqrestore(&kernfs_open_node_lock, flags); 606 mutex_unlock(&kernfs_open_file_mutex); 607 608 kfree(on); 609 } 610 611 static int kernfs_fop_open(struct inode *inode, struct file *file) 612 { 613 struct kernfs_node *kn = file->f_path.dentry->d_fsdata; 614 struct kernfs_root *root = kernfs_root(kn); 615 const struct kernfs_ops *ops; 616 struct kernfs_open_file *of; 617 bool has_read, has_write, has_mmap; 618 int error = -EACCES; 619 620 if (!kernfs_get_active(kn)) 621 return -ENODEV; 622 623 ops = kernfs_ops(kn); 624 625 has_read = ops->seq_show || ops->read || ops->mmap; 626 has_write = ops->write || ops->mmap; 627 has_mmap = ops->mmap; 628 629 /* see the flag definition for details */ 630 if (root->flags & KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK) { 631 if ((file->f_mode & FMODE_WRITE) && 632 (!(inode->i_mode & S_IWUGO) || !has_write)) 633 goto err_out; 634 635 if ((file->f_mode & FMODE_READ) && 636 (!(inode->i_mode & S_IRUGO) || !has_read)) 637 goto err_out; 638 } 639 640 /* allocate a kernfs_open_file for the file */ 641 error = -ENOMEM; 642 of = kzalloc(sizeof(struct kernfs_open_file), GFP_KERNEL); 643 if (!of) 644 goto err_out; 645 646 /* 647 * The following is done to give a different lockdep key to 648 * @of->mutex for files which implement mmap. This is a rather 649 * crude way to avoid false positive lockdep warning around 650 * mm->mmap_sem - mmap nests @of->mutex under mm->mmap_sem and 651 * reading /sys/block/sda/trace/act_mask grabs sr_mutex, under 652 * which mm->mmap_sem nests, while holding @of->mutex. As each 653 * open file has a separate mutex, it's okay as long as those don't 654 * happen on the same file. At this point, we can't easily give 655 * each file a separate locking class. Let's differentiate on 656 * whether the file has mmap or not for now. 657 * 658 * Both paths of the branch look the same. They're supposed to 659 * look that way and give @of->mutex different static lockdep keys. 660 */ 661 if (has_mmap) 662 mutex_init(&of->mutex); 663 else 664 mutex_init(&of->mutex); 665 666 of->kn = kn; 667 of->file = file; 668 669 /* 670 * Write path needs to atomic_write_len outside active reference. 671 * Cache it in open_file. See kernfs_fop_write() for details. 672 */ 673 of->atomic_write_len = ops->atomic_write_len; 674 675 /* 676 * Always instantiate seq_file even if read access doesn't use 677 * seq_file or is not requested. This unifies private data access 678 * and readable regular files are the vast majority anyway. 679 */ 680 if (ops->seq_show) 681 error = seq_open(file, &kernfs_seq_ops); 682 else 683 error = seq_open(file, NULL); 684 if (error) 685 goto err_free; 686 687 ((struct seq_file *)file->private_data)->private = of; 688 689 /* seq_file clears PWRITE unconditionally, restore it if WRITE */ 690 if (file->f_mode & FMODE_WRITE) 691 file->f_mode |= FMODE_PWRITE; 692 693 /* make sure we have open node struct */ 694 error = kernfs_get_open_node(kn, of); 695 if (error) 696 goto err_close; 697 698 /* open succeeded, put active references */ 699 kernfs_put_active(kn); 700 return 0; 701 702 err_close: 703 seq_release(inode, file); 704 err_free: 705 kfree(of); 706 err_out: 707 kernfs_put_active(kn); 708 return error; 709 } 710 711 static int kernfs_fop_release(struct inode *inode, struct file *filp) 712 { 713 struct kernfs_node *kn = filp->f_path.dentry->d_fsdata; 714 struct kernfs_open_file *of = kernfs_of(filp); 715 716 kernfs_put_open_node(kn, of); 717 seq_release(inode, filp); 718 kfree(of); 719 720 return 0; 721 } 722 723 void kernfs_unmap_bin_file(struct kernfs_node *kn) 724 { 725 struct kernfs_open_node *on; 726 struct kernfs_open_file *of; 727 728 if (!(kn->flags & KERNFS_HAS_MMAP)) 729 return; 730 731 spin_lock_irq(&kernfs_open_node_lock); 732 on = kn->attr.open; 733 if (on) 734 atomic_inc(&on->refcnt); 735 spin_unlock_irq(&kernfs_open_node_lock); 736 if (!on) 737 return; 738 739 mutex_lock(&kernfs_open_file_mutex); 740 list_for_each_entry(of, &on->files, list) { 741 struct inode *inode = file_inode(of->file); 742 unmap_mapping_range(inode->i_mapping, 0, 0, 1); 743 } 744 mutex_unlock(&kernfs_open_file_mutex); 745 746 kernfs_put_open_node(kn, NULL); 747 } 748 749 /* 750 * Kernfs attribute files are pollable. The idea is that you read 751 * the content and then you use 'poll' or 'select' to wait for 752 * the content to change. When the content changes (assuming the 753 * manager for the kobject supports notification), poll will 754 * return POLLERR|POLLPRI, and select will return the fd whether 755 * it is waiting for read, write, or exceptions. 756 * Once poll/select indicates that the value has changed, you 757 * need to close and re-open the file, or seek to 0 and read again. 758 * Reminder: this only works for attributes which actively support 759 * it, and it is not possible to test an attribute from userspace 760 * to see if it supports poll (Neither 'poll' nor 'select' return 761 * an appropriate error code). When in doubt, set a suitable timeout value. 762 */ 763 static unsigned int kernfs_fop_poll(struct file *filp, poll_table *wait) 764 { 765 struct kernfs_open_file *of = kernfs_of(filp); 766 struct kernfs_node *kn = filp->f_path.dentry->d_fsdata; 767 struct kernfs_open_node *on = kn->attr.open; 768 769 /* need parent for the kobj, grab both */ 770 if (!kernfs_get_active(kn)) 771 goto trigger; 772 773 poll_wait(filp, &on->poll, wait); 774 775 kernfs_put_active(kn); 776 777 if (of->event != atomic_read(&on->event)) 778 goto trigger; 779 780 return DEFAULT_POLLMASK; 781 782 trigger: 783 return DEFAULT_POLLMASK|POLLERR|POLLPRI; 784 } 785 786 /** 787 * kernfs_notify - notify a kernfs file 788 * @kn: file to notify 789 * 790 * Notify @kn such that poll(2) on @kn wakes up. 791 */ 792 void kernfs_notify(struct kernfs_node *kn) 793 { 794 struct kernfs_root *root = kernfs_root(kn); 795 struct kernfs_open_node *on; 796 struct kernfs_super_info *info; 797 unsigned long flags; 798 799 if (WARN_ON(kernfs_type(kn) != KERNFS_FILE)) 800 return; 801 802 /* kick poll */ 803 spin_lock_irqsave(&kernfs_open_node_lock, flags); 804 805 on = kn->attr.open; 806 if (on) { 807 atomic_inc(&on->event); 808 wake_up_interruptible(&on->poll); 809 } 810 811 spin_unlock_irqrestore(&kernfs_open_node_lock, flags); 812 813 /* kick fsnotify */ 814 mutex_lock(&kernfs_mutex); 815 816 list_for_each_entry(info, &root->supers, node) { 817 struct inode *inode; 818 struct dentry *dentry; 819 820 inode = ilookup(info->sb, kn->ino); 821 if (!inode) 822 continue; 823 824 dentry = d_find_any_alias(inode); 825 if (dentry) { 826 fsnotify_parent(NULL, dentry, FS_MODIFY); 827 fsnotify(inode, FS_MODIFY, inode, FSNOTIFY_EVENT_INODE, 828 NULL, 0); 829 dput(dentry); 830 } 831 832 iput(inode); 833 } 834 835 mutex_unlock(&kernfs_mutex); 836 } 837 EXPORT_SYMBOL_GPL(kernfs_notify); 838 839 const struct file_operations kernfs_file_fops = { 840 .read = kernfs_fop_read, 841 .write = kernfs_fop_write, 842 .llseek = generic_file_llseek, 843 .mmap = kernfs_fop_mmap, 844 .open = kernfs_fop_open, 845 .release = kernfs_fop_release, 846 .poll = kernfs_fop_poll, 847 }; 848 849 /** 850 * __kernfs_create_file - kernfs internal function to create a file 851 * @parent: directory to create the file in 852 * @name: name of the file 853 * @mode: mode of the file 854 * @size: size of the file 855 * @ops: kernfs operations for the file 856 * @priv: private data for the file 857 * @ns: optional namespace tag of the file 858 * @static_name: don't copy file name 859 * @key: lockdep key for the file's active_ref, %NULL to disable lockdep 860 * 861 * Returns the created node on success, ERR_PTR() value on error. 862 */ 863 struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent, 864 const char *name, 865 umode_t mode, loff_t size, 866 const struct kernfs_ops *ops, 867 void *priv, const void *ns, 868 bool name_is_static, 869 struct lock_class_key *key) 870 { 871 struct kernfs_node *kn; 872 unsigned flags; 873 int rc; 874 875 flags = KERNFS_FILE; 876 if (name_is_static) 877 flags |= KERNFS_STATIC_NAME; 878 879 kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, flags); 880 if (!kn) 881 return ERR_PTR(-ENOMEM); 882 883 kn->attr.ops = ops; 884 kn->attr.size = size; 885 kn->ns = ns; 886 kn->priv = priv; 887 888 #ifdef CONFIG_DEBUG_LOCK_ALLOC 889 if (key) { 890 lockdep_init_map(&kn->dep_map, "s_active", key, 0); 891 kn->flags |= KERNFS_LOCKDEP; 892 } 893 #endif 894 895 /* 896 * kn->attr.ops is accesible only while holding active ref. We 897 * need to know whether some ops are implemented outside active 898 * ref. Cache their existence in flags. 899 */ 900 if (ops->seq_show) 901 kn->flags |= KERNFS_HAS_SEQ_SHOW; 902 if (ops->mmap) 903 kn->flags |= KERNFS_HAS_MMAP; 904 905 rc = kernfs_add_one(kn); 906 if (rc) { 907 kernfs_put(kn); 908 return ERR_PTR(rc); 909 } 910 return kn; 911 } 912