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