diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index c59f3ca2b41b..5364e2e52e07 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
@@ -76,6 +76,16 @@ rpc_timeout_upcall_queue(struct work_struct *work) | |||
76 | rpc_purge_list(rpci, &free_list, destroy_msg, -ETIMEDOUT); | 76 | rpc_purge_list(rpci, &free_list, destroy_msg, -ETIMEDOUT); |
77 | } | 77 | } |
78 | 78 | ||
79 | /** | ||
80 | * rpc_queue_upcall | ||
81 | * @inode: inode of upcall pipe on which to queue given message | ||
82 | * @msg: message to queue | ||
83 | * | ||
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. | ||
88 | */ | ||
79 | int | 89 | int |
80 | rpc_queue_upcall(struct inode *inode, struct rpc_pipe_msg *msg) | 90 | rpc_queue_upcall(struct inode *inode, struct rpc_pipe_msg *msg) |
81 | { | 91 | { |
@@ -663,7 +673,16 @@ rpc_lookup_negative(char *path, struct nameidata *nd) | |||
663 | return dentry; | 673 | return dentry; |
664 | } | 674 | } |
665 | 675 | ||
666 | 676 | /** | |
677 | * rpc_mkdir - Create a new directory in rpc_pipefs | ||
678 | * @path: path from the rpc_pipefs root to the new directory | ||
679 | * @rpc_clnt: rpc client to associate with this directory | ||
680 | * | ||
681 | * This creates a directory at the given @path associated with | ||
682 | * @rpc_clnt, which will contain a file named "info" with some basic | ||
683 | * information about the client, together with any "pipes" that may | ||
684 | * later be created using rpc_mkpipe(). | ||
685 | */ | ||
667 | struct dentry * | 686 | struct dentry * |
668 | rpc_mkdir(char *path, struct rpc_clnt *rpc_client) | 687 | rpc_mkdir(char *path, struct rpc_clnt *rpc_client) |
669 | { | 688 | { |
@@ -699,6 +718,10 @@ err_dput: | |||
699 | goto out; | 718 | goto out; |
700 | } | 719 | } |
701 | 720 | ||
721 | /** | ||
722 | * rpc_rmdir - Remove a directory created with rpc_mkdir() | ||
723 | * @dentry: directory to remove | ||
724 | */ | ||
702 | int | 725 | int |
703 | rpc_rmdir(struct dentry *dentry) | 726 | rpc_rmdir(struct dentry *dentry) |
704 | { | 727 | { |
@@ -717,6 +740,25 @@ rpc_rmdir(struct dentry *dentry) | |||
717 | return error; | 740 | return error; |
718 | } | 741 | } |
719 | 742 | ||
743 | /** | ||
744 | * rpc_mkpipe - make an rpc_pipefs file for kernel<->userspace communication | ||
745 | * @parent: dentry of directory to create new "pipe" in | ||
746 | * @name: name of pipe | ||
747 | * @private: private data to associate with the pipe, for the caller's use | ||
748 | * @ops: operations defining the behavior of the pipe: upcall, downcall, | ||
749 | * release_pipe, and destroy_msg. | ||
750 | * | ||
751 | * Data is made available for userspace to read by calls to | ||
752 | * rpc_queue_upcall(). The actual reads will result in calls to | ||
753 | * @ops->upcall, which will be called with the file pointer, | ||
754 | * message, and userspace buffer to copy to. | ||
755 | * | ||
756 | * Writes can come at any time, and do not necessarily have to be | ||
757 | * responses to upcalls. They will result in calls to @msg->downcall. | ||
758 | * | ||
759 | * The @private argument passed here will be available to all these methods | ||
760 | * from the file pointer, via RPC_I(file->f_dentry->d_inode)->private. | ||
761 | */ | ||
720 | struct dentry * | 762 | struct dentry * |
721 | rpc_mkpipe(struct dentry *parent, const char *name, void *private, struct rpc_pipe_ops *ops, int flags) | 763 | rpc_mkpipe(struct dentry *parent, const char *name, void *private, struct rpc_pipe_ops *ops, int flags) |
722 | { | 764 | { |
@@ -764,6 +806,14 @@ err_dput: | |||
764 | goto out; | 806 | goto out; |
765 | } | 807 | } |
766 | 808 | ||
809 | /** | ||
810 | * rpc_unlink - remove a pipe | ||
811 | * @dentry: dentry for the pipe, as returned from rpc_mkpipe | ||
812 | * | ||
813 | * After this call, lookups will no longer find the pipe, and any | ||
814 | * attempts to read or write using preexisting opens of the pipe will | ||
815 | * return -EPIPE. | ||
816 | */ | ||
767 | int | 817 | int |
768 | rpc_unlink(struct dentry *dentry) | 818 | rpc_unlink(struct dentry *dentry) |
769 | { | 819 | { |