]> Pileus Git - ~andy/linux/blob - net/sunrpc/rpc_pipe.c
SUNRPC: fix pipe->ops cleanup on pipe dentry unlink
[~andy/linux] / net / sunrpc / rpc_pipe.c
1 /*
2  * net/sunrpc/rpc_pipe.c
3  *
4  * Userland/kernel interface for rpcauth_gss.
5  * Code shamelessly plagiarized from fs/nfsd/nfsctl.c
6  * and fs/sysfs/inode.c
7  *
8  * Copyright (c) 2002, Trond Myklebust <trond.myklebust@fys.uio.no>
9  *
10  */
11 #include <linux/module.h>
12 #include <linux/slab.h>
13 #include <linux/string.h>
14 #include <linux/pagemap.h>
15 #include <linux/mount.h>
16 #include <linux/namei.h>
17 #include <linux/fsnotify.h>
18 #include <linux/kernel.h>
19
20 #include <asm/ioctls.h>
21 #include <linux/fs.h>
22 #include <linux/poll.h>
23 #include <linux/wait.h>
24 #include <linux/seq_file.h>
25
26 #include <linux/sunrpc/clnt.h>
27 #include <linux/workqueue.h>
28 #include <linux/sunrpc/rpc_pipe_fs.h>
29 #include <linux/sunrpc/cache.h>
30 #include <linux/nsproxy.h>
31 #include <linux/notifier.h>
32
33 #include "netns.h"
34 #include "sunrpc.h"
35
36 #define RPCDBG_FACILITY RPCDBG_DEBUG
37
38 #define NET_NAME(net)   ((net == &init_net) ? " (init_net)" : "")
39
40 static struct vfsmount *rpc_mnt __read_mostly;
41 static int rpc_mount_count;
42
43 static struct file_system_type rpc_pipe_fs_type;
44
45
46 static struct kmem_cache *rpc_inode_cachep __read_mostly;
47
48 #define RPC_UPCALL_TIMEOUT (30*HZ)
49
50 static BLOCKING_NOTIFIER_HEAD(rpc_pipefs_notifier_list);
51
52 int rpc_pipefs_notifier_register(struct notifier_block *nb)
53 {
54         return blocking_notifier_chain_cond_register(&rpc_pipefs_notifier_list, nb);
55 }
56 EXPORT_SYMBOL_GPL(rpc_pipefs_notifier_register);
57
58 void rpc_pipefs_notifier_unregister(struct notifier_block *nb)
59 {
60         blocking_notifier_chain_unregister(&rpc_pipefs_notifier_list, nb);
61 }
62 EXPORT_SYMBOL_GPL(rpc_pipefs_notifier_unregister);
63
64 static void rpc_purge_list(struct rpc_pipe *pipe, struct list_head *head,
65                 void (*destroy_msg)(struct rpc_pipe_msg *), int err)
66 {
67         struct rpc_pipe_msg *msg;
68
69         if (list_empty(head))
70                 return;
71         do {
72                 msg = list_entry(head->next, struct rpc_pipe_msg, list);
73                 list_del_init(&msg->list);
74                 msg->errno = err;
75                 destroy_msg(msg);
76         } while (!list_empty(head));
77         wake_up(&pipe->waitq);
78 }
79
80 static void
81 rpc_timeout_upcall_queue(struct work_struct *work)
82 {
83         LIST_HEAD(free_list);
84         struct rpc_pipe *pipe =
85                 container_of(work, struct rpc_pipe, queue_timeout.work);
86         void (*destroy_msg)(struct rpc_pipe_msg *);
87
88         spin_lock(&pipe->lock);
89         destroy_msg = pipe->ops->destroy_msg;
90         if (pipe->nreaders == 0) {
91                 list_splice_init(&pipe->pipe, &free_list);
92                 pipe->pipelen = 0;
93         }
94         spin_unlock(&pipe->lock);
95         rpc_purge_list(pipe, &free_list, destroy_msg, -ETIMEDOUT);
96 }
97
98 ssize_t rpc_pipe_generic_upcall(struct file *filp, struct rpc_pipe_msg *msg,
99                                 char __user *dst, size_t buflen)
100 {
101         char *data = (char *)msg->data + msg->copied;
102         size_t mlen = min(msg->len - msg->copied, buflen);
103         unsigned long left;
104
105         left = copy_to_user(dst, data, mlen);
106         if (left == mlen) {
107                 msg->errno = -EFAULT;
108                 return -EFAULT;
109         }
110
111         mlen -= left;
112         msg->copied += mlen;
113         msg->errno = 0;
114         return mlen;
115 }
116 EXPORT_SYMBOL_GPL(rpc_pipe_generic_upcall);
117
118 /**
119  * rpc_queue_upcall - queue an upcall message to userspace
120  * @inode: inode of upcall pipe on which to queue given message
121  * @msg: message to queue
122  *
123  * Call with an @inode created by rpc_mkpipe() to queue an upcall.
124  * A userspace process may then later read the upcall by performing a
125  * read on an open file for this inode.  It is up to the caller to
126  * initialize the fields of @msg (other than @msg->list) appropriately.
127  */
128 int
129 rpc_queue_upcall(struct rpc_pipe *pipe, struct rpc_pipe_msg *msg)
130 {
131         int res = -EPIPE;
132
133         spin_lock(&pipe->lock);
134         if (pipe->nreaders) {
135                 list_add_tail(&msg->list, &pipe->pipe);
136                 pipe->pipelen += msg->len;
137                 res = 0;
138         } else if (pipe->flags & RPC_PIPE_WAIT_FOR_OPEN) {
139                 if (list_empty(&pipe->pipe))
140                         queue_delayed_work(rpciod_workqueue,
141                                         &pipe->queue_timeout,
142                                         RPC_UPCALL_TIMEOUT);
143                 list_add_tail(&msg->list, &pipe->pipe);
144                 pipe->pipelen += msg->len;
145                 res = 0;
146         }
147         spin_unlock(&pipe->lock);
148         wake_up(&pipe->waitq);
149         return res;
150 }
151 EXPORT_SYMBOL_GPL(rpc_queue_upcall);
152
153 static inline void
154 rpc_inode_setowner(struct inode *inode, void *private)
155 {
156         RPC_I(inode)->private = private;
157 }
158
159 static void
160 rpc_close_pipes(struct inode *inode)
161 {
162         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
163         int need_release;
164         LIST_HEAD(free_list);
165
166         mutex_lock(&inode->i_mutex);
167         spin_lock(&pipe->lock);
168         need_release = pipe->nreaders != 0 || pipe->nwriters != 0;
169         pipe->nreaders = 0;
170         list_splice_init(&pipe->in_upcall, &free_list);
171         list_splice_init(&pipe->pipe, &free_list);
172         pipe->pipelen = 0;
173         pipe->dentry = NULL;
174         spin_unlock(&pipe->lock);
175         rpc_purge_list(pipe, &free_list, pipe->ops->destroy_msg, -EPIPE);
176         pipe->nwriters = 0;
177         if (need_release && pipe->ops->release_pipe)
178                 pipe->ops->release_pipe(inode);
179         cancel_delayed_work_sync(&pipe->queue_timeout);
180         rpc_inode_setowner(inode, NULL);
181         mutex_unlock(&inode->i_mutex);
182 }
183
184 static struct inode *
185 rpc_alloc_inode(struct super_block *sb)
186 {
187         struct rpc_inode *rpci;
188         rpci = (struct rpc_inode *)kmem_cache_alloc(rpc_inode_cachep, GFP_KERNEL);
189         if (!rpci)
190                 return NULL;
191         return &rpci->vfs_inode;
192 }
193
194 static void
195 rpc_i_callback(struct rcu_head *head)
196 {
197         struct inode *inode = container_of(head, struct inode, i_rcu);
198         kmem_cache_free(rpc_inode_cachep, RPC_I(inode));
199 }
200
201 static void
202 rpc_destroy_inode(struct inode *inode)
203 {
204         call_rcu(&inode->i_rcu, rpc_i_callback);
205 }
206
207 static int
208 rpc_pipe_open(struct inode *inode, struct file *filp)
209 {
210         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
211         int first_open;
212         int res = -ENXIO;
213
214         mutex_lock(&inode->i_mutex);
215         if (pipe->dentry == NULL)
216                 goto out;
217         first_open = pipe->nreaders == 0 && pipe->nwriters == 0;
218         if (first_open && pipe->ops->open_pipe) {
219                 res = pipe->ops->open_pipe(inode);
220                 if (res)
221                         goto out;
222         }
223         if (filp->f_mode & FMODE_READ)
224                 pipe->nreaders++;
225         if (filp->f_mode & FMODE_WRITE)
226                 pipe->nwriters++;
227         res = 0;
228 out:
229         mutex_unlock(&inode->i_mutex);
230         return res;
231 }
232
233 static int
234 rpc_pipe_release(struct inode *inode, struct file *filp)
235 {
236         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
237         struct rpc_pipe_msg *msg;
238         int last_close;
239
240         mutex_lock(&inode->i_mutex);
241         if (pipe->dentry == NULL)
242                 goto out;
243         msg = filp->private_data;
244         if (msg != NULL) {
245                 spin_lock(&pipe->lock);
246                 msg->errno = -EAGAIN;
247                 list_del_init(&msg->list);
248                 spin_unlock(&pipe->lock);
249                 pipe->ops->destroy_msg(msg);
250         }
251         if (filp->f_mode & FMODE_WRITE)
252                 pipe->nwriters --;
253         if (filp->f_mode & FMODE_READ) {
254                 pipe->nreaders --;
255                 if (pipe->nreaders == 0) {
256                         LIST_HEAD(free_list);
257                         spin_lock(&pipe->lock);
258                         list_splice_init(&pipe->pipe, &free_list);
259                         pipe->pipelen = 0;
260                         spin_unlock(&pipe->lock);
261                         rpc_purge_list(pipe, &free_list,
262                                         pipe->ops->destroy_msg, -EAGAIN);
263                 }
264         }
265         last_close = pipe->nwriters == 0 && pipe->nreaders == 0;
266         if (last_close && pipe->ops->release_pipe)
267                 pipe->ops->release_pipe(inode);
268 out:
269         mutex_unlock(&inode->i_mutex);
270         return 0;
271 }
272
273 static ssize_t
274 rpc_pipe_read(struct file *filp, char __user *buf, size_t len, loff_t *offset)
275 {
276         struct inode *inode = filp->f_path.dentry->d_inode;
277         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
278         struct rpc_pipe_msg *msg;
279         int res = 0;
280
281         mutex_lock(&inode->i_mutex);
282         if (pipe->dentry == NULL) {
283                 res = -EPIPE;
284                 goto out_unlock;
285         }
286         msg = filp->private_data;
287         if (msg == NULL) {
288                 spin_lock(&pipe->lock);
289                 if (!list_empty(&pipe->pipe)) {
290                         msg = list_entry(pipe->pipe.next,
291                                         struct rpc_pipe_msg,
292                                         list);
293                         list_move(&msg->list, &pipe->in_upcall);
294                         pipe->pipelen -= msg->len;
295                         filp->private_data = msg;
296                         msg->copied = 0;
297                 }
298                 spin_unlock(&pipe->lock);
299                 if (msg == NULL)
300                         goto out_unlock;
301         }
302         /* NOTE: it is up to the callback to update msg->copied */
303         res = pipe->ops->upcall(filp, msg, buf, len);
304         if (res < 0 || msg->len == msg->copied) {
305                 filp->private_data = NULL;
306                 spin_lock(&pipe->lock);
307                 list_del_init(&msg->list);
308                 spin_unlock(&pipe->lock);
309                 pipe->ops->destroy_msg(msg);
310         }
311 out_unlock:
312         mutex_unlock(&inode->i_mutex);
313         return res;
314 }
315
316 static ssize_t
317 rpc_pipe_write(struct file *filp, const char __user *buf, size_t len, loff_t *offset)
318 {
319         struct inode *inode = filp->f_path.dentry->d_inode;
320         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
321         int res;
322
323         mutex_lock(&inode->i_mutex);
324         res = -EPIPE;
325         if (pipe->dentry != NULL)
326                 res = pipe->ops->downcall(filp, buf, len);
327         mutex_unlock(&inode->i_mutex);
328         return res;
329 }
330
331 static unsigned int
332 rpc_pipe_poll(struct file *filp, struct poll_table_struct *wait)
333 {
334         struct rpc_pipe *pipe = RPC_I(filp->f_path.dentry->d_inode)->pipe;
335         unsigned int mask = 0;
336
337         poll_wait(filp, &pipe->waitq, wait);
338
339         mask = POLLOUT | POLLWRNORM;
340         if (pipe->dentry == NULL)
341                 mask |= POLLERR | POLLHUP;
342         if (filp->private_data || !list_empty(&pipe->pipe))
343                 mask |= POLLIN | POLLRDNORM;
344         return mask;
345 }
346
347 static long
348 rpc_pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
349 {
350         struct inode *inode = filp->f_path.dentry->d_inode;
351         struct rpc_pipe *pipe = RPC_I(inode)->pipe;
352         int len;
353
354         switch (cmd) {
355         case FIONREAD:
356                 spin_lock(&pipe->lock);
357                 if (pipe->dentry == NULL) {
358                         spin_unlock(&pipe->lock);
359                         return -EPIPE;
360                 }
361                 len = pipe->pipelen;
362                 if (filp->private_data) {
363                         struct rpc_pipe_msg *msg;
364                         msg = filp->private_data;
365                         len += msg->len - msg->copied;
366                 }
367                 spin_unlock(&pipe->lock);
368                 return put_user(len, (int __user *)arg);
369         default:
370                 return -EINVAL;
371         }
372 }
373
374 static const struct file_operations rpc_pipe_fops = {
375         .owner          = THIS_MODULE,
376         .llseek         = no_llseek,
377         .read           = rpc_pipe_read,
378         .write          = rpc_pipe_write,
379         .poll           = rpc_pipe_poll,
380         .unlocked_ioctl = rpc_pipe_ioctl,
381         .open           = rpc_pipe_open,
382         .release        = rpc_pipe_release,
383 };
384
385 static int
386 rpc_show_info(struct seq_file *m, void *v)
387 {
388         struct rpc_clnt *clnt = m->private;
389
390         seq_printf(m, "RPC server: %s\n", clnt->cl_server);
391         seq_printf(m, "service: %s (%d) version %d\n", clnt->cl_protname,
392                         clnt->cl_prog, clnt->cl_vers);
393         seq_printf(m, "address: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_ADDR));
394         seq_printf(m, "protocol: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_PROTO));
395         seq_printf(m, "port: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_PORT));
396         return 0;
397 }
398
399 static int
400 rpc_info_open(struct inode *inode, struct file *file)
401 {
402         struct rpc_clnt *clnt = NULL;
403         int ret = single_open(file, rpc_show_info, NULL);
404
405         if (!ret) {
406                 struct seq_file *m = file->private_data;
407
408                 spin_lock(&file->f_path.dentry->d_lock);
409                 if (!d_unhashed(file->f_path.dentry))
410                         clnt = RPC_I(inode)->private;
411                 if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) {
412                         spin_unlock(&file->f_path.dentry->d_lock);
413                         m->private = clnt;
414                 } else {
415                         spin_unlock(&file->f_path.dentry->d_lock);
416                         single_release(inode, file);
417                         ret = -EINVAL;
418                 }
419         }
420         return ret;
421 }
422
423 static int
424 rpc_info_release(struct inode *inode, struct file *file)
425 {
426         struct seq_file *m = file->private_data;
427         struct rpc_clnt *clnt = (struct rpc_clnt *)m->private;
428
429         if (clnt)
430                 rpc_release_client(clnt);
431         return single_release(inode, file);
432 }
433
434 static const struct file_operations rpc_info_operations = {
435         .owner          = THIS_MODULE,
436         .open           = rpc_info_open,
437         .read           = seq_read,
438         .llseek         = seq_lseek,
439         .release        = rpc_info_release,
440 };
441
442
443 /*
444  * Description of fs contents.
445  */
446 struct rpc_filelist {
447         const char *name;
448         const struct file_operations *i_fop;
449         umode_t mode;
450 };
451
452 struct vfsmount *rpc_get_mount(void)
453 {
454         int err;
455
456         err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mnt, &rpc_mount_count);
457         if (err != 0)
458                 return ERR_PTR(err);
459         return rpc_mnt;
460 }
461 EXPORT_SYMBOL_GPL(rpc_get_mount);
462
463 void rpc_put_mount(void)
464 {
465         simple_release_fs(&rpc_mnt, &rpc_mount_count);
466 }
467 EXPORT_SYMBOL_GPL(rpc_put_mount);
468
469 static int rpc_delete_dentry(const struct dentry *dentry)
470 {
471         return 1;
472 }
473
474 static const struct dentry_operations rpc_dentry_operations = {
475         .d_delete = rpc_delete_dentry,
476 };
477
478 static struct inode *
479 rpc_get_inode(struct super_block *sb, umode_t mode)
480 {
481         struct inode *inode = new_inode(sb);
482         if (!inode)
483                 return NULL;
484         inode->i_ino = get_next_ino();
485         inode->i_mode = mode;
486         inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
487         switch (mode & S_IFMT) {
488         case S_IFDIR:
489                 inode->i_fop = &simple_dir_operations;
490                 inode->i_op = &simple_dir_inode_operations;
491                 inc_nlink(inode);
492         default:
493                 break;
494         }
495         return inode;
496 }
497
498 static int __rpc_create_common(struct inode *dir, struct dentry *dentry,
499                                umode_t mode,
500                                const struct file_operations *i_fop,
501                                void *private)
502 {
503         struct inode *inode;
504
505         d_drop(dentry);
506         inode = rpc_get_inode(dir->i_sb, mode);
507         if (!inode)
508                 goto out_err;
509         inode->i_ino = iunique(dir->i_sb, 100);
510         if (i_fop)
511                 inode->i_fop = i_fop;
512         if (private)
513                 rpc_inode_setowner(inode, private);
514         d_add(dentry, inode);
515         return 0;
516 out_err:
517         printk(KERN_WARNING "%s: %s failed to allocate inode for dentry %s\n",
518                         __FILE__, __func__, dentry->d_name.name);
519         dput(dentry);
520         return -ENOMEM;
521 }
522
523 static int __rpc_create(struct inode *dir, struct dentry *dentry,
524                         umode_t mode,
525                         const struct file_operations *i_fop,
526                         void *private)
527 {
528         int err;
529
530         err = __rpc_create_common(dir, dentry, S_IFREG | mode, i_fop, private);
531         if (err)
532                 return err;
533         fsnotify_create(dir, dentry);
534         return 0;
535 }
536
537 static int __rpc_mkdir(struct inode *dir, struct dentry *dentry,
538                        umode_t mode,
539                        const struct file_operations *i_fop,
540                        void *private)
541 {
542         int err;
543
544         err = __rpc_create_common(dir, dentry, S_IFDIR | mode, i_fop, private);
545         if (err)
546                 return err;
547         inc_nlink(dir);
548         fsnotify_mkdir(dir, dentry);
549         return 0;
550 }
551
552 static void
553 init_pipe(struct rpc_pipe *pipe)
554 {
555         pipe->nreaders = 0;
556         pipe->nwriters = 0;
557         INIT_LIST_HEAD(&pipe->in_upcall);
558         INIT_LIST_HEAD(&pipe->in_downcall);
559         INIT_LIST_HEAD(&pipe->pipe);
560         pipe->pipelen = 0;
561         init_waitqueue_head(&pipe->waitq);
562         INIT_DELAYED_WORK(&pipe->queue_timeout,
563                             rpc_timeout_upcall_queue);
564         pipe->ops = NULL;
565         spin_lock_init(&pipe->lock);
566         pipe->dentry = NULL;
567 }
568
569 void rpc_destroy_pipe_data(struct rpc_pipe *pipe)
570 {
571         kfree(pipe);
572 }
573 EXPORT_SYMBOL_GPL(rpc_destroy_pipe_data);
574
575 struct rpc_pipe *rpc_mkpipe_data(const struct rpc_pipe_ops *ops, int flags)
576 {
577         struct rpc_pipe *pipe;
578
579         pipe = kzalloc(sizeof(struct rpc_pipe), GFP_KERNEL);
580         if (!pipe)
581                 return ERR_PTR(-ENOMEM);
582         init_pipe(pipe);
583         pipe->ops = ops;
584         pipe->flags = flags;
585         return pipe;
586 }
587 EXPORT_SYMBOL_GPL(rpc_mkpipe_data);
588
589 static int __rpc_mkpipe_dentry(struct inode *dir, struct dentry *dentry,
590                                umode_t mode,
591                                const struct file_operations *i_fop,
592                                void *private,
593                                struct rpc_pipe *pipe)
594 {
595         struct rpc_inode *rpci;
596         int err;
597
598         err = __rpc_create_common(dir, dentry, S_IFIFO | mode, i_fop, private);
599         if (err)
600                 return err;
601         rpci = RPC_I(dentry->d_inode);
602         rpci->private = private;
603         rpci->pipe = pipe;
604         fsnotify_create(dir, dentry);
605         return 0;
606 }
607
608 static int __rpc_rmdir(struct inode *dir, struct dentry *dentry)
609 {
610         int ret;
611
612         dget(dentry);
613         ret = simple_rmdir(dir, dentry);
614         d_delete(dentry);
615         dput(dentry);
616         return ret;
617 }
618
619 static int __rpc_unlink(struct inode *dir, struct dentry *dentry)
620 {
621         int ret;
622
623         dget(dentry);
624         ret = simple_unlink(dir, dentry);
625         d_delete(dentry);
626         dput(dentry);
627         return ret;
628 }
629
630 static int __rpc_rmpipe(struct inode *dir, struct dentry *dentry)
631 {
632         struct inode *inode = dentry->d_inode;
633
634         rpc_close_pipes(inode);
635         return __rpc_unlink(dir, dentry);
636 }
637
638 static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent,
639                                           struct qstr *name)
640 {
641         struct dentry *dentry;
642
643         dentry = d_lookup(parent, name);
644         if (!dentry) {
645                 dentry = d_alloc(parent, name);
646                 if (!dentry)
647                         return ERR_PTR(-ENOMEM);
648         }
649         if (dentry->d_inode == NULL) {
650                 d_set_d_op(dentry, &rpc_dentry_operations);
651                 return dentry;
652         }
653         dput(dentry);
654         return ERR_PTR(-EEXIST);
655 }
656
657 /*
658  * FIXME: This probably has races.
659  */
660 static void __rpc_depopulate(struct dentry *parent,
661                              const struct rpc_filelist *files,
662                              int start, int eof)
663 {
664         struct inode *dir = parent->d_inode;
665         struct dentry *dentry;
666         struct qstr name;
667         int i;
668
669         for (i = start; i < eof; i++) {
670                 name.name = files[i].name;
671                 name.len = strlen(files[i].name);
672                 name.hash = full_name_hash(name.name, name.len);
673                 dentry = d_lookup(parent, &name);
674
675                 if (dentry == NULL)
676                         continue;
677                 if (dentry->d_inode == NULL)
678                         goto next;
679                 switch (dentry->d_inode->i_mode & S_IFMT) {
680                         default:
681                                 BUG();
682                         case S_IFREG:
683                                 __rpc_unlink(dir, dentry);
684                                 break;
685                         case S_IFDIR:
686                                 __rpc_rmdir(dir, dentry);
687                 }
688 next:
689                 dput(dentry);
690         }
691 }
692
693 static void rpc_depopulate(struct dentry *parent,
694                            const struct rpc_filelist *files,
695                            int start, int eof)
696 {
697         struct inode *dir = parent->d_inode;
698
699         mutex_lock_nested(&dir->i_mutex, I_MUTEX_CHILD);
700         __rpc_depopulate(parent, files, start, eof);
701         mutex_unlock(&dir->i_mutex);
702 }
703
704 static int rpc_populate(struct dentry *parent,
705                         const struct rpc_filelist *files,
706                         int start, int eof,
707                         void *private)
708 {
709         struct inode *dir = parent->d_inode;
710         struct dentry *dentry;
711         int i, err;
712
713         mutex_lock(&dir->i_mutex);
714         for (i = start; i < eof; i++) {
715                 struct qstr q;
716
717                 q.name = files[i].name;
718                 q.len = strlen(files[i].name);
719                 q.hash = full_name_hash(q.name, q.len);
720                 dentry = __rpc_lookup_create_exclusive(parent, &q);
721                 err = PTR_ERR(dentry);
722                 if (IS_ERR(dentry))
723                         goto out_bad;
724                 switch (files[i].mode & S_IFMT) {
725                         default:
726                                 BUG();
727                         case S_IFREG:
728                                 err = __rpc_create(dir, dentry,
729                                                 files[i].mode,
730                                                 files[i].i_fop,
731                                                 private);
732                                 break;
733                         case S_IFDIR:
734                                 err = __rpc_mkdir(dir, dentry,
735                                                 files[i].mode,
736                                                 NULL,
737                                                 private);
738                 }
739                 if (err != 0)
740                         goto out_bad;
741         }
742         mutex_unlock(&dir->i_mutex);
743         return 0;
744 out_bad:
745         __rpc_depopulate(parent, files, start, eof);
746         mutex_unlock(&dir->i_mutex);
747         printk(KERN_WARNING "%s: %s failed to populate directory %s\n",
748                         __FILE__, __func__, parent->d_name.name);
749         return err;
750 }
751
752 static struct dentry *rpc_mkdir_populate(struct dentry *parent,
753                 struct qstr *name, umode_t mode, void *private,
754                 int (*populate)(struct dentry *, void *), void *args_populate)
755 {
756         struct dentry *dentry;
757         struct inode *dir = parent->d_inode;
758         int error;
759
760         mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
761         dentry = __rpc_lookup_create_exclusive(parent, name);
762         if (IS_ERR(dentry))
763                 goto out;
764         error = __rpc_mkdir(dir, dentry, mode, NULL, private);
765         if (error != 0)
766                 goto out_err;
767         if (populate != NULL) {
768                 error = populate(dentry, args_populate);
769                 if (error)
770                         goto err_rmdir;
771         }
772 out:
773         mutex_unlock(&dir->i_mutex);
774         return dentry;
775 err_rmdir:
776         __rpc_rmdir(dir, dentry);
777 out_err:
778         dentry = ERR_PTR(error);
779         goto out;
780 }
781
782 static int rpc_rmdir_depopulate(struct dentry *dentry,
783                 void (*depopulate)(struct dentry *))
784 {
785         struct dentry *parent;
786         struct inode *dir;
787         int error;
788
789         parent = dget_parent(dentry);
790         dir = parent->d_inode;
791         mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
792         if (depopulate != NULL)
793                 depopulate(dentry);
794         error = __rpc_rmdir(dir, dentry);
795         mutex_unlock(&dir->i_mutex);
796         dput(parent);
797         return error;
798 }
799
800 /**
801  * rpc_mkpipe - make an rpc_pipefs file for kernel<->userspace communication
802  * @parent: dentry of directory to create new "pipe" in
803  * @name: name of pipe
804  * @private: private data to associate with the pipe, for the caller's use
805  * @ops: operations defining the behavior of the pipe: upcall, downcall,
806  *      release_pipe, open_pipe, and destroy_msg.
807  * @flags: rpc_pipe flags
808  *
809  * Data is made available for userspace to read by calls to
810  * rpc_queue_upcall().  The actual reads will result in calls to
811  * @ops->upcall, which will be called with the file pointer,
812  * message, and userspace buffer to copy to.
813  *
814  * Writes can come at any time, and do not necessarily have to be
815  * responses to upcalls.  They will result in calls to @msg->downcall.
816  *
817  * The @private argument passed here will be available to all these methods
818  * from the file pointer, via RPC_I(file->f_dentry->d_inode)->private.
819  */
820 struct dentry *rpc_mkpipe_dentry(struct dentry *parent, const char *name,
821                                  void *private, struct rpc_pipe *pipe)
822 {
823         struct dentry *dentry;
824         struct inode *dir = parent->d_inode;
825         umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR;
826         struct qstr q;
827         int err;
828
829         if (pipe->ops->upcall == NULL)
830                 umode &= ~S_IRUGO;
831         if (pipe->ops->downcall == NULL)
832                 umode &= ~S_IWUGO;
833
834         q.name = name;
835         q.len = strlen(name);
836         q.hash = full_name_hash(q.name, q.len),
837
838         mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
839         dentry = __rpc_lookup_create_exclusive(parent, &q);
840         if (IS_ERR(dentry))
841                 goto out;
842         err = __rpc_mkpipe_dentry(dir, dentry, umode, &rpc_pipe_fops,
843                                   private, pipe);
844         if (err)
845                 goto out_err;
846 out:
847         mutex_unlock(&dir->i_mutex);
848         return dentry;
849 out_err:
850         dentry = ERR_PTR(err);
851         printk(KERN_WARNING "%s: %s() failed to create pipe %s/%s (errno = %d)\n",
852                         __FILE__, __func__, parent->d_name.name, name,
853                         err);
854         goto out;
855 }
856 EXPORT_SYMBOL_GPL(rpc_mkpipe_dentry);
857
858 /**
859  * rpc_unlink - remove a pipe
860  * @dentry: dentry for the pipe, as returned from rpc_mkpipe
861  *
862  * After this call, lookups will no longer find the pipe, and any
863  * attempts to read or write using preexisting opens of the pipe will
864  * return -EPIPE.
865  */
866 int
867 rpc_unlink(struct dentry *dentry)
868 {
869         struct dentry *parent;
870         struct inode *dir;
871         int error = 0;
872
873         parent = dget_parent(dentry);
874         dir = parent->d_inode;
875         mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
876         error = __rpc_rmpipe(dir, dentry);
877         mutex_unlock(&dir->i_mutex);
878         dput(parent);
879         return error;
880 }
881 EXPORT_SYMBOL_GPL(rpc_unlink);
882
883 enum {
884         RPCAUTH_info,
885         RPCAUTH_EOF
886 };
887
888 static const struct rpc_filelist authfiles[] = {
889         [RPCAUTH_info] = {
890                 .name = "info",
891                 .i_fop = &rpc_info_operations,
892                 .mode = S_IFREG | S_IRUSR,
893         },
894 };
895
896 static int rpc_clntdir_populate(struct dentry *dentry, void *private)
897 {
898         return rpc_populate(dentry,
899                             authfiles, RPCAUTH_info, RPCAUTH_EOF,
900                             private);
901 }
902
903 static void rpc_clntdir_depopulate(struct dentry *dentry)
904 {
905         rpc_depopulate(dentry, authfiles, RPCAUTH_info, RPCAUTH_EOF);
906 }
907
908 /**
909  * rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
910  * @dentry: dentry from the rpc_pipefs root to the new directory
911  * @name: &struct qstr for the name
912  * @rpc_client: rpc client to associate with this directory
913  *
914  * This creates a directory at the given @path associated with
915  * @rpc_clnt, which will contain a file named "info" with some basic
916  * information about the client, together with any "pipes" that may
917  * later be created using rpc_mkpipe().
918  */
919 struct dentry *rpc_create_client_dir(struct dentry *dentry,
920                                    struct qstr *name,
921                                    struct rpc_clnt *rpc_client)
922 {
923         return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
924                         rpc_clntdir_populate, rpc_client);
925 }
926
927 /**
928  * rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir()
929  * @clnt: rpc client
930  */
931 int rpc_remove_client_dir(struct dentry *dentry)
932 {
933         return rpc_rmdir_depopulate(dentry, rpc_clntdir_depopulate);
934 }
935
936 static const struct rpc_filelist cache_pipefs_files[3] = {
937         [0] = {
938                 .name = "channel",
939                 .i_fop = &cache_file_operations_pipefs,
940                 .mode = S_IFREG|S_IRUSR|S_IWUSR,
941         },
942         [1] = {
943                 .name = "content",
944                 .i_fop = &content_file_operations_pipefs,
945                 .mode = S_IFREG|S_IRUSR,
946         },
947         [2] = {
948                 .name = "flush",
949                 .i_fop = &cache_flush_operations_pipefs,
950                 .mode = S_IFREG|S_IRUSR|S_IWUSR,
951         },
952 };
953
954 static int rpc_cachedir_populate(struct dentry *dentry, void *private)
955 {
956         return rpc_populate(dentry,
957                             cache_pipefs_files, 0, 3,
958                             private);
959 }
960
961 static void rpc_cachedir_depopulate(struct dentry *dentry)
962 {
963         rpc_depopulate(dentry, cache_pipefs_files, 0, 3);
964 }
965
966 struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name,
967                                     umode_t umode, struct cache_detail *cd)
968 {
969         return rpc_mkdir_populate(parent, name, umode, NULL,
970                         rpc_cachedir_populate, cd);
971 }
972
973 void rpc_remove_cache_dir(struct dentry *dentry)
974 {
975         rpc_rmdir_depopulate(dentry, rpc_cachedir_depopulate);
976 }
977
978 /*
979  * populate the filesystem
980  */
981 static const struct super_operations s_ops = {
982         .alloc_inode    = rpc_alloc_inode,
983         .destroy_inode  = rpc_destroy_inode,
984         .statfs         = simple_statfs,
985 };
986
987 #define RPCAUTH_GSSMAGIC 0x67596969
988
989 /*
990  * We have a single directory with 1 node in it.
991  */
992 enum {
993         RPCAUTH_lockd,
994         RPCAUTH_mount,
995         RPCAUTH_nfs,
996         RPCAUTH_portmap,
997         RPCAUTH_statd,
998         RPCAUTH_nfsd4_cb,
999         RPCAUTH_cache,
1000         RPCAUTH_RootEOF
1001 };
1002
1003 static const struct rpc_filelist files[] = {
1004         [RPCAUTH_lockd] = {
1005                 .name = "lockd",
1006                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1007         },
1008         [RPCAUTH_mount] = {
1009                 .name = "mount",
1010                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1011         },
1012         [RPCAUTH_nfs] = {
1013                 .name = "nfs",
1014                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1015         },
1016         [RPCAUTH_portmap] = {
1017                 .name = "portmap",
1018                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1019         },
1020         [RPCAUTH_statd] = {
1021                 .name = "statd",
1022                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1023         },
1024         [RPCAUTH_nfsd4_cb] = {
1025                 .name = "nfsd4_cb",
1026                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1027         },
1028         [RPCAUTH_cache] = {
1029                 .name = "cache",
1030                 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
1031         },
1032 };
1033
1034 /*
1035  * This call can be used only in RPC pipefs mount notification hooks.
1036  */
1037 struct dentry *rpc_d_lookup_sb(const struct super_block *sb,
1038                                const unsigned char *dir_name)
1039 {
1040         struct qstr dir = {
1041                 .name = dir_name,
1042                 .len = strlen(dir_name),
1043                 .hash = full_name_hash(dir_name, strlen(dir_name)),
1044         };
1045
1046         return d_lookup(sb->s_root, &dir);
1047 }
1048 EXPORT_SYMBOL_GPL(rpc_d_lookup_sb);
1049
1050 void rpc_pipefs_init_net(struct net *net)
1051 {
1052         struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1053
1054         mutex_init(&sn->pipefs_sb_lock);
1055 }
1056
1057 /*
1058  * This call will be used for per network namespace operations calls.
1059  * Note: Function will be returned with pipefs_sb_lock taken if superblock was
1060  * found. This lock have to be released by rpc_put_sb_net() when all operations
1061  * will be completed.
1062  */
1063 struct super_block *rpc_get_sb_net(const struct net *net)
1064 {
1065         struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1066
1067         mutex_lock(&sn->pipefs_sb_lock);
1068         if (sn->pipefs_sb)
1069                 return sn->pipefs_sb;
1070         mutex_unlock(&sn->pipefs_sb_lock);
1071         return NULL;
1072 }
1073 EXPORT_SYMBOL_GPL(rpc_get_sb_net);
1074
1075 void rpc_put_sb_net(const struct net *net)
1076 {
1077         struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1078
1079         BUG_ON(sn->pipefs_sb == NULL);
1080         mutex_unlock(&sn->pipefs_sb_lock);
1081 }
1082 EXPORT_SYMBOL_GPL(rpc_put_sb_net);
1083
1084 static int
1085 rpc_fill_super(struct super_block *sb, void *data, int silent)
1086 {
1087         struct inode *inode;
1088         struct dentry *root;
1089         struct net *net = data;
1090         struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1091         int err;
1092
1093         sb->s_blocksize = PAGE_CACHE_SIZE;
1094         sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
1095         sb->s_magic = RPCAUTH_GSSMAGIC;
1096         sb->s_op = &s_ops;
1097         sb->s_time_gran = 1;
1098
1099         inode = rpc_get_inode(sb, S_IFDIR | 0755);
1100         if (!inode)
1101                 return -ENOMEM;
1102         sb->s_root = root = d_alloc_root(inode);
1103         if (!root) {
1104                 iput(inode);
1105                 return -ENOMEM;
1106         }
1107         if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL))
1108                 return -ENOMEM;
1109         dprintk("RPC:   sending pipefs MOUNT notification for net %p%s\n", net,
1110                                                                 NET_NAME(net));
1111         err = blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
1112                                            RPC_PIPEFS_MOUNT,
1113                                            sb);
1114         if (err)
1115                 goto err_depopulate;
1116         sb->s_fs_info = get_net(net);
1117         sn->pipefs_sb = sb;
1118         return 0;
1119
1120 err_depopulate:
1121         blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
1122                                            RPC_PIPEFS_UMOUNT,
1123                                            sb);
1124         __rpc_depopulate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF);
1125         return err;
1126 }
1127
1128 static struct dentry *
1129 rpc_mount(struct file_system_type *fs_type,
1130                 int flags, const char *dev_name, void *data)
1131 {
1132         return mount_ns(fs_type, flags, current->nsproxy->net_ns, rpc_fill_super);
1133 }
1134
1135 void rpc_kill_sb(struct super_block *sb)
1136 {
1137         struct net *net = sb->s_fs_info;
1138         struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
1139
1140         mutex_lock(&sn->pipefs_sb_lock);
1141         sn->pipefs_sb = NULL;
1142         mutex_unlock(&sn->pipefs_sb_lock);
1143         put_net(net);
1144         dprintk("RPC:   sending pipefs UMOUNT notification for net %p%s\n", net,
1145                                                                 NET_NAME(net));
1146         blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
1147                                            RPC_PIPEFS_UMOUNT,
1148                                            sb);
1149         kill_litter_super(sb);
1150 }
1151
1152 static struct file_system_type rpc_pipe_fs_type = {
1153         .owner          = THIS_MODULE,
1154         .name           = "rpc_pipefs",
1155         .mount          = rpc_mount,
1156         .kill_sb        = rpc_kill_sb,
1157 };
1158
1159 static void
1160 init_once(void *foo)
1161 {
1162         struct rpc_inode *rpci = (struct rpc_inode *) foo;
1163
1164         inode_init_once(&rpci->vfs_inode);
1165         rpci->private = NULL;
1166         rpci->pipe = NULL;
1167 }
1168
1169 int register_rpc_pipefs(void)
1170 {
1171         int err;
1172
1173         rpc_inode_cachep = kmem_cache_create("rpc_inode_cache",
1174                                 sizeof(struct rpc_inode),
1175                                 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
1176                                                 SLAB_MEM_SPREAD),
1177                                 init_once);
1178         if (!rpc_inode_cachep)
1179                 return -ENOMEM;
1180         err = rpc_clients_notifier_register();
1181         if (err)
1182                 goto err_notifier;
1183         err = register_filesystem(&rpc_pipe_fs_type);
1184         if (err)
1185                 goto err_register;
1186         return 0;
1187
1188 err_register:
1189         rpc_clients_notifier_unregister();
1190 err_notifier:
1191         kmem_cache_destroy(rpc_inode_cachep);
1192         return err;
1193 }
1194
1195 void unregister_rpc_pipefs(void)
1196 {
1197         rpc_clients_notifier_unregister();
1198         kmem_cache_destroy(rpc_inode_cachep);
1199         unregister_filesystem(&rpc_pipe_fs_type);
1200 }
1201
1202 /* Make 'mount -t rpc_pipefs ...' autoload this module. */
1203 MODULE_ALIAS("rpc_pipefs");