summaryrefslogtreecommitdiff
path: root/release/src/linux/linux/include/linux/nfsiod.h
blob: 206441c56ca19cff57ce25509846a5979f77f3b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 * linux/include/linux/nfsiod.h
 *
 * Declarations for asynchronous NFS RPC calls.
 *
 */

#ifndef _LINUX_NFSIOD_H
#define _LINUX_NFSIOD_H

#include <linux/rpcsock.h>
#include <linux/nfs_fs.h>

#ifdef __KERNEL__

/*
 * This is the callback handler for nfsiod requests.
 * Note that the callback procedure must NOT sleep.
 */
struct nfsiod_req;
typedef int	(*nfsiod_callback_t)(int result, struct nfsiod_req *);

/*
 * This is the nfsiod request struct.
 */
struct nfsiod_req {
	struct nfsiod_req *	rq_next;
	struct nfsiod_req *	rq_prev;
	wait_queue_head_t	rq_wait;
	struct rpc_ioreq	rq_rpcreq;
	nfsiod_callback_t	rq_callback;
	struct nfs_server *	rq_server;
	struct inode *		rq_inode;
	struct page *		rq_page;

	/* user creds */
	uid_t			rq_fsuid;
	gid_t			rq_fsgid;
	int			rq_groups[NGROUPS];

	/* retry handling */
	int			rq_retries;
};

struct nfsiod_req *	nfsiod_reserve(struct nfs_server *);
void			nfsiod_release(struct nfsiod_req *);
void			nfsiod_enqueue(struct nfsiod_req *);
int			nfsiod(void);


#endif /* __KERNEL__ */
#endif /* _LINUX_NFSIOD_H */