2 * net/sunrpc/rpc_pipe.c
4 * Userland/kernel interface for rpcauth_gss.
5 * Code shamelessly plagiarized from fs/nfsd/nfsctl.c
8 * Copyright (c) 2002, Trond Myklebust <trond.myklebust@fys.uio.no>
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>
20 #include <asm/ioctls.h>
22 #include <linux/poll.h>
23 #include <linux/wait.h>
24 #include <linux/seq_file.h>
26 #include <linux/sunrpc/clnt.h>
27 #include <linux/workqueue.h>
28 #include <linux/sunrpc/rpc_pipe_fs.h>
30 static struct vfsmount
*rpc_mount __read_mostly
;
31 static int rpc_mount_count
;
33 static struct file_system_type rpc_pipe_fs_type
;
36 static struct kmem_cache
*rpc_inode_cachep __read_mostly
;
38 #define RPC_UPCALL_TIMEOUT (30*HZ)
40 static void rpc_purge_list(struct rpc_inode
*rpci
, struct list_head
*head
,
41 void (*destroy_msg
)(struct rpc_pipe_msg
*), int err
)
43 struct rpc_pipe_msg
*msg
;
48 msg
= list_entry(head
->next
, struct rpc_pipe_msg
, list
);
52 } while (!list_empty(head
));
53 wake_up(&rpci
->waitq
);
57 rpc_timeout_upcall_queue(struct work_struct
*work
)
60 struct rpc_inode
*rpci
=
61 container_of(work
, struct rpc_inode
, queue_timeout
.work
);
62 struct inode
*inode
= &rpci
->vfs_inode
;
63 void (*destroy_msg
)(struct rpc_pipe_msg
*);
65 spin_lock(&inode
->i_lock
);
66 if (rpci
->ops
== NULL
) {
67 spin_unlock(&inode
->i_lock
);
70 destroy_msg
= rpci
->ops
->destroy_msg
;
71 if (rpci
->nreaders
== 0) {
72 list_splice_init(&rpci
->pipe
, &free_list
);
75 spin_unlock(&inode
->i_lock
);
76 rpc_purge_list(rpci
, &free_list
, destroy_msg
, -ETIMEDOUT
);
81 * @inode: inode of upcall pipe on which to queue given message
82 * @msg: message to queue
84 * Call with an @inode created by rpc_mkpipe() to queue an upcall.
85 * A userspace process may then later read the upcall by performing a
86 * read on an open file for this inode. It is up to the caller to
87 * initialize the fields of @msg (other than @msg->list) appropriately.
90 rpc_queue_upcall(struct inode
*inode
, struct rpc_pipe_msg
*msg
)
92 struct rpc_inode
*rpci
= RPC_I(inode
);
95 spin_lock(&inode
->i_lock
);
96 if (rpci
->ops
== NULL
)
99 list_add_tail(&msg
->list
, &rpci
->pipe
);
100 rpci
->pipelen
+= msg
->len
;
102 } else if (rpci
->flags
& RPC_PIPE_WAIT_FOR_OPEN
) {
103 if (list_empty(&rpci
->pipe
))
104 queue_delayed_work(rpciod_workqueue
,
105 &rpci
->queue_timeout
,
107 list_add_tail(&msg
->list
, &rpci
->pipe
);
108 rpci
->pipelen
+= msg
->len
;
112 spin_unlock(&inode
->i_lock
);
113 wake_up(&rpci
->waitq
);
116 EXPORT_SYMBOL_GPL(rpc_queue_upcall
);
119 rpc_inode_setowner(struct inode
*inode
, void *private)
121 RPC_I(inode
)->private = private;
125 rpc_close_pipes(struct inode
*inode
)
127 struct rpc_inode
*rpci
= RPC_I(inode
);
128 struct rpc_pipe_ops
*ops
;
131 mutex_lock(&inode
->i_mutex
);
134 LIST_HEAD(free_list
);
135 spin_lock(&inode
->i_lock
);
136 need_release
= rpci
->nreaders
!= 0 || rpci
->nwriters
!= 0;
138 list_splice_init(&rpci
->in_upcall
, &free_list
);
139 list_splice_init(&rpci
->pipe
, &free_list
);
142 spin_unlock(&inode
->i_lock
);
143 rpc_purge_list(rpci
, &free_list
, ops
->destroy_msg
, -EPIPE
);
145 if (need_release
&& ops
->release_pipe
)
146 ops
->release_pipe(inode
);
147 cancel_delayed_work_sync(&rpci
->queue_timeout
);
149 rpc_inode_setowner(inode
, NULL
);
150 mutex_unlock(&inode
->i_mutex
);
153 static struct inode
*
154 rpc_alloc_inode(struct super_block
*sb
)
156 struct rpc_inode
*rpci
;
157 rpci
= (struct rpc_inode
*)kmem_cache_alloc(rpc_inode_cachep
, GFP_KERNEL
);
160 return &rpci
->vfs_inode
;
164 rpc_destroy_inode(struct inode
*inode
)
166 kmem_cache_free(rpc_inode_cachep
, RPC_I(inode
));
170 rpc_pipe_open(struct inode
*inode
, struct file
*filp
)
172 struct rpc_inode
*rpci
= RPC_I(inode
);
176 mutex_lock(&inode
->i_mutex
);
177 if (rpci
->ops
== NULL
)
179 first_open
= rpci
->nreaders
== 0 && rpci
->nwriters
== 0;
180 if (first_open
&& rpci
->ops
->open_pipe
) {
181 res
= rpci
->ops
->open_pipe(inode
);
185 if (filp
->f_mode
& FMODE_READ
)
187 if (filp
->f_mode
& FMODE_WRITE
)
191 mutex_unlock(&inode
->i_mutex
);
196 rpc_pipe_release(struct inode
*inode
, struct file
*filp
)
198 struct rpc_inode
*rpci
= RPC_I(inode
);
199 struct rpc_pipe_msg
*msg
;
202 mutex_lock(&inode
->i_mutex
);
203 if (rpci
->ops
== NULL
)
205 msg
= (struct rpc_pipe_msg
*)filp
->private_data
;
207 spin_lock(&inode
->i_lock
);
208 msg
->errno
= -EAGAIN
;
209 list_del(&msg
->list
);
210 spin_unlock(&inode
->i_lock
);
211 rpci
->ops
->destroy_msg(msg
);
213 if (filp
->f_mode
& FMODE_WRITE
)
215 if (filp
->f_mode
& FMODE_READ
) {
217 if (rpci
->nreaders
== 0) {
218 LIST_HEAD(free_list
);
219 spin_lock(&inode
->i_lock
);
220 list_splice_init(&rpci
->pipe
, &free_list
);
222 spin_unlock(&inode
->i_lock
);
223 rpc_purge_list(rpci
, &free_list
,
224 rpci
->ops
->destroy_msg
, -EAGAIN
);
227 last_close
= rpci
->nwriters
== 0 && rpci
->nreaders
== 0;
228 if (last_close
&& rpci
->ops
->release_pipe
)
229 rpci
->ops
->release_pipe(inode
);
231 mutex_unlock(&inode
->i_mutex
);
236 rpc_pipe_read(struct file
*filp
, char __user
*buf
, size_t len
, loff_t
*offset
)
238 struct inode
*inode
= filp
->f_path
.dentry
->d_inode
;
239 struct rpc_inode
*rpci
= RPC_I(inode
);
240 struct rpc_pipe_msg
*msg
;
243 mutex_lock(&inode
->i_mutex
);
244 if (rpci
->ops
== NULL
) {
248 msg
= filp
->private_data
;
250 spin_lock(&inode
->i_lock
);
251 if (!list_empty(&rpci
->pipe
)) {
252 msg
= list_entry(rpci
->pipe
.next
,
255 list_move(&msg
->list
, &rpci
->in_upcall
);
256 rpci
->pipelen
-= msg
->len
;
257 filp
->private_data
= msg
;
260 spin_unlock(&inode
->i_lock
);
264 /* NOTE: it is up to the callback to update msg->copied */
265 res
= rpci
->ops
->upcall(filp
, msg
, buf
, len
);
266 if (res
< 0 || msg
->len
== msg
->copied
) {
267 filp
->private_data
= NULL
;
268 spin_lock(&inode
->i_lock
);
269 list_del(&msg
->list
);
270 spin_unlock(&inode
->i_lock
);
271 rpci
->ops
->destroy_msg(msg
);
274 mutex_unlock(&inode
->i_mutex
);
279 rpc_pipe_write(struct file
*filp
, const char __user
*buf
, size_t len
, loff_t
*offset
)
281 struct inode
*inode
= filp
->f_path
.dentry
->d_inode
;
282 struct rpc_inode
*rpci
= RPC_I(inode
);
285 mutex_lock(&inode
->i_mutex
);
287 if (rpci
->ops
!= NULL
)
288 res
= rpci
->ops
->downcall(filp
, buf
, len
);
289 mutex_unlock(&inode
->i_mutex
);
294 rpc_pipe_poll(struct file
*filp
, struct poll_table_struct
*wait
)
296 struct rpc_inode
*rpci
;
297 unsigned int mask
= 0;
299 rpci
= RPC_I(filp
->f_path
.dentry
->d_inode
);
300 poll_wait(filp
, &rpci
->waitq
, wait
);
302 mask
= POLLOUT
| POLLWRNORM
;
303 if (rpci
->ops
== NULL
)
304 mask
|= POLLERR
| POLLHUP
;
305 if (filp
->private_data
|| !list_empty(&rpci
->pipe
))
306 mask
|= POLLIN
| POLLRDNORM
;
311 rpc_pipe_ioctl(struct inode
*ino
, struct file
*filp
,
312 unsigned int cmd
, unsigned long arg
)
314 struct rpc_inode
*rpci
= RPC_I(filp
->f_path
.dentry
->d_inode
);
319 if (rpci
->ops
== NULL
)
322 if (filp
->private_data
) {
323 struct rpc_pipe_msg
*msg
;
324 msg
= (struct rpc_pipe_msg
*)filp
->private_data
;
325 len
+= msg
->len
- msg
->copied
;
327 return put_user(len
, (int __user
*)arg
);
333 static const struct file_operations rpc_pipe_fops
= {
334 .owner
= THIS_MODULE
,
336 .read
= rpc_pipe_read
,
337 .write
= rpc_pipe_write
,
338 .poll
= rpc_pipe_poll
,
339 .ioctl
= rpc_pipe_ioctl
,
340 .open
= rpc_pipe_open
,
341 .release
= rpc_pipe_release
,
345 rpc_show_info(struct seq_file
*m
, void *v
)
347 struct rpc_clnt
*clnt
= m
->private;
349 seq_printf(m
, "RPC server: %s\n", clnt
->cl_server
);
350 seq_printf(m
, "service: %s (%d) version %d\n", clnt
->cl_protname
,
351 clnt
->cl_prog
, clnt
->cl_vers
);
352 seq_printf(m
, "address: %s\n", rpc_peeraddr2str(clnt
, RPC_DISPLAY_ADDR
));
353 seq_printf(m
, "protocol: %s\n", rpc_peeraddr2str(clnt
, RPC_DISPLAY_PROTO
));
354 seq_printf(m
, "port: %s\n", rpc_peeraddr2str(clnt
, RPC_DISPLAY_PORT
));
359 rpc_info_open(struct inode
*inode
, struct file
*file
)
361 struct rpc_clnt
*clnt
;
362 int ret
= single_open(file
, rpc_show_info
, NULL
);
365 struct seq_file
*m
= file
->private_data
;
366 mutex_lock(&inode
->i_mutex
);
367 clnt
= RPC_I(inode
)->private;
369 kref_get(&clnt
->cl_kref
);
372 single_release(inode
, file
);
375 mutex_unlock(&inode
->i_mutex
);
381 rpc_info_release(struct inode
*inode
, struct file
*file
)
383 struct seq_file
*m
= file
->private_data
;
384 struct rpc_clnt
*clnt
= (struct rpc_clnt
*)m
->private;
387 rpc_release_client(clnt
);
388 return single_release(inode
, file
);
391 static const struct file_operations rpc_info_operations
= {
392 .owner
= THIS_MODULE
,
393 .open
= rpc_info_open
,
396 .release
= rpc_info_release
,
401 * We have a single directory with 1 node in it.
415 * Description of fs contents.
417 struct rpc_filelist
{
419 const struct file_operations
*i_fop
;
423 static struct rpc_filelist files
[] = {
426 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
430 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
434 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
436 [RPCAUTH_portmap
] = {
438 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
442 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
444 [RPCAUTH_nfsd4_cb
] = {
446 .mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
,
455 static struct rpc_filelist authfiles
[] = {
458 .i_fop
= &rpc_info_operations
,
459 .mode
= S_IFREG
| S_IRUSR
,
463 struct vfsmount
*rpc_get_mount(void)
467 err
= simple_pin_fs(&rpc_pipe_fs_type
, &rpc_mount
, &rpc_mount_count
);
473 void rpc_put_mount(void)
475 simple_release_fs(&rpc_mount
, &rpc_mount_count
);
478 static int rpc_delete_dentry(struct dentry
*dentry
)
483 static struct dentry_operations rpc_dentry_operations
= {
484 .d_delete
= rpc_delete_dentry
,
488 rpc_lookup_parent(char *path
, struct nameidata
*nd
)
490 struct vfsmount
*mnt
;
495 mnt
= rpc_get_mount();
497 printk(KERN_WARNING
"%s: %s failed to mount "
498 "pseudofilesystem \n", __FILE__
, __func__
);
502 if (vfs_path_lookup(mnt
->mnt_root
, mnt
, path
, LOOKUP_PARENT
, nd
)) {
503 printk(KERN_WARNING
"%s: %s failed to find path %s\n",
504 __FILE__
, __func__
, path
);
512 rpc_release_path(struct nameidata
*nd
)
518 static struct inode
*
519 rpc_get_inode(struct super_block
*sb
, int mode
)
521 struct inode
*inode
= new_inode(sb
);
524 inode
->i_mode
= mode
;
525 inode
->i_atime
= inode
->i_mtime
= inode
->i_ctime
= CURRENT_TIME
;
526 switch(mode
& S_IFMT
) {
528 inode
->i_fop
= &simple_dir_operations
;
529 inode
->i_op
= &simple_dir_inode_operations
;
538 * FIXME: This probably has races.
540 static void rpc_depopulate(struct dentry
*parent
,
541 unsigned long start
, unsigned long eof
)
543 struct inode
*dir
= parent
->d_inode
;
544 struct list_head
*pos
, *next
;
545 struct dentry
*dentry
, *dvec
[10];
548 mutex_lock_nested(&dir
->i_mutex
, I_MUTEX_CHILD
);
550 spin_lock(&dcache_lock
);
551 list_for_each_safe(pos
, next
, &parent
->d_subdirs
) {
552 dentry
= list_entry(pos
, struct dentry
, d_u
.d_child
);
553 if (!dentry
->d_inode
||
554 dentry
->d_inode
->i_ino
< start
||
555 dentry
->d_inode
->i_ino
>= eof
)
557 spin_lock(&dentry
->d_lock
);
558 if (!d_unhashed(dentry
)) {
561 spin_unlock(&dentry
->d_lock
);
563 if (n
== ARRAY_SIZE(dvec
))
566 spin_unlock(&dentry
->d_lock
);
568 spin_unlock(&dcache_lock
);
572 if (S_ISREG(dentry
->d_inode
->i_mode
))
573 simple_unlink(dir
, dentry
);
574 else if (S_ISDIR(dentry
->d_inode
->i_mode
))
575 simple_rmdir(dir
, dentry
);
581 mutex_unlock(&dir
->i_mutex
);
585 rpc_populate(struct dentry
*parent
,
586 struct rpc_filelist
*files
,
589 struct inode
*inode
, *dir
= parent
->d_inode
;
590 void *private = RPC_I(dir
)->private;
591 struct dentry
*dentry
;
594 mutex_lock(&dir
->i_mutex
);
595 for (i
= start
; i
< eof
; i
++) {
596 dentry
= d_alloc_name(parent
, files
[i
].name
);
599 dentry
->d_op
= &rpc_dentry_operations
;
600 mode
= files
[i
].mode
;
601 inode
= rpc_get_inode(dir
->i_sb
, mode
);
608 inode
->i_fop
= files
[i
].i_fop
;
610 rpc_inode_setowner(inode
, private);
613 d_add(dentry
, inode
);
614 fsnotify_create(dir
, dentry
);
616 mutex_unlock(&dir
->i_mutex
);
619 mutex_unlock(&dir
->i_mutex
);
620 printk(KERN_WARNING
"%s: %s failed to populate directory %s\n",
621 __FILE__
, __func__
, parent
->d_name
.name
);
626 __rpc_mkdir(struct inode
*dir
, struct dentry
*dentry
)
630 inode
= rpc_get_inode(dir
->i_sb
, S_IFDIR
| S_IRUGO
| S_IXUGO
);
633 inode
->i_ino
= iunique(dir
->i_sb
, 100);
634 d_instantiate(dentry
, inode
);
636 fsnotify_mkdir(dir
, dentry
);
639 printk(KERN_WARNING
"%s: %s failed to allocate inode for dentry %s\n",
640 __FILE__
, __func__
, dentry
->d_name
.name
);
645 __rpc_rmdir(struct inode
*dir
, struct dentry
*dentry
)
648 error
= simple_rmdir(dir
, dentry
);
654 static struct dentry
*
655 rpc_lookup_create(struct dentry
*parent
, const char *name
, int len
, int exclusive
)
657 struct inode
*dir
= parent
->d_inode
;
658 struct dentry
*dentry
;
660 mutex_lock_nested(&dir
->i_mutex
, I_MUTEX_PARENT
);
661 dentry
= lookup_one_len(name
, parent
, len
);
664 if (!dentry
->d_inode
)
665 dentry
->d_op
= &rpc_dentry_operations
;
666 else if (exclusive
) {
668 dentry
= ERR_PTR(-EEXIST
);
673 mutex_unlock(&dir
->i_mutex
);
677 static struct dentry
*
678 rpc_lookup_negative(char *path
, struct nameidata
*nd
)
680 struct dentry
*dentry
;
683 if ((error
= rpc_lookup_parent(path
, nd
)) != 0)
684 return ERR_PTR(error
);
685 dentry
= rpc_lookup_create(nd
->path
.dentry
, nd
->last
.name
, nd
->last
.len
,
688 rpc_release_path(nd
);
693 * rpc_mkdir - Create a new directory in rpc_pipefs
694 * @path: path from the rpc_pipefs root to the new directory
695 * @rpc_client: rpc client to associate with this directory
697 * This creates a directory at the given @path associated with
698 * @rpc_clnt, which will contain a file named "info" with some basic
699 * information about the client, together with any "pipes" that may
700 * later be created using rpc_mkpipe().
703 rpc_mkdir(char *path
, struct rpc_clnt
*rpc_client
)
706 struct dentry
*dentry
;
710 dentry
= rpc_lookup_negative(path
, &nd
);
713 dir
= nd
.path
.dentry
->d_inode
;
714 if ((error
= __rpc_mkdir(dir
, dentry
)) != 0)
716 RPC_I(dentry
->d_inode
)->private = rpc_client
;
717 error
= rpc_populate(dentry
, authfiles
,
718 RPCAUTH_info
, RPCAUTH_EOF
);
723 mutex_unlock(&dir
->i_mutex
);
724 rpc_release_path(&nd
);
727 rpc_depopulate(dentry
, RPCAUTH_info
, RPCAUTH_EOF
);
728 __rpc_rmdir(dir
, dentry
);
731 printk(KERN_WARNING
"%s: %s() failed to create directory %s (errno = %d)\n",
732 __FILE__
, __func__
, path
, error
);
733 dentry
= ERR_PTR(error
);
738 * rpc_rmdir - Remove a directory created with rpc_mkdir()
739 * @dentry: directory to remove
742 rpc_rmdir(struct dentry
*dentry
)
744 struct dentry
*parent
;
748 parent
= dget_parent(dentry
);
749 dir
= parent
->d_inode
;
750 mutex_lock_nested(&dir
->i_mutex
, I_MUTEX_PARENT
);
751 rpc_depopulate(dentry
, RPCAUTH_info
, RPCAUTH_EOF
);
752 error
= __rpc_rmdir(dir
, dentry
);
754 mutex_unlock(&dir
->i_mutex
);
760 * rpc_mkpipe - make an rpc_pipefs file for kernel<->userspace communication
761 * @parent: dentry of directory to create new "pipe" in
762 * @name: name of pipe
763 * @private: private data to associate with the pipe, for the caller's use
764 * @ops: operations defining the behavior of the pipe: upcall, downcall,
765 * release_pipe, open_pipe, and destroy_msg.
766 * @flags: rpc_inode flags
768 * Data is made available for userspace to read by calls to
769 * rpc_queue_upcall(). The actual reads will result in calls to
770 * @ops->upcall, which will be called with the file pointer,
771 * message, and userspace buffer to copy to.
773 * Writes can come at any time, and do not necessarily have to be
774 * responses to upcalls. They will result in calls to @msg->downcall.
776 * The @private argument passed here will be available to all these methods
777 * from the file pointer, via RPC_I(file->f_dentry->d_inode)->private.
780 rpc_mkpipe(struct dentry
*parent
, const char *name
, void *private, struct rpc_pipe_ops
*ops
, int flags
)
782 struct dentry
*dentry
;
783 struct inode
*dir
, *inode
;
784 struct rpc_inode
*rpci
;
786 dentry
= rpc_lookup_create(parent
, name
, strlen(name
), 0);
789 dir
= parent
->d_inode
;
790 if (dentry
->d_inode
) {
791 rpci
= RPC_I(dentry
->d_inode
);
792 if (rpci
->private != private ||
794 rpci
->flags
!= flags
) {
796 dentry
= ERR_PTR(-EBUSY
);
798 rpci
->nkern_readwriters
++;
801 inode
= rpc_get_inode(dir
->i_sb
, S_IFIFO
| S_IRUSR
| S_IWUSR
);
804 inode
->i_ino
= iunique(dir
->i_sb
, 100);
805 inode
->i_fop
= &rpc_pipe_fops
;
806 d_instantiate(dentry
, inode
);
808 rpci
->private = private;
811 rpci
->nkern_readwriters
= 1;
812 fsnotify_create(dir
, dentry
);
815 mutex_unlock(&dir
->i_mutex
);
819 dentry
= ERR_PTR(-ENOMEM
);
820 printk(KERN_WARNING
"%s: %s() failed to create pipe %s/%s (errno = %d)\n",
821 __FILE__
, __func__
, parent
->d_name
.name
, name
,
825 EXPORT_SYMBOL_GPL(rpc_mkpipe
);
828 * rpc_unlink - remove a pipe
829 * @dentry: dentry for the pipe, as returned from rpc_mkpipe
831 * After this call, lookups will no longer find the pipe, and any
832 * attempts to read or write using preexisting opens of the pipe will
836 rpc_unlink(struct dentry
*dentry
)
838 struct dentry
*parent
;
842 parent
= dget_parent(dentry
);
843 dir
= parent
->d_inode
;
844 mutex_lock_nested(&dir
->i_mutex
, I_MUTEX_PARENT
);
845 if (--RPC_I(dentry
->d_inode
)->nkern_readwriters
== 0) {
846 rpc_close_pipes(dentry
->d_inode
);
847 error
= simple_unlink(dir
, dentry
);
852 mutex_unlock(&dir
->i_mutex
);
856 EXPORT_SYMBOL_GPL(rpc_unlink
);
859 * populate the filesystem
861 static struct super_operations s_ops
= {
862 .alloc_inode
= rpc_alloc_inode
,
863 .destroy_inode
= rpc_destroy_inode
,
864 .statfs
= simple_statfs
,
867 #define RPCAUTH_GSSMAGIC 0x67596969
870 rpc_fill_super(struct super_block
*sb
, void *data
, int silent
)
875 sb
->s_blocksize
= PAGE_CACHE_SIZE
;
876 sb
->s_blocksize_bits
= PAGE_CACHE_SHIFT
;
877 sb
->s_magic
= RPCAUTH_GSSMAGIC
;
881 inode
= rpc_get_inode(sb
, S_IFDIR
| 0755);
884 root
= d_alloc_root(inode
);
889 if (rpc_populate(root
, files
, RPCAUTH_Root
+ 1, RPCAUTH_RootEOF
))
900 rpc_get_sb(struct file_system_type
*fs_type
,
901 int flags
, const char *dev_name
, void *data
, struct vfsmount
*mnt
)
903 return get_sb_single(fs_type
, flags
, data
, rpc_fill_super
, mnt
);
906 static struct file_system_type rpc_pipe_fs_type
= {
907 .owner
= THIS_MODULE
,
908 .name
= "rpc_pipefs",
909 .get_sb
= rpc_get_sb
,
910 .kill_sb
= kill_litter_super
,
916 struct rpc_inode
*rpci
= (struct rpc_inode
*) foo
;
918 inode_init_once(&rpci
->vfs_inode
);
919 rpci
->private = NULL
;
922 INIT_LIST_HEAD(&rpci
->in_upcall
);
923 INIT_LIST_HEAD(&rpci
->in_downcall
);
924 INIT_LIST_HEAD(&rpci
->pipe
);
926 init_waitqueue_head(&rpci
->waitq
);
927 INIT_DELAYED_WORK(&rpci
->queue_timeout
,
928 rpc_timeout_upcall_queue
);
932 int register_rpc_pipefs(void)
936 rpc_inode_cachep
= kmem_cache_create("rpc_inode_cache",
937 sizeof(struct rpc_inode
),
938 0, (SLAB_HWCACHE_ALIGN
|SLAB_RECLAIM_ACCOUNT
|
941 if (!rpc_inode_cachep
)
943 err
= register_filesystem(&rpc_pipe_fs_type
);
945 kmem_cache_destroy(rpc_inode_cachep
);
952 void unregister_rpc_pipefs(void)
954 kmem_cache_destroy(rpc_inode_cachep
);
955 unregister_filesystem(&rpc_pipe_fs_type
);