Deleted Added
full compact
nfsnode.h (1979) nfsnode.h (2175)
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)nfsnode.h 8.4 (Berkeley) 2/13/94
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)nfsnode.h 8.4 (Berkeley) 2/13/94
37 * $Id: nfsnode.h,v 1.3 1994/08/08 17:30:55 davidg Exp $
37 * $Id: nfsnode.h,v 1.4 1994/08/09 15:10:14 davidg Exp $
38 */
39
38 */
39
40#ifndef _NFS_NFSNODE_H_
41#define _NFS_NFSNODE_H_
42
40/*
41 * Silly rename structure that hangs off the nfsnode until the name
42 * can be removed by nfs_inactive()
43 */
44struct sillyrename {
45 struct ucred *s_cred;
46 struct vnode *s_dvp;
47 long s_namlen;
48 char s_name[20];
49};
50
51/*
52 * The nfsnode is the nfs equivalent to ufs's inode. Any similarity
53 * is purely coincidental.
54 * There is a unique nfsnode allocated for each active file,
55 * each current directory, each mounted-on file, text file, and the root.
56 * An nfsnode is 'named' by its file handle. (nget/nfs_node.c)
57 */
58
59struct nfsnode {
60 struct nfsnode *n_forw; /* hash, forward */
61 struct nfsnode **n_back; /* hash, backward */
62 nfsv2fh_t n_fh; /* NFS File Handle */
63 long n_flag; /* Flag for locking.. */
64 struct vnode *n_vnode; /* vnode associated with this node */
65 struct vattr n_vattr; /* Vnode attribute cache */
66 time_t n_attrstamp; /* Time stamp for cached attributes */
67 struct sillyrename *n_sillyrename; /* Ptr to silly rename struct */
68 u_quad_t n_size; /* Current size of file */
69 struct lockf *n_lockf; /* Locking record of file */
70 int n_error; /* Save write error value */
71 u_long n_direofoffset; /* Dir. EOF offset cache */
72 time_t n_mtime; /* Prev modify time. */
73 time_t n_ctime; /* Prev create time. */
74 u_quad_t n_brev; /* Modify rev when cached */
75 u_quad_t n_lrev; /* Modify rev for lease */
76 time_t n_expiry; /* Lease expiry time */
77 struct nfsnode *n_tnext; /* Nqnfs timer chain */
78 struct nfsnode *n_tprev;
79 struct sillyrename n_silly; /* Silly rename struct */
80 struct timeval n_atim; /* Special file times */
81 struct timeval n_mtim;
82};
83
84/*
85 * Flags for n_flag
86 */
87#define NFLUSHWANT 0x0001 /* Want wakeup from a flush in prog. */
88#define NFLUSHINPROG 0x0002 /* Avoid multiple calls to vinvalbuf() */
89#define NMODIFIED 0x0004 /* Might have a modified buffer in bio */
90#define NWRITEERR 0x0008 /* Flag write errors so close will know */
91#define NQNFSNONCACHE 0x0020 /* Non-cachable lease */
92#define NQNFSWRITE 0x0040 /* Write lease */
93#define NQNFSEVICTED 0x0080 /* Has been evicted */
94#define NACC 0x0100 /* Special file accessed */
95#define NUPD 0x0200 /* Special file updated */
96#define NCHG 0x0400 /* Special file times changed */
97
98/*
99 * Convert between nfsnode pointers and vnode pointers
100 */
101#define VTONFS(vp) ((struct nfsnode *)(vp)->v_data)
102#define NFSTOV(np) ((struct vnode *)(np)->n_vnode)
103
104/*
105 * Queue head for nfsiod's
106 */
107TAILQ_HEAD(nfsbufs, buf) nfs_bufq;
108
109#ifdef KERNEL
110/*
111 * Prototypes for NFS vnode operations
112 */
113int nfs_lookup __P((struct vop_lookup_args *));
114int nfs_create __P((struct vop_create_args *));
115int nfs_mknod __P((struct vop_mknod_args *));
116int nfs_open __P((struct vop_open_args *));
117int nfs_close __P((struct vop_close_args *));
118int nfsspec_close __P((struct vop_close_args *));
119#ifdef FIFO
120int nfsfifo_close __P((struct vop_close_args *));
121#endif
122int nfs_access __P((struct vop_access_args *));
123int nfsspec_access __P((struct vop_access_args *));
124int nfs_getattr __P((struct vop_getattr_args *));
125int nfs_setattr __P((struct vop_setattr_args *));
126int nfs_read __P((struct vop_read_args *));
127int nfs_write __P((struct vop_write_args *));
128int nfsspec_read __P((struct vop_read_args *));
129int nfsspec_write __P((struct vop_write_args *));
130#ifdef FIFO
131int nfsfifo_read __P((struct vop_read_args *));
132int nfsfifo_write __P((struct vop_write_args *));
133#endif
134#define nfs_ioctl ((int (*) __P((struct vop_ioctl_args *)))enoioctl)
135#define nfs_select ((int (*) __P((struct vop_select_args *)))seltrue)
136int nfs_mmap __P((struct vop_mmap_args *));
137int nfs_fsync __P((struct vop_fsync_args *));
138#define nfs_seek ((int (*) __P((struct vop_seek_args *)))nullop)
139int nfs_remove __P((struct vop_remove_args *));
140int nfs_link __P((struct vop_link_args *));
141int nfs_rename __P((struct vop_rename_args *));
142int nfs_mkdir __P((struct vop_mkdir_args *));
143int nfs_rmdir __P((struct vop_rmdir_args *));
144int nfs_symlink __P((struct vop_symlink_args *));
145int nfs_readdir __P((struct vop_readdir_args *));
146int nfs_readlink __P((struct vop_readlink_args *));
147int nfs_abortop __P((struct vop_abortop_args *));
148int nfs_inactive __P((struct vop_inactive_args *));
149int nfs_reclaim __P((struct vop_reclaim_args *));
150int nfs_lock __P((struct vop_lock_args *));
151int nfs_unlock __P((struct vop_unlock_args *));
152int nfs_bmap __P((struct vop_bmap_args *));
153int nfs_strategy __P((struct vop_strategy_args *));
154int nfs_print __P((struct vop_print_args *));
155int nfs_islocked __P((struct vop_islocked_args *));
156int nfs_pathconf __P((struct vop_pathconf_args *));
157int nfs_advlock __P((struct vop_advlock_args *));
158int nfs_blkatoff __P((struct vop_blkatoff_args *));
159int nfs_vget __P((struct mount *, ino_t, struct vnode **));
160int nfs_valloc __P((struct vop_valloc_args *));
161#define nfs_reallocblks \
162 ((int (*) __P((struct vop_reallocblks_args *)))eopnotsupp)
163int nfs_vfree __P((struct vop_vfree_args *));
164int nfs_truncate __P((struct vop_truncate_args *));
165int nfs_update __P((struct vop_update_args *));
166int nfs_bwrite __P((struct vop_bwrite_args *));
167#endif /* KERNEL */
43/*
44 * Silly rename structure that hangs off the nfsnode until the name
45 * can be removed by nfs_inactive()
46 */
47struct sillyrename {
48 struct ucred *s_cred;
49 struct vnode *s_dvp;
50 long s_namlen;
51 char s_name[20];
52};
53
54/*
55 * The nfsnode is the nfs equivalent to ufs's inode. Any similarity
56 * is purely coincidental.
57 * There is a unique nfsnode allocated for each active file,
58 * each current directory, each mounted-on file, text file, and the root.
59 * An nfsnode is 'named' by its file handle. (nget/nfs_node.c)
60 */
61
62struct nfsnode {
63 struct nfsnode *n_forw; /* hash, forward */
64 struct nfsnode **n_back; /* hash, backward */
65 nfsv2fh_t n_fh; /* NFS File Handle */
66 long n_flag; /* Flag for locking.. */
67 struct vnode *n_vnode; /* vnode associated with this node */
68 struct vattr n_vattr; /* Vnode attribute cache */
69 time_t n_attrstamp; /* Time stamp for cached attributes */
70 struct sillyrename *n_sillyrename; /* Ptr to silly rename struct */
71 u_quad_t n_size; /* Current size of file */
72 struct lockf *n_lockf; /* Locking record of file */
73 int n_error; /* Save write error value */
74 u_long n_direofoffset; /* Dir. EOF offset cache */
75 time_t n_mtime; /* Prev modify time. */
76 time_t n_ctime; /* Prev create time. */
77 u_quad_t n_brev; /* Modify rev when cached */
78 u_quad_t n_lrev; /* Modify rev for lease */
79 time_t n_expiry; /* Lease expiry time */
80 struct nfsnode *n_tnext; /* Nqnfs timer chain */
81 struct nfsnode *n_tprev;
82 struct sillyrename n_silly; /* Silly rename struct */
83 struct timeval n_atim; /* Special file times */
84 struct timeval n_mtim;
85};
86
87/*
88 * Flags for n_flag
89 */
90#define NFLUSHWANT 0x0001 /* Want wakeup from a flush in prog. */
91#define NFLUSHINPROG 0x0002 /* Avoid multiple calls to vinvalbuf() */
92#define NMODIFIED 0x0004 /* Might have a modified buffer in bio */
93#define NWRITEERR 0x0008 /* Flag write errors so close will know */
94#define NQNFSNONCACHE 0x0020 /* Non-cachable lease */
95#define NQNFSWRITE 0x0040 /* Write lease */
96#define NQNFSEVICTED 0x0080 /* Has been evicted */
97#define NACC 0x0100 /* Special file accessed */
98#define NUPD 0x0200 /* Special file updated */
99#define NCHG 0x0400 /* Special file times changed */
100
101/*
102 * Convert between nfsnode pointers and vnode pointers
103 */
104#define VTONFS(vp) ((struct nfsnode *)(vp)->v_data)
105#define NFSTOV(np) ((struct vnode *)(np)->n_vnode)
106
107/*
108 * Queue head for nfsiod's
109 */
110TAILQ_HEAD(nfsbufs, buf) nfs_bufq;
111
112#ifdef KERNEL
113/*
114 * Prototypes for NFS vnode operations
115 */
116int nfs_lookup __P((struct vop_lookup_args *));
117int nfs_create __P((struct vop_create_args *));
118int nfs_mknod __P((struct vop_mknod_args *));
119int nfs_open __P((struct vop_open_args *));
120int nfs_close __P((struct vop_close_args *));
121int nfsspec_close __P((struct vop_close_args *));
122#ifdef FIFO
123int nfsfifo_close __P((struct vop_close_args *));
124#endif
125int nfs_access __P((struct vop_access_args *));
126int nfsspec_access __P((struct vop_access_args *));
127int nfs_getattr __P((struct vop_getattr_args *));
128int nfs_setattr __P((struct vop_setattr_args *));
129int nfs_read __P((struct vop_read_args *));
130int nfs_write __P((struct vop_write_args *));
131int nfsspec_read __P((struct vop_read_args *));
132int nfsspec_write __P((struct vop_write_args *));
133#ifdef FIFO
134int nfsfifo_read __P((struct vop_read_args *));
135int nfsfifo_write __P((struct vop_write_args *));
136#endif
137#define nfs_ioctl ((int (*) __P((struct vop_ioctl_args *)))enoioctl)
138#define nfs_select ((int (*) __P((struct vop_select_args *)))seltrue)
139int nfs_mmap __P((struct vop_mmap_args *));
140int nfs_fsync __P((struct vop_fsync_args *));
141#define nfs_seek ((int (*) __P((struct vop_seek_args *)))nullop)
142int nfs_remove __P((struct vop_remove_args *));
143int nfs_link __P((struct vop_link_args *));
144int nfs_rename __P((struct vop_rename_args *));
145int nfs_mkdir __P((struct vop_mkdir_args *));
146int nfs_rmdir __P((struct vop_rmdir_args *));
147int nfs_symlink __P((struct vop_symlink_args *));
148int nfs_readdir __P((struct vop_readdir_args *));
149int nfs_readlink __P((struct vop_readlink_args *));
150int nfs_abortop __P((struct vop_abortop_args *));
151int nfs_inactive __P((struct vop_inactive_args *));
152int nfs_reclaim __P((struct vop_reclaim_args *));
153int nfs_lock __P((struct vop_lock_args *));
154int nfs_unlock __P((struct vop_unlock_args *));
155int nfs_bmap __P((struct vop_bmap_args *));
156int nfs_strategy __P((struct vop_strategy_args *));
157int nfs_print __P((struct vop_print_args *));
158int nfs_islocked __P((struct vop_islocked_args *));
159int nfs_pathconf __P((struct vop_pathconf_args *));
160int nfs_advlock __P((struct vop_advlock_args *));
161int nfs_blkatoff __P((struct vop_blkatoff_args *));
162int nfs_vget __P((struct mount *, ino_t, struct vnode **));
163int nfs_valloc __P((struct vop_valloc_args *));
164#define nfs_reallocblks \
165 ((int (*) __P((struct vop_reallocblks_args *)))eopnotsupp)
166int nfs_vfree __P((struct vop_vfree_args *));
167int nfs_truncate __P((struct vop_truncate_args *));
168int nfs_update __P((struct vop_update_args *));
169int nfs_bwrite __P((struct vop_bwrite_args *));
170#endif /* KERNEL */
171
172#endif