Mon Apr 15 12:59:38 2019 UTC ()
Add support for fifos, character and block devices.


(hannken)
diff -r1.21 -r1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -r1.47 -r1.48 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -r1.25 -r1.26 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c

cvs diff -r1.21 -r1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c (expand / switch to unified diff)

--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c 2019/03/18 09:22:14 1.21
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c 2019/04/15 12:59:38 1.22
@@ -137,30 +137,34 @@ static int zfs_root(vfs_t *vfsp, int fla @@ -137,30 +137,34 @@ static int zfs_root(vfs_t *vfsp, int fla
137static int zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp); 137static int zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp);
138static int zfs_statvfs(vfs_t *vfsp, struct statvfs *statp); 138static int zfs_statvfs(vfs_t *vfsp, struct statvfs *statp);
139static int zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size); 139static int zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size);
140static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp); 140static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp);
141static int zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp); 141static int zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp);
142static int zfs_sync(vfs_t *vfsp, int waitfor); 142static int zfs_sync(vfs_t *vfsp, int waitfor);
143static int zfs_netbsd_sync(vfs_t *vfsp, int waitfor, cred_t *cr); 143static int zfs_netbsd_sync(vfs_t *vfsp, int waitfor, cred_t *cr);
144static void zfs_freevfs(vfs_t *vfsp); 144static void zfs_freevfs(vfs_t *vfsp);
145 145
146void zfs_init(void); 146void zfs_init(void);
147void zfs_fini(void); 147void zfs_fini(void);
148 148
149extern const struct vnodeopv_desc zfs_vnodeop_opv_desc; 149extern const struct vnodeopv_desc zfs_vnodeop_opv_desc;
 150extern const struct vnodeopv_desc zfs_specop_opv_desc;
 151extern const struct vnodeopv_desc zfs_fifoop_opv_desc;
