Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/fs/nfsclient/nfs.h
39483 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1989, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* This code is derived from software contributed to Berkeley by
8
* Rick Macklem at The University of Guelph.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
* 3. Neither the name of the University nor the names of its contributors
19
* may be used to endorse or promote products derived from this software
20
* without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
* SUCH DAMAGE.
33
*/
34
35
#ifndef _NFSCLIENT_NFS_H_
36
#define _NFSCLIENT_NFS_H_
37
38
#if defined(_KERNEL)
39
40
#ifndef NFS_TPRINTF_INITIAL_DELAY
41
#define NFS_TPRINTF_INITIAL_DELAY 12
42
#endif
43
44
#ifndef NFS_TPRINTF_DELAY
45
#define NFS_TPRINTF_DELAY 30
46
#endif
47
48
/*
49
* Nfs version macros.
50
*/
51
#define NFS_ISV3(v) \
52
(VFSTONFS((v)->v_mount)->nm_flag & NFSMNT_NFSV3)
53
#define NFS_ISV4(v) \
54
(VFSTONFS((v)->v_mount)->nm_flag & NFSMNT_NFSV4)
55
#define NFS_ISV34(v) \
56
(VFSTONFS((v)->v_mount)->nm_flag & (NFSMNT_NFSV3 | NFSMNT_NFSV4))
57
58
#ifdef NFS_DEBUG
59
60
extern int nfs_debug;
61
#define NFS_DEBUG_ASYNCIO 1 /* asynchronous i/o */
62
#define NFS_DEBUG_WG 2 /* server write gathering */
63
#define NFS_DEBUG_RC 4 /* server request caching */
64
65
#define NFS_DPF(cat, args) \
66
do { \
67
if (nfs_debug & NFS_DEBUG_##cat) printf args; \
68
} while (0)
69
70
#else
71
72
#define NFS_DPF(cat, args)
73
74
#endif
75
76
/*
77
* NFS iod threads can be in one of these three states once spawned.
78
* NFSIOD_NOT_AVAILABLE - Cannot be assigned an I/O operation at this time.
79
* NFSIOD_AVAILABLE - Available to be assigned an I/O operation.
80
* NFSIOD_CREATED_FOR_NFS_ASYNCIO - Newly created for nfs_asyncio() and
81
* will be used by the thread that called nfs_asyncio().
82
*/
83
enum nfsiod_state {
84
NFSIOD_NOT_AVAILABLE = 0,
85
NFSIOD_AVAILABLE = 1,
86
NFSIOD_CREATED_FOR_NFS_ASYNCIO = 2,
87
};
88
89
/*
90
* Function prototypes.
91
*/
92
int ncl_meta_setsize(struct vnode *, struct thread *, u_quad_t);
93
int ncl_bioread(struct vnode *, struct uio *, int, struct ucred *);
94
int ncl_biowrite(struct vnode *, struct uio *, int, struct ucred *);
95
int ncl_vinvalbuf(struct vnode *, int, struct thread *, int);
96
int ncl_asyncio(struct nfsmount *, struct buf *, struct ucred *,
97
struct thread *);
98
int ncl_doio(struct vnode *, struct buf *, struct ucred *, struct thread *,
99
int);
100
void ncl_nhinit(void);
101
void ncl_nhuninit(void);
102
void ncl_nodelock(struct nfsnode *);
103
void ncl_nodeunlock(struct nfsnode *);
104
int ncl_getattrcache(struct vnode *, struct vattr *);
105
int ncl_readrpc(struct vnode *, struct uio *, struct ucred *);
106
int ncl_writerpc(struct vnode *, struct uio *, struct ucred *, int *, int *,
107
int, int);
108
int ncl_readlinkrpc(struct vnode *, struct uio *, struct ucred *);
109
int ncl_readdirrpc(struct vnode *, struct uio *, struct ucred *,
110
struct thread *);
111
int ncl_readdirplusrpc(struct vnode *, struct uio *, struct ucred *,
112
struct thread *);
113
int ncl_commit(struct vnode *, u_quad_t, int, struct ucred *, struct thread *);
114
void ncl_clearcommit(struct mount *);
115
int ncl_fsinfo(struct nfsmount *, struct vnode *, struct ucred *,
116
struct thread *);
117
int ncl_init(struct vfsconf *);
118
int ncl_uninit(struct vfsconf *);
119
void ncl_nfsiodnew(void);
120
void ncl_nfsiodnew_tq(__unused void *, int);
121
122
#endif /* _KERNEL */
123
124
#endif /* _NFSCLIENT_NFS_H_ */
125
126