150extern const struct vnodeopv_desc zfs_sfsop_opv_desc; 152extern const struct vnodeopv_desc zfs_sfsop_opv_desc;
151 153
152static const struct vnodeopv_desc * const zfs_vnodeop_descs[] = { 154static const struct vnodeopv_desc * const zfs_vnodeop_descs[] = {
153 &zfs_vnodeop_opv_desc, 155 &zfs_vnodeop_opv_desc,
 156 &zfs_specop_opv_desc,
 157 &zfs_fifoop_opv_desc,
154 &zfs_sfsop_opv_desc, 158 &zfs_sfsop_opv_desc,
155 NULL, 159 NULL,
156}; 160};
157 161
158struct vfsops zfs_vfsops = { 162struct vfsops zfs_vfsops = {
159 .vfs_name = MOUNT_ZFS, 163 .vfs_name = MOUNT_ZFS,
160 .vfs_min_mount_data = sizeof(struct zfs_args), 164 .vfs_min_mount_data = sizeof(struct zfs_args),
161 .vfs_opv_descs = zfs_vnodeop_descs, 165 .vfs_opv_descs = zfs_vnodeop_descs,
162 .vfs_mount = zfs_mount, 166 .vfs_mount = zfs_mount,
163 .vfs_unmount = zfs_umount, 167 .vfs_unmount = zfs_umount,
164 .vfs_root = zfs_netbsd_root, 168 .vfs_root = zfs_netbsd_root,
165 .vfs_statvfs = zfs_statvfs, 169 .vfs_statvfs = zfs_statvfs,
166 .vfs_sync = zfs_netbsd_sync, 170 .vfs_sync = zfs_netbsd_sync,

cvs diff -r1.47 -r1.48 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c (expand / switch to unified diff)

--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c 2019/03/18 09:20:58 1.47
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c 2019/04/15 12:59:38 1.48
@@ -71,26 +71,27 @@ @@ -71,26 +71,27 @@
71#include <sys/buf.h> 71#include <sys/buf.h>
72#include <sys/sched.h> 72#include <sys/sched.h>
73#include <sys/acl.h> 73#include <sys/acl.h>
74#include <sys/extdirent.h> 74#include <sys/extdirent.h>
75 75
76#ifdef __FreeBSD__ 76#ifdef __FreeBSD__
77#include <sys/kidmap.h> 77#include <sys/kidmap.h>
78#include <sys/bio.h> 78#include <sys/bio.h>
79#include <vm/vm_param.h> 79#include <vm/vm_param.h>
80#endif 80#endif
81 81
82#ifdef __NetBSD__ 82#ifdef __NetBSD__
83#include <dev/mm.h> 83#include <dev/mm.h>
 84#include <miscfs/fifofs/fifo.h>
84#include <miscfs/genfs/genfs.h> 85#include <miscfs/genfs/genfs.h>
85#include <miscfs/genfs/genfs_node.h> 86#include <miscfs/genfs/genfs_node.h>
86#include <uvm/uvm_extern.h> 87#include <uvm/uvm_extern.h>
87#include <sys/fstrans.h> 88#include <sys/fstrans.h>
88#include <sys/malloc.h> 89#include <sys/malloc.h>
89 90
90uint_t zfs_putpage_key; 91uint_t zfs_putpage_key;
91#endif 92#endif
92 93
93/* 94/*
94 * Programming rules. 95 * Programming rules.
95 * 96 *
96 * Each vnode op performs some logical unit of work. To do this, the ZPL must 97 * Each vnode op performs some logical unit of work. To do this, the ZPL must
@@ -5062,36 +5063,59 @@ static int @@ -5062,36 +5063,59 @@ static int
5062zfs_netbsd_ioctl(void *v) 5063zfs_netbsd_ioctl(void *v)
5063{ 5064{
5064 struct vop_ioctl_args *ap = v; 5065 struct vop_ioctl_args *ap = v;
5065 5066
5066 return (zfs_ioctl(ap->a_vp, ap->a_command, (intptr_t)ap->a_data, 5067 return (zfs_ioctl(ap->a_vp, ap->a_command, (intptr_t)ap->a_data,
5067 ap->a_fflag, ap->a_cred, NULL, NULL)); 5068 ap->a_fflag, ap->a_cred, NULL, NULL));
5068} 5069}
5069 5070
5070 5071
5071static int 5072static int
5072zfs_netbsd_read(void *v) 5073zfs_netbsd_read(void *v)
5073{ 5074{
5074 struct vop_read_args *ap = v; 5075 struct vop_read_args *ap = v;
 5076 vnode_t *vp = ap->a_vp;
 5077 znode_t *zp = VTOZ(vp);
5075 5078
5076 return (zfs_read(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); 5079 switch (vp->v_type) {
 5080 case VBLK:
 5081 case VCHR:
 5082 ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp);
 5083 return (VOCALL(spec_vnodeop_p, VOFFSET(vop_read), ap));
 5084 case VFIFO:
 5085 ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp);
 5086 return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_read), ap));
 5087 }
 5088
 5089 return (zfs_read(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
5077} 5090}
5078 5091
5079static int 5092static int
5080zfs_netbsd_write(void *v) 5093zfs_netbsd_write(void *v)
5081{ 5094{
5082 struct vop_write_args *ap = v; 5095 struct vop_write_args *ap = v;
 5096 vnode_t *vp = ap->a_vp;
5083 5097
5084 return (zfs_write(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); 5098 switch (vp->v_type) {
 5099 case VBLK:
 5100 case VCHR:
 5101 GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED);
 5102 return (VOCALL(spec_vnodeop_p, VOFFSET(vop_write), ap));
 5103 case VFIFO:
 5104 GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED);
 5105 return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_write), ap));
 5106 }
 5107
 5108 return (zfs_write(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL));
5085} 5109}
5086 5110
5087static int 5111static int
5088zfs_netbsd_access(void *v) 5112zfs_netbsd_access(void *v)
5089{ 5113{
5090 struct vop_access_args /* { 5114 struct vop_access_args /* {
5091 struct vnode *a_vp; 5115 struct vnode *a_vp;
5092 int a_mode; 5116 int a_mode;
5093 kauth_cred_t a_cred; 5117 kauth_cred_t a_cred;
5094 } */ *ap = v; 5118 } */ *ap = v;
5095 struct vnode *vp = ap->a_vp; 5119 struct vnode *vp = ap->a_vp;
5096 int mode = ap->a_mode; 5120 int mode = ap->a_mode;
5097 mode_t zfs_mode = 0; 5121 mode_t zfs_mode = 0;
@@ -5268,26 +5292,64 @@ zfs_netbsd_create(void *v) @@ -5268,26 +5292,64 @@ zfs_netbsd_create(void *v)
5268 /* XXX !EXCL is wrong here... */ 5292 /* XXX !EXCL is wrong here... */
5269 error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL); 5293 error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL);
5270 5294
5271 PNBUF_PUT(nm); 5295 PNBUF_PUT(nm);
5272 5296
5273 KASSERT((error == 0) == (*vpp != NULL)); 5297 KASSERT((error == 0) == (*vpp != NULL));
5274 KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); 5298 KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
5275 VOP_UNLOCK(*vpp, 0); 5299 VOP_UNLOCK(*vpp, 0);
5276 5300
5277 return (error); 5301 return (error);
5278} 5302}
5279 5303
5280static int 5304static int
 5305zfs_netbsd_mknod(void *v)
 5306{
 5307 struct vop_mknod_v3_args /* {
 5308 struct vnode *a_dvp;
 5309 struct vnode **a_vpp;
 5310 struct componentname *a_cnp;
 5311 struct vattr *a_vap;
 5312 } */ *ap = v;
 5313 struct vnode *dvp = ap->a_dvp;
 5314 struct vnode **vpp = ap->a_vpp;
 5315 struct componentname *cnp = ap->a_cnp;
 5316 struct vattr *vap = ap->a_vap;
 5317 char *nm;
 5318 int mode;
 5319 int error;
 5320
 5321 KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
 5322
 5323 vattr_init_mask(vap);
 5324 mode = vap->va_mode & ALLPERMS;
 5325
 5326 /* ZFS wants a null-terminated name. */
 5327 nm = PNBUF_GET();
 5328 (void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1);
 5329
 5330 /* XXX !EXCL is wrong here... */
 5331 error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL);
 5332
 5333 PNBUF_PUT(nm);
 5334
 5335 KASSERT((error == 0) == (*vpp != NULL));
 5336 KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
 5337 VOP_UNLOCK(*vpp, 0);
 5338
 5339 return (error);
 5340}
 5341
 5342static int
5281zfs_netbsd_remove(void *v) 5343zfs_netbsd_remove(void *v)
5282{ 5344{
5283 struct vop_remove_v2_args /* { 5345 struct vop_remove_v2_args /* {
5284 struct vnode *a_dvp; 5346 struct vnode *a_dvp;
5285 struct vnode *a_vp; 5347 struct vnode *a_vp;
5286 struct componentname *a_cnp; 5348 struct componentname *a_cnp;
5287 } */ *ap = v; 5349 } */ *ap = v;
5288 struct vnode *dvp = ap->a_dvp; 5350 struct vnode *dvp = ap->a_dvp;
5289 struct vnode *vp = ap->a_vp; 5351 struct vnode *vp = ap->a_vp;
5290 struct componentname *cnp = ap->a_cnp; 5352 struct componentname *cnp = ap->a_cnp;
5291 char *nm; 5353 char *nm;
5292 int error; 5354 int error;
5293 5355
@@ -6139,26 +6201,27 @@ const struct genfs_ops zfs_genfsops = { @@ -6139,26 +6201,27 @@ const struct genfs_ops zfs_genfsops = {
6139 6201
6140#define zfs_netbsd_lock genfs_lock 6202#define zfs_netbsd_lock genfs_lock
6141#define zfs_netbsd_unlock genfs_unlock 6203#define zfs_netbsd_unlock genfs_unlock
6142#define zfs_netbsd_islocked genfs_islocked 6204#define zfs_netbsd_islocked genfs_islocked
6143#define zfs_netbsd_seek genfs_seek 6205#define zfs_netbsd_seek genfs_seek
6144#define zfs_netbsd_mmap genfs_mmap 6206#define zfs_netbsd_mmap genfs_mmap
6145#define zfs_netbsd_fcntl genfs_fcntl 6207#define zfs_netbsd_fcntl genfs_fcntl
6146 6208
6147int (**zfs_vnodeop_p)(void *); 6209int (**zfs_vnodeop_p)(void *);
6148const struct vnodeopv_entry_desc zfs_vnodeop_entries[] = { 6210const struct vnodeopv_entry_desc zfs_vnodeop_entries[] = {
6149 { &vop_default_desc, vn_default_error }, 6211 { &vop_default_desc, vn_default_error },
6150 { &vop_lookup_desc, zfs_netbsd_lookup }, 6212 { &vop_lookup_desc, zfs_netbsd_lookup },
6151 { &vop_create_desc, zfs_netbsd_create }, 6213 { &vop_create_desc, zfs_netbsd_create },
 6214 { &vop_mknod_desc, zfs_netbsd_mknod },
6152 { &vop_open_desc, zfs_netbsd_open }, 6215 { &vop_open_desc, zfs_netbsd_open },
6153 { &vop_close_desc, zfs_netbsd_close }, 6216 { &vop_close_desc, zfs_netbsd_close },
6154 { &vop_access_desc, zfs_netbsd_access }, 6217 { &vop_access_desc, zfs_netbsd_access },
6155 { &vop_getattr_desc, zfs_netbsd_getattr }, 6218 { &vop_getattr_desc, zfs_netbsd_getattr },
6156 { &vop_setattr_desc, zfs_netbsd_setattr }, 6219 { &vop_setattr_desc, zfs_netbsd_setattr },
6157 { &vop_read_desc, zfs_netbsd_read }, 6220 { &vop_read_desc, zfs_netbsd_read },
6158 { &vop_write_desc, zfs_netbsd_write }, 6221 { &vop_write_desc, zfs_netbsd_write },
6159 { &vop_ioctl_desc, zfs_netbsd_ioctl }, 6222 { &vop_ioctl_desc, zfs_netbsd_ioctl },
6160 { &vop_fsync_desc, zfs_netbsd_fsync }, 6223 { &vop_fsync_desc, zfs_netbsd_fsync },
6161 { &vop_remove_desc, zfs_netbsd_remove }, 6224 { &vop_remove_desc, zfs_netbsd_remove },
6162 { &vop_link_desc, zfs_netbsd_link }, 6225 { &vop_link_desc, zfs_netbsd_link },
6163 { &vop_lock_desc, zfs_netbsd_lock }, 6226 { &vop_lock_desc, zfs_netbsd_lock },
6164 { &vop_unlock_desc, zfs_netbsd_unlock }, 6227 { &vop_unlock_desc, zfs_netbsd_unlock },
@@ -6175,14 +6238,97 @@ const struct vnodeopv_entry_desc zfs_vno @@ -6175,14 +6238,97 @@ const struct vnodeopv_entry_desc zfs_vno
6175 { &vop_getpages_desc, zfs_netbsd_getpages }, 6238 { &vop_getpages_desc, zfs_netbsd_getpages },
6176 { &vop_putpages_desc, zfs_netbsd_putpages }, 6239 { &vop_putpages_desc, zfs_netbsd_putpages },
6177 { &vop_mmap_desc, zfs_netbsd_mmap }, 6240 { &vop_mmap_desc, zfs_netbsd_mmap },
6178 { &vop_islocked_desc, zfs_netbsd_islocked }, 6241 { &vop_islocked_desc, zfs_netbsd_islocked },
6179 { &vop_advlock_desc, zfs_netbsd_advlock }, 6242 { &vop_advlock_desc, zfs_netbsd_advlock },
6180 { &vop_print_desc, zfs_netbsd_print }, 6243 { &vop_print_desc, zfs_netbsd_print },
6181 { &vop_fcntl_desc, zfs_netbsd_fcntl }, 6244 { &vop_fcntl_desc, zfs_netbsd_fcntl },
6182 { NULL, NULL } 6245 { NULL, NULL }
6183}; 6246};
6184 6247
6185const struct vnodeopv_desc zfs_vnodeop_opv_desc = 6248const struct vnodeopv_desc zfs_vnodeop_opv_desc =
6186 { &zfs_vnodeop_p, zfs_vnodeop_entries }; 6249 { &zfs_vnodeop_p, zfs_vnodeop_entries };
6187 6250
 6251int (**zfs_specop_p)(void *);
 6252const struct vnodeopv_entry_desc zfs_specop_entries[] = {
 6253 { &vop_default_desc, vn_default_error },
 6254 { &vop_lookup_desc, spec_lookup },
 6255 { &vop_create_desc, spec_create },
 6256 { &vop_mknod_desc, spec_mknod },
 6257 { &vop_open_desc, spec_open },
 6258 { &vop_close_desc, spec_close },
 6259 { &vop_access_desc, zfs_netbsd_access },
 6260 { &vop_getattr_desc, zfs_netbsd_getattr },
 6261 { &vop_setattr_desc, zfs_netbsd_setattr },
 6262 { &vop_read_desc, /**/zfs_netbsd_read },
 6263 { &vop_write_desc, /**/zfs_netbsd_write },
 6264 { &vop_ioctl_desc, spec_ioctl },
 6265 { &vop_fsync_desc, zfs_netbsd_fsync },
 6266 { &vop_remove_desc, spec_remove },
 6267 { &vop_link_desc, spec_link },
 6268 { &vop_lock_desc, zfs_netbsd_lock },
 6269 { &vop_unlock_desc, zfs_netbsd_unlock },
 6270 { &vop_rename_desc, spec_rename },
 6271 { &vop_mkdir_desc, spec_mkdir },
 6272 { &vop_rmdir_desc, spec_rmdir },
 6273 { &vop_symlink_desc, spec_symlink },
 6274 { &vop_readdir_desc, spec_readdir },
 6275 { &vop_readlink_desc, spec_readlink },
 6276 { &vop_inactive_desc, zfs_netbsd_inactive },
 6277 { &vop_reclaim_desc, zfs_netbsd_reclaim },
 6278 { &vop_pathconf_desc, spec_pathconf },
 6279 { &vop_seek_desc, spec_seek },
 6280 { &vop_getpages_desc, spec_getpages },
 6281 { &vop_putpages_desc, spec_putpages },
 6282 { &vop_mmap_desc, spec_mmap },
 6283 { &vop_islocked_desc, zfs_netbsd_islocked },
 6284 { &vop_advlock_desc, spec_advlock },
 6285 { &vop_print_desc, zfs_netbsd_print },
 6286 { &vop_fcntl_desc, zfs_netbsd_fcntl },
 6287 { NULL, NULL }
 6288};
 6289
 6290const struct vnodeopv_desc zfs_specop_opv_desc =
 6291 { &zfs_specop_p, zfs_specop_entries };
 6292
 6293int (**zfs_fifoop_p)(void *);
 6294const struct vnodeopv_entry_desc zfs_fifoop_entries[] = {
 6295 { &vop_default_desc, vn_default_error },
 6296 { &vop_lookup_desc, vn_fifo_bypass },
 6297 { &vop_create_desc, vn_fifo_bypass },
 6298 { &vop_mknod_desc, vn_fifo_bypass },
 6299 { &vop_open_desc, vn_fifo_bypass },
 6300 { &vop_close_desc, vn_fifo_bypass },
 6301 { &vop_access_desc, zfs_netbsd_access },
 6302 { &vop_getattr_desc, zfs_netbsd_getattr },
 6303 { &vop_setattr_desc, zfs_netbsd_setattr },
 6304 { &vop_read_desc, /**/zfs_netbsd_read },
 6305 { &vop_write_desc, /**/zfs_netbsd_write },
 6306 { &vop_ioctl_desc, vn_fifo_bypass },
 6307 { &vop_fsync_desc, zfs_netbsd_fsync },
 6308 { &vop_remove_desc, vn_fifo_bypass },
 6309 { &vop_link_desc, vn_fifo_bypass },
 6310 { &vop_lock_desc, zfs_netbsd_lock },
 6311 { &vop_unlock_desc, zfs_netbsd_unlock },
 6312 { &vop_rename_desc, vn_fifo_bypass },
 6313 { &vop_mkdir_desc, vn_fifo_bypass },
 6314 { &vop_rmdir_desc, vn_fifo_bypass },
 6315 { &vop_symlink_desc, vn_fifo_bypass },
 6316 { &vop_readdir_desc, vn_fifo_bypass },
 6317 { &vop_readlink_desc, vn_fifo_bypass },
 6318 { &vop_inactive_desc, zfs_netbsd_inactive },
 6319 { &vop_reclaim_desc, zfs_netbsd_reclaim },
 6320 { &vop_pathconf_desc, vn_fifo_bypass },
 6321 { &vop_seek_desc, vn_fifo_bypass },
 6322 { &vop_putpages_desc, vn_fifo_bypass },
 6323 { &vop_mmap_desc, vn_fifo_bypass },
 6324 { &vop_islocked_desc, zfs_netbsd_islocked },
 6325 { &vop_advlock_desc, vn_fifo_bypass },
 6326 { &vop_print_desc, zfs_netbsd_print },
 6327 { &vop_fcntl_desc, zfs_netbsd_fcntl },
 6328 { NULL, NULL }
 6329};
 6330
 6331const struct vnodeopv_desc zfs_fifoop_opv_desc =
 6332 { &zfs_fifoop_p, zfs_fifoop_entries };
 6333
6188#endif /* __NetBSD__ */ 6334#endif /* __NetBSD__ */

cvs diff -r1.25 -r1.26 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c (expand / switch to unified diff)

--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c 2019/02/05 09:54:36 1.25
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c 2019/04/15 12:59:38 1.26
@@ -717,34 +717,35 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu @@ -717,34 +717,35 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
717 zp->z_zn_prefetch = B_TRUE; /* z_prefetch default is enabled */ 717 zp->z_zn_prefetch = B_TRUE; /* z_prefetch default is enabled */
718 break; 718 break;
719#if defined(illumos) || defined(__NetBSD__) 719#if defined(illumos) || defined(__NetBSD__)
720 case VBLK: 720 case VBLK:
721 case VCHR: 721 case VCHR:
722 { 722 {
723 uint64_t rdev; 723 uint64_t rdev;
724 VERIFY(sa_lookup(zp->z_sa_hdl, SA_ZPL_RDEV(zfsvfs), 724 VERIFY(sa_lookup(zp->z_sa_hdl, SA_ZPL_RDEV(zfsvfs),
725 &rdev, sizeof (rdev)) == 0); 725 &rdev, sizeof (rdev)) == 0);
726 726
727#ifdef illumos 727#ifdef illumos
728 vp->v_rdev = zfs_cmpldev(rdev); 728 vp->v_rdev = zfs_cmpldev(rdev);
729#else 729#else
 730 vp->v_op = zfs_specop_p;
730 spec_node_init(vp, zfs_cmpldev(rdev)); 731 spec_node_init(vp, zfs_cmpldev(rdev));
731#endif 732#endif
732 } 733 }
733 break; 734 break;
734#endif 735#endif
735 case VFIFO: 736 case VFIFO:
736#ifdef __NetBSD__ 737#ifdef __NetBSD__
737 /* XXX NetBSD vp->v_op = zfs_fifoop_p; */ 738 vp->v_op = zfs_fifoop_p;
738 break; 739 break;
739#else /* __NetBSD__ */ 740#else /* __NetBSD__ */
740#ifdef illumos 741#ifdef illumos
741 case VSOCK: 742 case VSOCK:
742 case VDOOR: 743 case VDOOR:
743#endif 744#endif
744 vp->v_op = &zfs_fifoops; 745 vp->v_op = &zfs_fifoops;
745 break; 746 break;
746 case VREG: 747 case VREG:
747 if (parent == zfsvfs->z_shares_dir) { 748 if (parent == zfsvfs->z_shares_dir) {
748 ASSERT(zp->z_uid == 0 && zp->z_gid == 0); 749 ASSERT(zp->z_uid == 0 && zp->z_gid == 0);
749 vp->v_op = &zfs_shareops; 750 vp->v_op = &zfs_shareops;
750 } 751 }