CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Sun Jul 4 11:25:07 UTC 2021 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c Log Message: Add VOP_PARSEPATH to zfs control dir vnode op table. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.13 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.12 Sat May 16 18:31:46 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Sun Jul 4 11:25:07 2021 @@ -1825,6 +1825,7 @@ sfs_print(void *v) const struct vnodeopv_entry_desc zfs_sfsop_entries[] = { { _default_desc, vn_default_error }, + { _parsepath_desc, genfs_parsepath }, { _lookup_desc, sfs_lookup }, { _open_desc, sfs_open }, { _close_desc, sfs_close },
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: dholland Date: Fri Jul 2 17:14:37 UTC 2021 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Add VOP_PARSEPATH to zfs's vnode table. "oops" zfs not being under src/sys strikes again :-( To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.72 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71 Sun Nov 15 00:54:13 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Fri Jul 2 17:14:36 2021 @@ -6347,6 +6347,7 @@ const struct genfs_ops zfs_genfsops = { int (**zfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc zfs_vnodeop_entries[] = { { _default_desc, vn_default_error }, + { _parsepath_desc, genfs_parsepath }, { _lookup_desc, zfs_netbsd_lookup }, { _create_desc, zfs_netbsd_create }, { _mknod_desc, zfs_netbsd_mknod },
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Apr 21 10:02:34 UTC 2021 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c Log Message: Prevent blocking l2arc_feed_thread() forever, skip the cv_timedwait() for negative or zero ticks. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.20 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.19 Thu Jun 11 19:20:42 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Wed Apr 21 10:02:34 2021 @@ -7246,8 +7246,15 @@ l2arc_feed_thread(void *dummy __unused) while (l2arc_thread_exit == 0) { CALLB_CPR_SAFE_BEGIN(); +#ifdef __NetBSD__ + clock_t now = ddi_get_lbolt(); + if (next > now) + (void) cv_timedwait(_feed_thr_cv, + _feed_thr_lock, next - now); +#else (void) cv_timedwait(_feed_thr_cv, _feed_thr_lock, next - ddi_get_lbolt()); +#endif CALLB_CPR_SAFE_END(, _feed_thr_lock); next = ddi_get_lbolt() + hz;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: gdt Date: Thu Mar 25 18:41:29 UTC 2021 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c Log Message: zfs_ioctl.c: Drop WARNING that ZFS is under development Following discussions on current-users@, it seems many rely on ZFS to store data, and there are not particularly large issues with ZFS. ATF tests with /tmp as tmpfs, ffs2, and zfs are similar, with only a slight increase in failures under zfs. (This commit should probably NOT be pulled up to 9.) To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.23 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22 Fri Feb 28 03:52:26 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Thu Mar 25 18:41:29 2021 @@ -7194,7 +7194,6 @@ zfs_modcmd(modcmd_t cmd, void *arg) /* XXXNETBSD trim is not supported yet */ zfs_trim_enabled = B_FALSE; - printf("WARNING: ZFS on NetBSD is under development\n"); availrmem = (uint64_t)physmem * PAGE_SIZE / 1048576; if (availrmem < ZFS_MIN_MEGS * 80 / 100) { printf("ERROR: at least %dMB of memory required to "
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys
Module Name:src Committed By: hannken Date: Tue Feb 16 09:54:17 UTC 2021 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_context.h Log Message: Use the right uid / gid for nobody:nobody like FreeBSD does. Prevents null pointer dereferences when ZFS replaces this illegal (according to IS_EPHEMERAL()) id with another illegal id in operation zfs_fuid_create_cred() and finally zfs_log_create() dereferences fuidp being NULL. Adresses PR misc/55042 (Panic when creating a directory on a NFS served ZFS) To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h:1.2 Sat Jun 22 09:48:39 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_context.h Tue Feb 16 09:54:17 2021 @@ -157,13 +157,13 @@ extern "C" { #define fm_panic panic #define getffd_getfile #define getminor(a) minor(a) -#define GID_NOBODY (-2) +#define GID_NOBODY (39) #define issig(x) (sigispending(curlwp, 0)) #define kmem_debugging() 0 #define releasef fd_putfile #define strfree(str) kmem_free((str), strlen(str)+1) #define td_rul_ru -#define UID_NOBODY (-2) +#define UID_NOBODY (32767) #define vnode_pager_setsize(vp, size) zfs_netbsd_setsize(vp, size) #define zone_get_hostid(a) 0
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: yhardy Date: Sat Nov 28 22:53:06 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: Use vn_close to release the vnodes in the error handling blocks, since the vnodes were opened for writing. Fix proposed on current-users and improved by hannken@. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.19 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18 Thu Jun 25 09:39:15 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sat Nov 28 22:53:06 2020 @@ -215,7 +215,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi return (SET_ERROR(error)); } if (vp->v_type != VBLK) { +#ifdef __NetBSD__ + vn_close(vp, FREAD|FWRITE, kcred); +#else vrele(vp); +#endif vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; return (SET_ERROR(EINVAL)); } @@ -247,7 +251,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi error = workqueue_create(>vd_wq, "vdevsync", vdev_disk_flush, dvd, PRI_NONE, IPL_NONE, WQ_MPSAFE); if (error != 0) { +#ifdef __NetBSD__ + vn_close(vp, FREAD|FWRITE, kcred); +#else vrele(vp); +#endif return (SET_ERROR(error)); }
CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace
Module Name:src Committed By: chs Date: Tue Nov 17 03:20:33 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/dtrace: dtrace.c Log Message: Remove a pointless printf. To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 \ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c diff -u src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.40 src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.41 --- src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.40 Sat May 23 23:42:41 2020 +++ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Tue Nov 17 03:20:33 2020 @@ -13840,7 +13840,6 @@ doferr: return (NULL); #endif /* __FreeBSD__ */ #ifdef __NetBSD__ - printf("dtrace: XXX %s not implemented (name=%s)\n", __func__, name); return (NULL); #endif /* __NetBSD__ */ }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: chs Date: Sun Nov 15 00:54:13 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Commit the ZFS file that I forgot in this previous commit: Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to handle this flag separately. Split out the pages part of uvm_aio_aiodone() into uvm_aio_aiodone_pages() in rump just like in the real kernel. In ZFS functions that can fail to copy data between the ARC and VM pages, use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can handle these "I/O" errors. Fixes PR 55702. To generate a diff of this commit: cvs rdiff -u -r1.70 -r1.71 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.71 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70 Thu Aug 27 09:57:33 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Nov 15 00:54:13 2020 @@ -6049,20 +6049,13 @@ zfs_netbsd_getpages(void *v) PAGE_SIZE, va, DMU_READ_PREFETCH); zfs_unmap_page(pg, va); - rw_enter(rw, RW_WRITER); if (err != 0) { -for (i = 0; i < npages; i++) { - pg = ap->a_m[i]; - if ((pg->flags & PG_FAKE) != 0) { - uvm_pagefree(pg); - } else { - uvm_page_unbusy(, 1); - } -} +uvm_aio_aiodone_pages(ap->a_m, npages, false, err); memset(ap->a_m, 0, sizeof(ap->a_m[0]) * npages); break; } + rw_enter(rw, RW_WRITER); pg->flags &= ~(PG_FAKE); } @@ -6089,14 +6082,13 @@ zfs_putapage(vnode_t *vp, page_t **pp, i voff_t len, klen; int err; - bool async = (flags & PGO_SYNCIO) == 0; bool *cleanedp; struct uvm_object *uobj = >v_uobj; krwlock_t *rw = uobj->vmobjlock; if (zp->z_sa_hdl == NULL) { err = 0; - goto out_unbusy; + goto out; } /* @@ -6170,12 +6162,8 @@ zfs_putapage(vnode_t *vp, page_t **pp, i } dmu_tx_commit(tx); -out_unbusy: - rw_enter(rw, RW_WRITER); - uvm_page_unbusy(pp, count); - rw_exit(rw); - out: + uvm_aio_aiodone_pages(pp, count, true, err); return (err); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: kardel Date: Fri Oct 9 08:18:01 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_tx.c Log Message: PR kern/55705: don't attempt to sleep for negative time, we are late anyway - avoids DIAGNOSTIC panic To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5 Mon Mar 9 15:37:46 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c Fri Oct 9 08:18:01 2020 @@ -1153,6 +1153,9 @@ dmu_tx_delay(dmu_tx_t *tx, uint64_t dirt #ifdef __NetBSD__ int timo = (wakeup - now) * hz / 10; + if (timo < 0) + return; + if (timo == 0) timo = 1; kpause("dmu_tx_delay", false, timo, NULL);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Mon Sep 7 19:04:27 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dnode_sync.c Log Message: Comment out index out of bounds debugging code. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.7 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c:1.6 Mon May 28 17:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode_sync.c Mon Sep 7 15:04:27 2020 @@ -689,6 +689,7 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx) bzero(dnp->dn_blkptr + dnp->dn_nblkptr, sizeof (blkptr_t) * (dn->dn_next_nblkptr[txgoff] - dnp->dn_nblkptr)); +#ifdef notyet /* XXX: gcc-9 */ #ifdef ZFS_DEBUG } else { int i; @@ -698,6 +699,7 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx) i < dnp->dn_nblkptr; i++) ASSERT(BP_IS_HOLE(>dn_blkptr[i])); #endif +#endif } mutex_enter(>dn_mtx); dnp->dn_nblkptr = dn->dn_next_nblkptr[txgoff];
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: mrg Date: Mon Sep 7 07:44:53 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_raidz.c Log Message: i can't confirm or deny that GCC 9 is wrong about parity_valid[] having uninitialised members, but since setting up reconstruct isn't a hot path, just zero init the whole thing to be sure. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_raidz.c Mon Sep 7 07:44:53 2020 @@ -1412,7 +1412,7 @@ vdev_raidz_reconstruct(raidz_map_t *rm, int i, c; int code; int nbadparity, nbaddata; - int parity_valid[VDEV_RAIDZ_MAXPARITY]; + int parity_valid[VDEV_RAIDZ_MAXPARITY] = {0}; /* * The tgts list must already be sorted.
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Aug 27 09:57:34 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c zfs_vnops.c zfs_znode.c Log Message: Enable NCLOOKUP for ZFS. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.69 -r1.70 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c cvs rdiff -u -r1.33 -r1.34 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.28 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.29 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.28 Tue May 26 08:39:27 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Thu Aug 27 09:57:33 2020 @@ -1517,7 +1517,7 @@ zfs_domount(vfs_t *vfsp, char *osname) #endif #ifdef __NetBSD__ vfsp->mnt_flag |= MNT_LOCAL; - vfsp->mnt_iflag |= IMNT_MPSAFE; + vfsp->mnt_iflag |= IMNT_MPSAFE | IMNT_NCLOOKUP; #endif /* @@ -2078,7 +2078,7 @@ zfs_mount(vfs_t *vfsp, const char *path, vfsp->vfs_flag |= MNT_NFS4ACLS; #endif #ifdef __NetBSD__ - vfsp->mnt_iflag |= IMNT_MPSAFE; + vfsp->mnt_iflag |= IMNT_MPSAFE | IMNT_NCLOOKUP; #endif /* Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.70 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69 Thu May 21 20:43:23 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Aug 27 09:57:33 2020 @@ -1354,6 +1354,10 @@ zfs_write(vnode_t *vp, uio_t *uio, int i newmode = zp->z_mode; (void) sa_update(zp->z_sa_hdl, SA_ZPL_MODE(zfsvfs), (void *), sizeof (uint64_t), tx); +#ifdef __NetBSD__ + cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, + true); +#endif } mutex_exit(>z_acl_lock); @@ -5645,8 +5649,11 @@ zfs_netbsd_setattr(void *v) } error = zfs_setattr(vp, (vattr_t *), flags, cred, NULL); - if (error == 0) - VN_KNOTE(vp, NOTE_ATTRIB); + if (error) + return error; + + VN_KNOTE(vp, NOTE_ATTRIB); + cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true); return error; } Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.34 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33 Thu May 7 09:13:06 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Thu Aug 27 09:57:33 2020 @@ -871,6 +871,7 @@ zfs_loadvnode(struct mount *mp, struct v return (SET_ERROR(ENOENT)); } ASSERT(zp == VTOZ(vp)); + cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true); ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); @@ -891,6 +892,8 @@ zfs_newvnode(struct mount *mp, vnode_t * zfs_mknode1(dzp, vap, tx, cr, flag, , acl_ids, vp); ASSERT(zp == VTOZ(vp)); + cache_enter_id(vp, zp->z_mode, zp->z_uid, zp->z_gid, true); + *key_len = sizeof(zp->z_id); *new_key = >z_id;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jdolecek Date: Sat Jun 27 21:21:11 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_queue.c Log Message: fix bug introduced in conversion to kmem(9), passing address of the local variable instead of pointer to allocated memory should fix PR kern/55426 by Andreas Gustafsson To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2 Wed Jun 24 16:16:01 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c Sat Jun 27 21:21:11 2020 @@ -820,7 +820,7 @@ again: search = kmem_zalloc(sizeof (*search), KM_NOSLEEP); if (search) { search->io_offset = vq->vq_last_offset + 1; - VERIFY3P(avl_find(tree, , ), ==, NULL); + VERIFY3P(avl_find(tree, search, ), ==, NULL); kmem_free(search, sizeof (*search)); zio = avl_nearest(tree, idx, AVL_AFTER); } else {
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: mlelstv Date: Thu Jun 25 09:39:15 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: Don't assume everything is a wedge and has a parent device. On non-wedges this crashes. Instead, just talk to the referenced device and rely on the dk driver to pass requests correctly. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17 Sun Jun 21 21:29:11 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Thu Jun 25 09:39:15 2020 @@ -222,19 +222,18 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi pdk = NULL; if (getdiskinfo(vp, ) == 0) - pdk = disk_find(dkw.dkw_parent); + pdk = disk_find(dkw.dkw_devname); /* XXXNETBSD Once tls-maxphys gets merged this block becomes: dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS); */ { struct buf buf = { + .b_dev = vp->v_rdev, .b_bcount = MAXPHYS, }; - if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) { - buf.b_dev = pdk->dk_rawvp->v_rdev; + if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) (*pdk->dk_driver->d_minphys)(); - } dvd->vd_maxphys = buf.b_bcount; }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jdolecek Date: Wed Jun 24 16:29:34 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dsl_scan.c Log Message: reduce stack usage in dsl_scan_recurse() - allocate memory for temporary zbookmark_phys_t using kmem_alloc() rather than stack; this recuses several times usually, and this saves 2x sizeof(zbookmark_phys_t) == 64 bytes per recursion part of fix for PR kern/55402 by Frank Kardel To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2 Wed Jun 24 16:23:16 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c Wed Jun 24 16:29:34 2020 @@ -397,7 +397,7 @@ static void dsl_scan_visitbp(blkptr_t *b dmu_objset_type_t ostype, dmu_tx_t *tx); static void dsl_scan_visitdnode(dsl_scan_t *, dsl_dataset_t *ds, dmu_objset_type_t ostype, -dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx); +dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx, zbookmark_phys_t *); void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bp) @@ -585,9 +585,8 @@ dsl_scan_zil(dsl_pool_t *dp, zil_header_ /* ARGSUSED */ static void dsl_scan_prefetch(dsl_scan_t *scn, arc_buf_t *buf, blkptr_t *bp, -uint64_t objset, uint64_t object, uint64_t blkid) +uint64_t objset, uint64_t object, uint64_t blkid, zbookmark_phys_t *czb) { - zbookmark_phys_t czb; arc_flags_t flags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; if (zfs_no_scrub_prefetch) @@ -597,11 +596,11 @@ dsl_scan_prefetch(dsl_scan_t *scn, arc_b (BP_GET_LEVEL(bp) == 0 && BP_GET_TYPE(bp) != DMU_OT_DNODE)) return; - SET_BOOKMARK(, objset, object, BP_GET_LEVEL(bp), blkid); + SET_BOOKMARK(czb, objset, object, BP_GET_LEVEL(bp), blkid); (void) arc_read(scn->scn_zio_root, scn->scn_dp->dp_spa, bp, NULL, NULL, ZIO_PRIORITY_ASYNC_READ, - ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD, , ); + ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD, , czb); } static boolean_t @@ -659,6 +658,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da blkptr_t *cbp; int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT; arc_buf_t *buf; + zbookmark_phys_t *czb; err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, , ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb); @@ -666,19 +666,19 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da scn->scn_phys.scn_errors++; return (err); } + czb = kmem_alloc(sizeof (*czb), KM_SLEEP); for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) { dsl_scan_prefetch(scn, buf, cbp, zb->zb_objset, - zb->zb_object, zb->zb_blkid * epb + i); + zb->zb_object, zb->zb_blkid * epb + i, czb); } for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) { - zbookmark_phys_t czb; - - SET_BOOKMARK(, zb->zb_objset, zb->zb_object, + SET_BOOKMARK(czb, zb->zb_objset, zb->zb_object, zb->zb_level - 1, zb->zb_blkid * epb + i); - dsl_scan_visitbp(cbp, , dnp, + dsl_scan_visitbp(cbp, czb, dnp, ds, scn, ostype, tx); } + kmem_free(czb, sizeof (*czb)); arc_buf_destroy(buf, ); } else if (BP_GET_TYPE(bp) == DMU_OT_DNODE) { arc_flags_t flags = ARC_FLAG_WAIT; @@ -686,6 +686,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da int i, j; int epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT; arc_buf_t *buf; + zbookmark_phys_t *czb; err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, , ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb); @@ -693,23 +694,27 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da scn->scn_phys.scn_errors++; return (err); } + czb = kmem_alloc(sizeof (*czb), KM_SLEEP); for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) { for (j = 0; j < cdnp->dn_nblkptr; j++) { blkptr_t *cbp = >dn_blkptr[j]; dsl_scan_prefetch(scn, buf, cbp, -zb->zb_objset, zb->zb_blkid * epb + i, j); +zb->zb_objset, zb->zb_blkid * epb + i, j, +czb); } } for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) { dsl_scan_visitdnode(scn, ds, ostype, - cdnp, zb->zb_blkid * epb + i, tx); + cdnp, zb->zb_blkid * epb + i, tx, czb); } + kmem_free(czb, sizeof (*czb)); arc_buf_destroy(buf, ); } else if (BP_GET_TYPE(bp) == DMU_OT_OBJSET) { arc_flags_t flags = ARC_FLAG_WAIT; objset_phys_t *osp; arc_buf_t *buf; + zbookmark_phys_t *czb; err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, , ZIO_PRIORITY_ASYNC_READ, zio_flags, , zb); @@ -720,8 +725,9 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da osp = buf->b_data; + czb = kmem_alloc(sizeof (*czb), KM_SLEEP);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jdolecek Date: Wed Jun 24 16:23:16 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dsl_scan.c Log Message: change dsl_scan_visitbp() to allocate blkptr_t dynamically rather than on-stack - this function is called recursively, and the 120 bytes per call add up; also remove unused variable part of fix for PR kern/55402 by Frank Kardel To generate a diff of this commit: cvs rdiff -u -r1.1.1.1 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.1.1.1 src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c:1.1.1.1 Mon May 28 20:52:57 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_scan.c Wed Jun 24 16:23:16 2020 @@ -778,10 +778,7 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo dmu_objset_type_t ostype, dmu_tx_t *tx) { dsl_pool_t *dp = scn->scn_dp; - arc_buf_t *buf = NULL; - blkptr_t bp_toread = *bp; - - /* ASSERT(pbuf == NULL || arc_released(pbuf)); */ + blkptr_t *bp_toread = NULL; if (dsl_scan_check_pause(scn, zb)) return; @@ -803,8 +800,11 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo if (bp->blk_birth <= scn->scn_phys.scn_cur_min_txg) return; - if (dsl_scan_recurse(scn, ds, ostype, dnp, _toread, zb, tx) != 0) - return; + bp_toread = kmem_alloc(sizeof (blkptr_t), KM_SLEEP); + *bp_toread = *bp; + + if (dsl_scan_recurse(scn, ds, ostype, dnp, bp_toread, zb, tx) != 0) + goto out; /* * If dsl_scan_ddt() has aready visited this block, it will have @@ -813,8 +813,7 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo */ if (ddt_class_contains(dp->dp_spa, scn->scn_phys.scn_ddt_class_max, bp)) { - ASSERT(buf == NULL); - return; + goto out; } /* @@ -827,6 +826,9 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo if (BP_PHYSICAL_BIRTH(bp) <= scn->scn_phys.scn_cur_max_txg) { scan_funcs[scn->scn_phys.scn_func](dp, bp, zb); } + +out: + kmem_free(bp_toread, sizeof (blkptr_t)); } static void
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jdolecek Date: Wed Jun 24 16:16:01 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_queue.c Log Message: reduce stack usage in vdev_queue_io_to_issue() - zio_t is about 1KB, and the function potentially recurses into itself part of fix for PR kern/55402 by Frank Kardel To generate a diff of this commit: cvs rdiff -u -r1.1.1.3 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c:1.1.1.3 Mon May 28 20:52:59 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_queue.c Wed Jun 24 16:16:01 2020 @@ -798,7 +798,7 @@ vdev_queue_io_to_issue(vdev_queue_t *vq) zio_priority_t p; avl_index_t idx; avl_tree_t *tree; - zio_t search; + zio_t *search; again: ASSERT(MUTEX_HELD(>vq_lock)); @@ -817,10 +817,16 @@ again: * For FIFO queues (sync), issue the i/o with the lowest timestamp. */ tree = vdev_queue_class_tree(vq, p); - search.io_timestamp = 0; - search.io_offset = vq->vq_last_offset + 1; - VERIFY3P(avl_find(tree, , ), ==, NULL); - zio = avl_nearest(tree, idx, AVL_AFTER); + search = kmem_zalloc(sizeof (*search), KM_NOSLEEP); + if (search) { + search->io_offset = vq->vq_last_offset + 1; + VERIFY3P(avl_find(tree, , ), ==, NULL); + kmem_free(search, sizeof (*search)); + zio = avl_nearest(tree, idx, AVL_AFTER); + } else { + /* Can't find nearest, fallback to first */ + zio = NULL; + } if (zio == NULL) zio = avl_first(tree); ASSERT3U(zio->io_priority, ==, p);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jmcneill Date: Sun Jun 21 21:29:11 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: If calling d_minphys on the parent disk device, make sure we use the parent disk device's dev_t. Fixes zfs on wedges on ld(4). XXX pullup-9 To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16 Wed Apr 29 04:30:40 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sun Jun 21 21:29:11 2020 @@ -229,11 +229,12 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi */ { struct buf buf = { - .b_dev = vp->v_rdev, .b_bcount = MAXPHYS, }; - if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) + if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) { + buf.b_dev = pdk->dk_rawvp->v_rdev; (*pdk->dk_driver->d_minphys)(); + } dvd->vd_maxphys = buf.b_bcount; }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jdolecek Date: Fri Jun 19 14:13:23 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zio.c Log Message: use pool_cache for (meta)data buffers also on NetBSD this should generally slightly improve performance on MP systems, and specifically for xbd(4) storage avoids slow unaligned I/O buffer handling this change requires updated kernel, to allow up to SPA_MAXBLOCKSHIFT item size for pools fixes PR kern/55397 by Frank Kardel To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.7 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c:1.6 Tue May 7 08:49:59 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zio.c Fri Jun 19 14:13:23 2020 @@ -46,7 +46,7 @@ SYSCTL_DECL(_vfs_zfs); SYSCTL_NODE(_vfs_zfs, OID_AUTO, zio, CTLFLAG_RW, 0, "ZFS ZIO"); #ifdef __NetBSD__ -const int zio_use_uma = 0; +const int zio_use_uma = 1; #else #if defined(__amd64__) static int zio_use_uma = 1; @@ -156,7 +156,6 @@ zio_init(void) zio_link_cache = kmem_cache_create("zio_link_cache", sizeof (zio_link_t), 0, NULL, NULL, NULL, NULL, NULL, 0); -#ifndef __NetBSD__ if (!zio_use_uma) goto out; @@ -220,7 +219,6 @@ zio_init(void) zio_data_buf_cache[c - 1] = zio_data_buf_cache[c]; } out: -#endif /* __NetBSD__ */ zio_inject_init(); @@ -242,7 +240,6 @@ zio_fini(void) kmem_cache_t *last_cache = NULL; kmem_cache_t *last_data_cache = NULL; -#ifndef __NetBSD__ for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) { if (zio_buf_cache[c] != last_cache) { last_cache = zio_buf_cache[c]; @@ -256,7 +253,6 @@ zio_fini(void) } zio_data_buf_cache[c] = NULL; } -#endif /* __NetBSD__ */ kmem_cache_destroy(zio_link_cache); kmem_cache_destroy(zio_cache);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: ad Date: Thu May 21 20:43:23 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Fix bugs in previous. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.69 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.69 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68 Wed May 20 20:47:18 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu May 21 20:43:23 2020 @@ -5971,7 +5971,6 @@ zfs_netbsd_getpages(void *v) } */ * const ap = v; vnode_t *const vp = ap->a_vp; - off_t offset = ap->a_offset + (ap->a_centeridx << PAGE_SHIFT); const int flags = ap->a_flags; const bool async = (flags & PGO_SYNCIO) == 0; const bool memwrite = (ap->a_access_type & VM_PROT_WRITE) != 0; @@ -5983,12 +5982,13 @@ zfs_netbsd_getpages(void *v) vfs_t *mp; struct vm_page *pg; caddr_t va; - int npages, found, err = 0; + int npages = *ap->a_count, found, err = 0; if (flags & PGO_LOCKED) { - uvn_findpages(uobj, ap->a_offset, ap->a_count, ap->a_m, NULL, + uvn_findpages(uobj, ap->a_offset, , ap->a_m, NULL, UFP_NOWAIT | UFP_NOALLOC | UFP_NOBUSY | (memwrite ? UFP_NORDONLY : 0)); + KASSERT(npages == *ap->a_count); if (memwrite) { KASSERT(rw_write_held(uobj->vmobjlock)); for (int i = 0; i < npages; i++) { @@ -6010,9 +6010,6 @@ zfs_netbsd_getpages(void *v) if (async) { return 0; } - if (*ap->a_count != 1) { - return EBUSY; - } mp = vp->v_mount; fstrans_start(mp); @@ -6024,18 +6021,20 @@ zfs_netbsd_getpages(void *v) ZFS_VERIFY_ZP(zp); rw_enter(rw, RW_WRITER); - if (offset >= vp->v_size) { + if (ap->a_offset + (npages << PAGE_SHIFT) > round_page(vp->v_size)) { rw_exit(rw); ZFS_EXIT(zfsvfs); fstrans_done(mp); return EINVAL; } - npages = *ap->a_count; - uvn_findpages(uobj, offset, , ap->a_m, NULL, UFP_ALL); + uvn_findpages(uobj, ap->a_offset, , ap->a_m, NULL, UFP_ALL); + KASSERT(npages == *ap->a_count); for (int i = 0; i < npages; i++) { pg = ap->a_m[i]; if (pg->flags & PG_FAKE) { + voff_t offset = pg->offset; + KASSERT(pg->offset == ap->a_offset + (i << PAGE_SHIFT)); rw_exit(rw); va = zfs_map_page(pg, S_WRITE);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: ad Date: Wed May 20 20:47:18 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: zfs_netbsd_getpages: - implement the PGO_LOCKED case - handle npages > 1 for PGO_SYNCIO To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.67 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.68 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.67 Sat May 16 18:31:46 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed May 20 20:47:18 2020 @@ -755,15 +755,14 @@ mappedread(vnode_t *vp, int nbytes, uio_ va = zfs_map_page(pp, S_READ); error = uiomove(va + off, bytes, UIO_READ, uio); zfs_unmap_page(pp, va); + rw_enter(rw, RW_WRITER); + uvm_page_unbusy(, 1); + rw_exit(rw); } else { error = dmu_read_uio_dbuf(sa_get_db(zp->z_sa_hdl), uio, bytes); } - rw_enter(rw, RW_WRITER); - uvm_page_unbusy(, 1); - rw_exit(rw); - len -= bytes; off = 0; if (error) @@ -5987,9 +5986,24 @@ zfs_netbsd_getpages(void *v) int npages, found, err = 0; if (flags & PGO_LOCKED) { - *ap->a_count = 0; - ap->a_m[ap->a_centeridx] = NULL; - return EBUSY; + uvn_findpages(uobj, ap->a_offset, ap->a_count, ap->a_m, NULL, + UFP_NOWAIT | UFP_NOALLOC | UFP_NOBUSY | + (memwrite ? UFP_NORDONLY : 0)); + if (memwrite) { + KASSERT(rw_write_held(uobj->vmobjlock)); + for (int i = 0; i < npages; i++) { +pg = ap->a_m[i]; +if (pg == NULL || pg == PGO_DONTCARE) { + continue; +} +if (uvm_pagegetdirty(pg) == +UVM_PAGE_STATUS_CLEAN) { + uvm_pagemarkdirty(pg, + UVM_PAGE_STATUS_UNKNOWN); +} + } + } + return ap->a_m[ap->a_centeridx] == NULL ? EBUSY : 0; } rw_exit(rw); @@ -6016,28 +6030,42 @@ zfs_netbsd_getpages(void *v) fstrans_done(mp); return EINVAL; } - npages = 1; - pg = NULL; - uvn_findpages(uobj, offset, , , NULL, UFP_ALL); + npages = *ap->a_count; + uvn_findpages(uobj, offset, , ap->a_m, NULL, UFP_ALL); - if (pg->flags & PG_FAKE) { - rw_exit(rw); + for (int i = 0; i < npages; i++) { + pg = ap->a_m[i]; + if (pg->flags & PG_FAKE) { + rw_exit(rw); - va = zfs_map_page(pg, S_WRITE); - err = dmu_read(zfsvfs->z_os, zp->z_id, offset, PAGE_SIZE, - va, DMU_READ_PREFETCH); - zfs_unmap_page(pg, va); + va = zfs_map_page(pg, S_WRITE); + err = dmu_read(zfsvfs->z_os, zp->z_id, offset, + PAGE_SIZE, va, DMU_READ_PREFETCH); + zfs_unmap_page(pg, va); - rw_enter(rw, RW_WRITER); - pg->flags &= ~(PG_FAKE); - } + rw_enter(rw, RW_WRITER); + if (err != 0) { +for (i = 0; i < npages; i++) { + pg = ap->a_m[i]; + if ((pg->flags & PG_FAKE) != 0) { + uvm_pagefree(pg); + } else { + uvm_page_unbusy(, 1); + } +} +memset(ap->a_m, 0, sizeof(ap->a_m[0]) * +npages); +break; + } + pg->flags &= ~(PG_FAKE); + } - if (memwrite && uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) { - /* For write faults, start dirtiness tracking. */ - uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN); + if (memwrite && uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) { + /* For write faults, start dirtiness tracking. */ + uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN); + } } rw_exit(rw); - ap->a_m[ap->a_centeridx] = pg; ZFS_EXIT(zfsvfs); fstrans_done(mp);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: chs Date: Wed May 13 05:52:54 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: fix the handling in putpage of the page containing EOF. To generate a diff of this commit: cvs rdiff -u -r1.65 -r1.66 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.66 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65 Thu May 7 09:12:03 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed May 13 05:52:54 2020 @@ -6066,9 +6066,29 @@ zfs_putapage(vnode_t *vp, page_t **pp, i goto out_unbusy; } + /* + * Calculate the length and assert that no whole pages are past EOF. + * This check is equivalent to "off + len <= round_page(zp->z_size)", + * with gyrations to avoid signed integer overflow. + */ + off = pp[0]->offset; len = count * PAGESIZE; - KASSERT(off + len <= round_page(zp->z_size)); + KASSERT(off <= zp->z_size); + KASSERT(len <= round_page(zp->z_size)); + KASSERT(off <= round_page(zp->z_size) - len); + + /* + * If EOF is within the last page, reduce len to avoid writing past + * the file size in the ZFS buffer. Assert that + * "off + len <= zp->z_size", again avoiding signed integer overflow. + */ + + if (len > zp->z_size - off) { + len = zp->z_size - off; + } + KASSERT(len <= zp->z_size); + KASSERT(off <= zp->z_size - len); if (zfs_owner_overquota(zfsvfs, zp, B_FALSE) || zfs_owner_overquota(zfsvfs, zp, B_TRUE)) {
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu May 7 09:13:06 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: Operation zfs_zget_cleaner() cannot fail, comment and add assertions. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.33 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32 Thu May 7 09:12:31 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Thu May 7 09:13:06 2020 @@ -1288,6 +1288,12 @@ zfs_zget(zfsvfs_t *zfsvfs, uint64_t obj_ return error; } +/* + * Get a known cached znode, to be used from zil_commit()->zfs_get_data() + * to resolve log entries. Doesn't take a reference, will never fail and + * depends on zfs_vnops.c::zfs_netbsd_reclaim() running a zil_commit() + * before the znode gets freed. + */ int zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint64_t obj_num, znode_t **zpp) { @@ -1295,31 +1301,26 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 sa_handle_t *hdl; dmu_object_info_t doi; znode_t *zp; - int err; ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num); - err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, ); - if (err) { - ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); - return (SET_ERROR(err)); - } + VERIFY(0 == sa_buf_hold(zfsvfs->z_os, obj_num, NULL, )); dmu_object_info_from_db(db, ); - if (doi.doi_bonus_type != DMU_OT_SA && - (doi.doi_bonus_type != DMU_OT_ZNODE || + ASSERT(doi.doi_bonus_type == DMU_OT_SA || (doi.doi_bonus_type == DMU_OT_ZNODE && - doi.doi_bonus_size < sizeof (znode_phys_t { - sa_buf_rele(db, NULL); - ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); - return (SET_ERROR(EINVAL)); - } + doi.doi_bonus_size >= sizeof (znode_phys_t))); + hdl = dmu_buf_get_user(db); ASSERT3P(hdl, !=, NULL); + zp = sa_get_userdata(hdl); ASSERT3U(zp->z_id, ==, obj_num); + sa_buf_rele(db, NULL); + ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); + *zpp = zp; return (0); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu May 7 09:12:03 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Revert Rev. 1.63 and add a comment why we have to zil_commit() here: Operation zfs_znode.c::zfs_zget_cleaner() depends on this zil_commit() as a barrier to guarantee the znode cannot get freed before its log entries are resolved. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.64 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.65 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.64 Sat Mar 14 20:45:23 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu May 7 09:12:03 2020 @@ -5858,11 +5858,16 @@ zfs_netbsd_reclaim(void *v) zp->z_atime_dirty = 0; dmu_tx_commit(tx); } - - if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) - zil_commit(zfsvfs->z_log, zp->z_id); } + /* + * Operation zfs_znode.c::zfs_zget_cleaner() depends on this + * zil_commit() as a barrier to guarantee the znode cannot + * get freed before its log entries are resolved. + */ + if (zfsvfs->z_log) + zil_commit(zfsvfs->z_log, zp->z_id); + if (zp->z_sa_hdl == NULL) zfs_znode_free(zp); else
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu May 7 09:12:32 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: Revert Rev. 1.31 as it is no longer possible for the handle to be NULL. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.32 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31 Fri Mar 20 08:26:01 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Thu May 7 09:12:31 2020 @@ -1315,11 +1315,7 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 return (SET_ERROR(EINVAL)); } hdl = dmu_buf_get_user(db); - if (hdl == NULL) { - sa_buf_rele(db, NULL); - ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); - return (SET_ERROR(EINVAL)); - } + ASSERT3P(hdl, !=, NULL); zp = sa_get_userdata(hdl); ASSERT3U(zp->z_id, ==, obj_num); sa_buf_rele(db, NULL);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Wed Apr 29 04:30:40 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: Set up more of a fake struct buf, for ldminphys. Fixes: arm64# zpool create rpool ld4 [ 198.4376097] panic: Trap: Data Abort (EL1): Translation Fault L1 with read access for 0178: pc c017acf4: opcode f940bc00: ldr x0, [x0,#376] [ 198.4694793] fp c00073026660 ldminphys() at c017acf4 netbsd:ldminphys+0x34 [ 198.4792624] fp c00073026680 vdev_disk_open.part.4() at c13d4c4c zfs:vdev_disk_open.part.4+0x37c [ 198.4792624] fp c000730268d0 vdev_open() at c13d2530 zfs:vdev_open+0x68 [ 198.4792624] fp c00073026920 vdev_open_children() at c13d2958 zfs:vdev_open_children+0x40 [ 198.4792624] fp c00073026950 vdev_root_open() at c13dad48 zfs:vdev_root_open+0x30 XXX pullup-9 To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.15 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.16 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.15 Mon Mar 2 16:01:56 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Wed Apr 29 04:30:40 2020 @@ -228,7 +228,10 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS); */ { - struct buf buf = { .b_bcount = MAXPHYS }; + struct buf buf = { + .b_dev = vp->v_rdev, + .b_bcount = MAXPHYS, + }; if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) (*pdk->dk_driver->d_minphys)(); dvd->vd_maxphys = buf.b_bcount;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Fri Mar 20 08:26:01 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: With zfs_netbsd_reclaim() no longer doing an unconditional zil commit dmu_buf_get_user() may return a NULL handle when the znode already disappeared. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.30 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.31 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.30 Sun Feb 23 15:46:38 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Fri Mar 20 08:26:01 2020 @@ -1315,7 +1315,11 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 return (SET_ERROR(EINVAL)); } hdl = dmu_buf_get_user(db); - ASSERT3P(hdl, !=, NULL); + if (hdl == NULL) { + sa_buf_rele(db, NULL); + ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); + return (SET_ERROR(EINVAL)); + } zp = sa_get_userdata(hdl); ASSERT3U(zp->z_id, ==, obj_num); sa_buf_rele(db, NULL);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: fox Date: Tue Mar 17 00:54:03 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_acl.c Log Message: external/cddl/osnet: Fix -Werror=maybe-uninitialized error in zfs_acl.c. Detected by build.sh with MKLIBCSANITIZER=yes and fixed upstream, pick only the fix from the commit. Upstream commits https://github.com/zfsonfreebsd/ZoF/commit/100a91aa3e9773f2a2a373c5cb066b52c780716c https://github.com/openzfs/zfs/commit/100a91aa3e9773f2a2a373c5cb066b52c780716c Cherry-pick: >From 100a91aa3e9773f2a2a373c5cb066b52c780716c Mon Sep 17 00:00:00 2001 From: Chunwei Chen Date: Fri, 17 Jun 2016 17:36:01 -0700 Subject: [PATCH] Fix NFS credential Signed-off-by: Chunwei Chen Signed-off-by: Brian Behlendorf Closes #4772 Closes #4758 Reviewed by: kamil@ To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5 Fri Sep 7 02:25:40 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c Tue Mar 17 00:54:03 2020 @@ -1598,7 +1598,7 @@ zfs_acl_ids_create(znode_t *dzp, int fla int error; zfsvfs_t *zfsvfs = dzp->z_zfsvfs; zfs_acl_t *paclp; - gid_t gid; + gid_t gid = vap->va_gid; boolean_t trim = B_FALSE; boolean_t inherited = B_FALSE;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: fox Date: Mon Mar 9 15:40:50 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: metaslab.c Log Message: external/cddl/osnet: Fix possible null pointer access. Detected by UBSan and fixed upstream, pick only the fix from the commit. Cherry-pick: >From 928e8ad47d3478a3d5d01f0dd6ae74a9371af65e Mon Sep 17 00:00:00 2001 From: Serapheim Dimitropoulos Date: Wed, 20 Feb 2019 09:59:57 -0800 Subject: [PATCH] Introduce auxiliary metaslab histograms Reviewed by: Paul Dagnelie Reviewed-by: Brian Behlendorf Reviewed by: Matt Ahrens Signed-off-by: Serapheim Dimitropoulos Closes #8358 Reviewed by: kamil@ To generate a diff of this commit: cvs rdiff -u -r1.1.1.3 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c:1.1.1.3 Mon May 28 20:52:58 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/metaslab.c Mon Mar 9 15:40:50 2020 @@ -3370,7 +3370,7 @@ metaslab_alloc(spa_t *spa, metaslab_clas zio_alloc_list_t *zal, zio_t *zio) { dva_t *dva = bp->blk_dva; - dva_t *hintdva = hintbp->blk_dva; + dva_t *hintdva = (hintbp != NULL) ? hintbp->blk_dva : NULL; int error = 0; ASSERT(bp->blk_birth == 0);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: fox Date: Mon Mar 9 15:37:46 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_tx.c spa.c Log Message: external/cddl/osnet: Fix possible signed integer overflow Detected by UBSan and fixed upstream Cherry-pick: >From 05852b3467b44cdf88541ec67624cd1f5f2ded1d Mon Sep 17 00:00:00 2001 From: luozhengzheng Date: Fri, 14 Oct 2016 05:25:05 +0800 Subject: [PATCH] Fix coverity defects: CID 147571, 147574 CID 147571: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN) CID 147574: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN) Reviewed-by: Brian Behlendorf Signed-off-by: luozhengzheng Closes #5268 Reviewed by: kamil@ To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c cvs rdiff -u -r1.10 -r1.11 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.4 Fri Jun 21 10:59:50 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c Mon Mar 9 15:37:46 2020 @@ -412,7 +412,7 @@ dmu_tx_count_dnode(dmu_tx_hold_t *txh) dnode_t *dn = txh->txh_dnode; dnode_t *mdn = DMU_META_DNODE(txh->txh_tx->tx_objset); uint64_t space = mdn->dn_datablksz + - ((mdn->dn_nlevels-1) << mdn->dn_indblkshift); + ((uint64_t)(mdn->dn_nlevels-1) << mdn->dn_indblkshift); if (dn && dn->dn_dbuf->db_blkptr && dsl_dataset_block_freeable(dn->dn_objset->os_dsl_dataset, Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.10 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.11 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.10 Tue Jul 23 07:46:22 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c Mon Mar 9 15:37:46 2020 @@ -6293,7 +6293,7 @@ spa_async_tasks_pending(spa_t *spa) } else { config_task_suspended = (gethrtime() - spa->spa_ccw_fail_time) < - (zfs_ccw_retry_interval * NANOSEC); + ((hrtime_t)zfs_ccw_retry_interval * NANOSEC); } return (non_config_tasks || (config_task && !config_task_suspended));
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Sun Mar 8 19:59:45 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Avoid unnecessary zil_commit on rm. 1. Issue zil_commit only if we're actually updating something -- there's no need to commit if we're unlinking the file or if there's no atime update being applied. 2. Issue zil_commit only if the zfs has sync=always set -- for sync=standard there's no need for us to commit anything here since no application asked for an explicit sync. Speeds up untarring base.tgz on top of itself by a factor of about 2x, and speeds up rm by a factor of about 10x, on my system with an SSD SLOG over SATA. Histogram of unlink, rmdir, and rename timing shows dramatic reduction in latency for most samples. (To be fair, this was not an improvement over zfs; issuing the unnecessary zil_commit was a self-inflicted performance wound.) To generate a diff of this commit: cvs rdiff -u -r1.62 -r1.63 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.62 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.63 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.62 Sun Feb 23 15:46:38 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Mar 8 19:59:45 2020 @@ -5858,10 +5858,10 @@ zfs_netbsd_reclaim(void *v) zp->z_atime_dirty = 0; dmu_tx_commit(tx); } - } - if (zfsvfs->z_log) - zil_commit(zfsvfs->z_log, zp->z_id); + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zfsvfs->z_log, zp->z_id); + } if (zp->z_sa_hdl == NULL) zfs_znode_free(zp);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: mlelstv Date: Sat Feb 29 17:15:43 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: Use utility functions to handle disk geometry. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.14 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13 Sun Dec 1 20:25:31 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sat Feb 29 17:15:43 2020 @@ -35,7 +35,6 @@ #include #include #include -#include #include #include @@ -147,10 +146,11 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi spa_t *spa = vd->vdev_spa; vdev_disk_t *dvd; vnode_t *vp; - struct dkwedge_info dkw; - struct disk *pdk; int error, cmd; - struct partinfo pinfo; + uint64_t numsecs; + unsigned secsize; + struct disk *pdk; + struct dkwedge_info dkw; /* * We must have a pathname, and it must be absolute. @@ -219,33 +219,15 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi return (SET_ERROR(EINVAL)); } + pdk = NULL; + if (getdiskinfo(vp, ) == 0) + pdk = disk_find(dkw.dkw_parent); + /* XXXNETBSD Once tls-maxphys gets merged this block becomes: - if (VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED) == 0) - pdk = disk_find(dkw.dkw_parent); - else - pdk = disk_find_blk(vp->v_rdev); dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS); */ { struct buf buf = { .b_bcount = MAXPHYS }; - - if (VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED) == 0) { - pdk = disk_find(dkw.dkw_parent); - } else { - const char *dev_name; - - dev_name = devsw_blk2name(major(vp->v_rdev)); - if (dev_name) { -char disk_name[16]; - -snprintf(disk_name, sizeof(disk_name), "%s%d", -dev_name, DISKUNIT(vp->v_rdev)); -pdk = disk_find(disk_name); - } else { -pdk = NULL; - } - buf.b_dev = vp->v_rdev; - } if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) (*pdk->dk_driver->d_minphys)(); dvd->vd_maxphys = buf.b_bcount; @@ -268,32 +250,22 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi dvd->vd_vp = vp; skip_open: - /* - * Determine the actual size of the device. - * Try wedge info first as it supports larger disks. - */ - error = VOP_IOCTL(vp, DIOCGWEDGEINFO, , FREAD, NOCRED); - if (error == 0) { - pdk = disk_find(dkw.dkw_parent); - if (pdk) { - pinfo.pi_secsize = (1 << pdk->dk_byteshift); - pinfo.pi_size = dkw.dkw_size; - pinfo.pi_offset = dkw.dkw_offset; - } else - error = ENODEV; - } - if (error) - error = VOP_IOCTL(vp, DIOCGPARTINFO, , FREAD, kcred); + error = getdisksize(vp, , ); if (error != 0) { vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; return (SET_ERROR(error)); } - *psize = pinfo.pi_size * pinfo.pi_secsize; + + *psize = numsecs * secsize; *max_psize = *psize; - *ashift = highbit(MAX(pinfo.pi_secsize, SPA_MINBLOCKSIZE)) - 1; + *ashift = highbit(MAX(secsize, SPA_MINBLOCKSIZE)) - 1; *pashift = *ashift; - vd->vdev_wholedisk = (pinfo.pi_offset == 0); /* XXXNETBSD */ + + vd->vdev_wholedisk = 0; + if (getdiskinfo(vp, ) != 0 && + dkw.dkw_offset == 0 && dkw.dkw_size == numsecs) + vd->vdev_wholedisk = 1, /* * Clear the nowritecache bit, so that on a vdev_reopen() we will
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: mlelstv Date: Sat Feb 29 17:03:33 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zvol.c Log Message: Fix disk geometry calculation. Add DIOCGPARTINFO to support getdisksize() used by other drivers, filesystems and specfs. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.13 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.12 Wed May 22 08:47:02 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c Sat Feb 29 17:03:33 2020 @@ -72,6 +72,9 @@ #include #include #include +#ifdef __NetBSD__ +#include +#endif #include #include #include @@ -316,12 +319,17 @@ zvol_size_changed(zvol_state_t *zv, uint #endif /* __FreeBSD__ */ #ifdef __NetBSD__ struct disk_geom *dg = >zv_dk.dk_geom; + objset_t *os = zv->zv_objset; + spa_t *spa = dmu_objset_spa(os); + unsigned secsize; zv->zv_volsize = volsize; + secsize = MAX(DEV_BSIZE, 1U << spa->spa_max_ashift); + memset(dg, 0, sizeof(*dg)); - dg->dg_secsize = DEV_BSIZE; /* XXX 512? */ - dg->dg_secperunit = zv->zv_volsize / dg->dg_secsize;; + dg->dg_secsize = secsize; + dg->dg_secperunit = volsize / secsize; disk_set_info(NULL, >zv_dk, "ZVOL"); #endif } @@ -3589,19 +3597,47 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t case DIOCGWEDGEINFO: { struct dkwedge_info *dkw = (void *) arg; - + struct disk_geom *dg = >zv_dk.dk_geom; + memset(dkw, 0, sizeof(*dkw)); strlcpy(dkw->dkw_devname, zv->zv_name, sizeof(dkw->dkw_devname)); + + /* + * dkw_parent is interpreted as disk device name by the kernel + * to locate the disk driver and its geometry data. The faked + * name "ZFS" must never match a device name. The kernel will + * then call DIOCGPARTINFO below to retrieve the missing + * information. + * + * Userland will also be confused, but it can use the + * proplib based DIOCGDISKINFO to get the geometry + * information. + */ strlcpy(dkw->dkw_parent, "ZFS", sizeof(dkw->dkw_parent)); - + dkw->dkw_offset = 0; - dkw->dkw_size = zv->zv_volsize / DEV_BSIZE; + dkw->dkw_size = dg->dg_secperunit; strcpy(dkw->dkw_ptype, DKW_PTYPE_FFS); break; } + case DIOCGPARTINFO: + { + struct partinfo *pi = (void *) arg; + struct disk_geom *dg = >zv_dk.dk_geom; + + memset(pi, 0, sizeof(*pi)); + pi->pi_offset = 0; + pi->pi_secsize = dg->dg_secsize; + pi->pi_size = dg->dg_secperunit; + pi->pi_fstype = FS_OTHER; + pi->pi_bsize = MAX(BLKDEV_IOSIZE, pi->pi_secsize); + + break; + } + default: dprintf("unknown disk_ioctl called\n"); error = ENOTTY;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Fri Feb 28 03:52:26 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c Log Message: Teach zfs bdevsw to do b_psize. This is needed, among other things, to swap on zvols. Attempting to swap on zvols currently deadlocks but that's a separate issue that needs to be fixed too! To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.22 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.21 Mon Oct 14 13:18:00 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Fri Feb 28 03:52:26 2020 @@ -7062,6 +7062,29 @@ nb_zvol_strategy(struct buf *bp) (void) zvol_strategy(bp); } +static int +nb_zvol_psize(dev_t dev) +{ + minor_t minor = getminor(dev); + off_t nbytes; + unsigned bytespersector; + + if (minor == 0) /* /dev/zfs */ + return -1; + + if (zvol_ioctl(dev, DIOCGMEDIASIZE, (intptr_t), 0, + NOCRED, NULL)) + return -1; + if (zvol_ioctl(dev, DIOCGSECTORSIZE, (intptr_t), 0, + NOCRED, NULL)) + return -1; + if (bytespersector == 0) /* paranoia */ + return -1; + if (nbytes/bytespersector > INT_MAX) /* paranoia */ + return -1; + return nbytes/bytespersector; +} + static const struct fileops zfs_fileops = { .fo_name = "zfs", .fo_read = fbadop_read, @@ -7081,7 +7104,7 @@ const struct bdevsw zfs_bdevsw = { .d_strategy = nb_zvol_strategy, .d_ioctl = nb_zfsdev_ioctl, .d_dump = nodump, - .d_psize = nosize, + .d_psize = nb_zvol_psize, .d_flag = D_DISK | D_MPSAFE };
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Sun Feb 23 06:15:27 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Teach device nodes on zfs to handle fsync by calling spec_fsync too. To generate a diff of this commit: cvs rdiff -u -r1.60 -r1.61 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.61 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60 Sun Feb 23 05:50:25 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Feb 23 06:15:27 2020 @@ -5509,6 +5509,19 @@ zfs_netbsd_fsync(void *v) } static int +zfs_spec_fsync(void *v) +{ + struct vop_fsync_args *ap = v; + int error; + + error = spec_fsync(v); + if (error) + return error; + + return (zfs_fsync(ap->a_vp, ap->a_flags, ap->a_cred, NULL)); +} + +static int zfs_netbsd_getattr(void *v) { struct vop_getattr_args *ap = v; @@ -6355,7 +6368,7 @@ const struct vnodeopv_entry_desc zfs_spe { _poll_desc, spec_poll }, { _kqfilter_desc, spec_kqfilter }, { _revoke_desc, spec_revoke }, - { _fsync_desc, zfs_netbsd_fsync }, + { _fsync_desc, zfs_spec_fsync }, { _remove_desc, spec_remove }, { _link_desc, spec_link }, { _lock_desc, zfs_netbsd_lock },
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Sun Feb 23 05:50:25 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Teach zfs spec nodes to VOP_BWRITE too. Fixes hang on writing to, e.g., ffs mounted on a device node that lives on zfs. XXX pullup To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.60 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59 Wed Feb 19 05:52:52 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Feb 23 05:50:25 2020 @@ -6376,6 +6376,7 @@ const struct vnodeopv_entry_desc zfs_spe { _islocked_desc, zfs_netbsd_islocked }, { _advlock_desc, spec_advlock }, { _strategy_desc, spec_strategy }, + { _bwrite_desc, spec_bwrite }, { _print_desc, zfs_netbsd_print }, { _fcntl_desc, zfs_netbsd_fcntl }, { NULL, NULL }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Wed Feb 19 17:05:06 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: spa_history.c Log Message: Mark previous #ifdef __NetBSD__, per request from hannken. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c:1.5 Wed Feb 19 16:11:19 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_history.c Wed Feb 19 17:05:06 2020 @@ -540,9 +540,17 @@ spa_history_log_internal_dd(dsl_dir_t *d void spa_history_log_version(spa_t *spa, const char *operation) { +#ifdef __NetBSD__ spa_history_log_internal(spa, operation, NULL, "pool version %llu; software version %llu/%d; %s %s %s %s %s", (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION, utsname.sysname, utsname.nodename, utsname.release, utsname.version, utsname.machine); +#else + spa_history_log_internal(spa, operation, NULL, + "pool version %llu; software version %llu/%d; uts %s %s %s %s", + (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION, + utsname.nodename, utsname.release, utsname.version, + utsname.machine); +#endif }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Wed Feb 19 05:52:52 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Define VOP_STRATEGY on zfs device nodes too. Fixes eternal hangs in attempts to do I/O on device nodes on zfs. XXX pullup To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.59 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58 Sat Feb 15 19:03:15 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Feb 19 05:52:52 2020 @@ -6375,6 +6375,7 @@ const struct vnodeopv_entry_desc zfs_spe { _mmap_desc, spec_mmap }, { _islocked_desc, zfs_netbsd_islocked }, { _advlock_desc, spec_advlock }, + { _strategy_desc, spec_strategy }, { _print_desc, zfs_netbsd_print }, { _fcntl_desc, zfs_netbsd_fcntl }, { NULL, NULL }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Sat Feb 15 19:03:15 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Teach zfs to revoke vnodes the usual way. XXX pullup To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.58 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57 Thu Feb 13 16:53:32 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sat Feb 15 19:03:15 2020 @@ -6309,6 +6309,7 @@ const struct vnodeopv_entry_desc zfs_vno { _ioctl_desc, zfs_netbsd_ioctl }, { _poll_desc, genfs_poll }, { _kqfilter_desc, genfs_kqfilter }, + { _revoke_desc, genfs_revoke }, { _fsync_desc, zfs_netbsd_fsync }, { _remove_desc, zfs_netbsd_remove }, { _link_desc, zfs_netbsd_link }, @@ -6353,6 +6354,7 @@ const struct vnodeopv_entry_desc zfs_spe { _ioctl_desc, spec_ioctl }, { _poll_desc, spec_poll }, { _kqfilter_desc, spec_kqfilter }, + { _revoke_desc, spec_revoke }, { _fsync_desc, zfs_netbsd_fsync }, { _remove_desc, spec_remove }, { _link_desc, spec_link }, @@ -6397,6 +6399,7 @@ const struct vnodeopv_entry_desc zfs_fif { _ioctl_desc, vn_fifo_bypass }, { _poll_desc, vn_fifo_bypass }, { _kqfilter_desc, vn_fifo_bypass }, + { _revoke_desc, vn_fifo_bypass }, { _fsync_desc, zfs_netbsd_fsync }, { _remove_desc, vn_fifo_bypass }, { _link_desc, vn_fifo_bypass },
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Feb 13 16:53:32 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: zfs_netbsd_setattr: ignore size changes on device nodes. To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.57 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.57 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56 Sat Jan 18 15:21:32 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Feb 13 16:53:32 2020 @@ -5575,6 +5575,9 @@ zfs_netbsd_setattr(void *v) zflags = VTOZ(vp)->z_pflags; + /* Ignore size changes on device nodes. */ + if (vp->v_type == VBLK || vp->v_type == VCHR) + xvap.xva_vattr.va_mask &= ~AT_SIZE; if (vap->va_flags != VNOVAL) { int error;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: ad Date: Sat Jan 18 15:21:32 UTC 2020 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Track page dirtyness for ZFS (yamt-pagecache). I had forgotten that it had its own cache. Thanks to hannken@ for the repro. To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.55 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.56 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.55 Wed Jan 15 17:55:43 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sat Jan 18 15:21:32 2020 @@ -779,7 +779,7 @@ update_pages(vnode_t *vp, int64_t start, struct uvm_object *uobj = >v_uobj; kmutex_t *mtx = uobj->vmobjlock; caddr_t va; - int off; + int off, status; ASSERT(vp->v_mount != NULL); @@ -796,6 +796,26 @@ update_pages(vnode_t *vp, int64_t start, found = uvn_findpages(uobj, start, , , NULL, UFP_NOALLOC); if (found) { + /* + * We're about to zap the page's contents and don't + * care about any existing modifications. We must + * keep track of any new modifications past this + * point. Clear the modified bit in the pmap, and + * if the page is marked dirty revert to tracking + * the modified bit. + */ + switch (uvm_pagegetdirty(pp)) { + case UVM_PAGE_STATUS_DIRTY: +/* Does pmap_clear_modify(). */ +uvm_pagemarkdirty(pp, UVM_PAGE_STATUS_UNKNOWN); +break; + case UVM_PAGE_STATUS_UNKNOWN: +pmap_clear_modify(pp); +break; + case UVM_PAGE_STATUS_CLEAN: +/* Nothing to do. */ +break; + } mutex_exit(mtx); va = zfs_map_page(pp, S_WRITE); @@ -5990,10 +6010,13 @@ zfs_netbsd_getpages(void *v) mutex_enter(mtx); pg->flags &= ~(PG_FAKE); - pmap_clear_modify(pg); } if (memwrite) { + if (uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) { + /* For write faults, start dirtiness tracking. */ + uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN); + } if ((vp->v_iflag & VI_ONWORKLST) == 0) { vn_syncer_add_to_worklist(vp, filedelay); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: sevan Date: Mon Dec 9 00:15:11 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c Log Message: We currently lack a tunable to control ZFS prefetch, so skip the warning and FreeBSD specific instructions on settings. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.16 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15 Sun Dec 1 20:26:05 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Mon Dec 9 00:15:11 2019 @@ -6218,6 +6218,7 @@ arc_init(void) } #ifdef _KERNEL +#ifdef __FreeBSD__ if (TUNABLE_INT_FETCH("vfs.zfs.prefetch_disable", _prefetch_disable)) prefetch_tunable_set = 1; @@ -6239,6 +6240,7 @@ arc_init(void) zfs_prefetch_disable = 1; } #endif +#endif /* Warn about ZFS memory and address space requirements. */ if (((uint64_t)physmem * PAGESIZE) < (256 + 128 + 64) * (1 << 20)) { printf("ZFS WARNING: Recommended minimum RAM size is 512MB; " @@ -6247,9 +6249,11 @@ arc_init(void) if (kmem_size() < 512 * (1 << 20)) { printf("ZFS WARNING: Recommended minimum kmem_size is 512MB; " "expect unstable behavior.\n"); +#ifdef __FreeBSD__ printf(" Consider tuning vm.kmem_size and " "vm.kmem_size_max\n"); printf(" in /boot/loader.conf.\n"); +#endif } #endif }
CVS commit: src/external/cddl/osnet/dist/uts/common/os
Module Name:src Committed By: jmcneill Date: Sun Dec 1 20:26:31 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/os: fm.c Log Message: Need sys/atomic.h on NetBSD To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/dist/uts/common/os/fm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/os/fm.c diff -u src/external/cddl/osnet/dist/uts/common/os/fm.c:1.1 src/external/cddl/osnet/dist/uts/common/os/fm.c:1.2 --- src/external/cddl/osnet/dist/uts/common/os/fm.c:1.1 Mon Jun 24 08:27:20 2019 +++ src/external/cddl/osnet/dist/uts/common/os/fm.c Sun Dec 1 20:26:31 2019 @@ -65,6 +65,7 @@ #include #include #ifdef __NetBSD__ +#include #include #else #include
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jmcneill Date: Sun Dec 1 20:26:05 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c Log Message: Provide a default ptob() implementation To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.14 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.15 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.14 Sun May 26 10:21:00 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Sun Dec 1 20:26:05 2019 @@ -280,6 +280,9 @@ int arc_procfd; #ifndef btop #define btop(x) ((x) / PAGE_SIZE) #endif +#ifndef ptob +#define ptob(x) ((x) * PAGE_SIZE) +#endif //#define needfree (uvmexp.free < uvmexp.freetarg ? uvmexp.freetarg : 0) #define buf_init arc_buf_init #define freemem uvmexp.free
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: jmcneill Date: Sun Dec 1 20:25:31 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: Initialize b_dev before passing buf to d_minphys (ldminphys needs this) To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.13 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.12 Tue Aug 20 08:12:14 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sun Dec 1 20:25:31 2019 @@ -244,6 +244,7 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi } else { pdk = NULL; } + buf.b_dev = vp->v_rdev; } if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) (*pdk->dk_driver->d_minphys)();
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Apr 15 12:59:38 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c zfs_vnops.c zfs_znode.c Log Message: Add support for fifos, character and block devices. To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.47 -r1.48 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c cvs rdiff -u -r1.25 -r1.26 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.22 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21 Mon Mar 18 09:22:14 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Mon Apr 15 12:59:38 2019 @@ -147,10 +147,14 @@ void zfs_init(void); void zfs_fini(void); extern const struct vnodeopv_desc zfs_vnodeop_opv_desc; +extern const struct vnodeopv_desc zfs_specop_opv_desc; +extern const struct vnodeopv_desc zfs_fifoop_opv_desc; extern const struct vnodeopv_desc zfs_sfsop_opv_desc; static const struct vnodeopv_desc * const zfs_vnodeop_descs[] = { _vnodeop_opv_desc, + _specop_opv_desc, + _fifoop_opv_desc, _sfsop_opv_desc, NULL, }; Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.48 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47 Mon Mar 18 09:20:58 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Mon Apr 15 12:59:38 2019 @@ -81,6 +81,7 @@ #ifdef __NetBSD__ #include +#include #include #include #include @@ -5072,16 +5073,39 @@ static int zfs_netbsd_read(void *v) { struct vop_read_args *ap = v; + vnode_t *vp = ap->a_vp; + znode_t *zp = VTOZ(vp); - return (zfs_read(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); + switch (vp->v_type) { + case VBLK: + case VCHR: + ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp); + return (VOCALL(spec_vnodeop_p, VOFFSET(vop_read), ap)); + case VFIFO: + ZFS_ACCESSTIME_STAMP(zp->z_zfsvfs, zp); + return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_read), ap)); + } + + return (zfs_read(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); } static int zfs_netbsd_write(void *v) { struct vop_write_args *ap = v; + vnode_t *vp = ap->a_vp; - return (zfs_write(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); + switch (vp->v_type) { + case VBLK: + case VCHR: + GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED); + return (VOCALL(spec_vnodeop_p, VOFFSET(vop_write), ap)); + case VFIFO: + GOP_MARKUPDATE(vp, GOP_UPDATE_MODIFIED); + return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_write), ap)); + } + + return (zfs_write(vp, ap->a_uio, ioflags(ap->a_ioflag), ap->a_cred, NULL)); } static int @@ -5278,6 +5302,44 @@ zfs_netbsd_create(void *v) } static int +zfs_netbsd_mknod(void *v) +{ + struct vop_mknod_v3_args /* { + struct vnode *a_dvp; + struct vnode **a_vpp; + struct componentname *a_cnp; + struct vattr *a_vap; + } */ *ap = v; + struct vnode *dvp = ap->a_dvp; + struct vnode **vpp = ap->a_vpp; + struct componentname *cnp = ap->a_cnp; + struct vattr *vap = ap->a_vap; + char *nm; + int mode; + int error; + + KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); + + vattr_init_mask(vap); + mode = vap->va_mode & ALLPERMS; + + /* ZFS wants a null-terminated name. */ + nm = PNBUF_GET(); + (void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1); + + /* XXX !EXCL is wrong here... */ + error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL); + + PNBUF_PUT(nm); + + KASSERT((error == 0) == (*vpp != NULL)); + KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); + VOP_UNLOCK(*vpp, 0); + + return (error); +} + +static int zfs_netbsd_remove(void *v) { struct vop_remove_v2_args /* { @@ -6149,6 +6211,7 @@ const struct vnodeopv_entry_desc zfs_vno { _default_desc, vn_default_error }, { _lookup_desc, zfs_netbsd_lookup }, { _create_desc, zfs_netbsd_create }, + { _mknod_desc, zfs_netbsd_mknod }, { _open_desc, zfs_netbsd_open }, { _close_desc, zfs_netbsd_close }, { _access_desc, zfs_netbsd_access }, @@ -6185,4 +6248,87 @@ const struct vnodeopv_entry_desc zfs_vno const struct vnodeopv_desc zfs_vnodeop_opv_desc = { _vnodeop_p, zfs_vnodeop_entries }; +int (**zfs_specop_p)(void *); +const struct vnodeopv_entry_desc zfs_specop_entries[] = { + { _default_desc, vn_default_error }, + { _lookup_desc, spec_lookup }, + { _create_desc, spec_create }, + { _mknod_desc, spec_mknod }, + { _open_desc, spec_open }, + { _close_desc, spec_close }, + { _access_desc,
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Mar 18 09:22:15 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c zfs_vfsops.c src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_ctldir.h Log Message: Make ZFS exportable by NFS, implement zfsctl_vptofh(), zfs_netbsd_vptofh() and zfs_netbsd_fhtovp(). Undo changes to now completely unused zfs_fhtovp(). To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c cvs rdiff -u -r1.20 -r1.21 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_ctldir.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.9 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8 Mon Mar 18 09:21:31 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Mon Mar 18 09:22:14 2019 @@ -1885,6 +1885,33 @@ zfsctl_loadvnode(vfs_t *vfsp, vnode_t *v return 0; } +int +zfsctl_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size) +{ + struct sfs_node *node = VTOSFS(vp); + uint64_t object = node->sn_id; + zfid_short_t *zfid = (zfid_short_t *)fidp; + int i; + + SFS_NODE_ASSERT(vp); + + if (*fh_size < SHORT_FID_LEN) { + *fh_size = SHORT_FID_LEN; + return SET_ERROR(E2BIG); + } + *fh_size = SHORT_FID_LEN; + + zfid->zf_len = SHORT_FID_LEN; + for (i = 0; i < sizeof(zfid->zf_object); i++) + zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); + + /* .zfs nodes always have a generation number of 0 */ + for (i = 0; i < sizeof(zfid->zf_gen); i++) + zfid->zf_gen[i] = 0; + + return 0; +} + /* * Return the ".zfs" vnode. */ Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.21 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20 Mon Mar 18 09:20:58 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Mon Mar 18 09:22:14 2019 @@ -136,7 +136,8 @@ static int zfs_umount(vfs_t *vfsp, int f static int zfs_root(vfs_t *vfsp, int flags, vnode_t **vpp); static int zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp); static int zfs_statvfs(vfs_t *vfsp, struct statvfs *statp); -static int zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp); +static int zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size); +static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp); static int zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp); static int zfs_sync(vfs_t *vfsp, int waitfor); static int zfs_netbsd_sync(vfs_t *vfsp, int waitfor, cred_t *cr); @@ -172,8 +173,8 @@ struct vfsops zfs_vfsops = { .vfs_renamelock_enter = genfs_renamelock_enter, .vfs_renamelock_exit = genfs_renamelock_exit, .vfs_reinit = (void *)nullop, - .vfs_vptofh = (void *)eopnotsupp, - .vfs_fhtovp = (void *)eopnotsupp, + .vfs_vptofh = zfs_netbsd_vptofh, + .vfs_fhtovp = zfs_netbsd_fhtovp, .vfs_quotactl = (void *)eopnotsupp, .vfs_extattrctl = (void *)eopnotsupp, .vfs_suspendctl = genfs_suspendctl, @@ -254,6 +255,171 @@ zfs_netbsd_root(vfs_t *vfsp, vnode_t **v return zfs_root(vfsp, LK_EXCLUSIVE | LK_RETRY, vpp); } +static int +zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size) +{ + znode_t *zp; + zfsvfs_t *zfsvfs; + uint32_t gen; + uint64_t gen64; + uint64_t object; + zfid_short_t *zfid; + int size, i, error; + + if (zfsctl_is_node(vp)) + return zfsctl_vptofh(vp, fidp, fh_size); + + zp = VTOZ(vp); + zfsvfs = zp->z_zfsvfs; + object = zp->z_id; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), + , sizeof (uint64_t))) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + + gen = (uint32_t)gen64; + + size = (zfsvfs->z_parent != zfsvfs) ? LONG_FID_LEN : SHORT_FID_LEN; + + if (*fh_size < size) { + ZFS_EXIT(zfsvfs); + *fh_size = size; + return SET_ERROR(E2BIG); + } + *fh_size = size; + + zfid = (zfid_short_t *)fidp; + + zfid->zf_len = size; + + for (i = 0; i < sizeof (zfid->zf_object); i++) + zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); + + /* Must have a non-zero generation number to distinguish from .zfs */ + if (gen == 0) + gen = 1; + for (i = 0; i < sizeof (zfid->zf_gen); i++) + zfid->zf_gen[i] = (uint8_t)(gen >> (8 * i)); + + if (size == LONG_FID_LEN) { + uint64_t objsetid = dmu_objset_id(zfsvfs->z_os); + zfid_long_t *zlfid; + + zlfid = (zfid_long_t *)fidp; + + for (i = 0; i < sizeof (zlfid->zf_setid); i++) + zlfid->zf_setid[i] = (uint8_t)(objsetid >> (8 * i)); + + /* XXX - this should be the generation
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Mar 18 09:21:31 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c Log Message: Implement zfsctl_lookup_objset() to look up "zfsvfs" of an mounted snapshot. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.8 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7 Mon Mar 18 09:20:58 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Mon Mar 18 09:21:31 2019 @@ -1946,8 +1946,23 @@ zfsctl_destroy(zfsvfs_t *zfsvfs) int zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp) { + struct sfs_node_key key = { + .parent_id = ZFSCTL_INO_SNAPDIR, + .id = objsetid + }; + vnode_t *vp; + int error; - return EINVAL; + *zfsvfsp = NULL; + error = vcache_get(vfsp, , sizeof(key), ); + if (error == 0) { + if (vp->v_mountedhere) + *zfsvfsp = vp->v_mountedhere->mnt_data; + vrele(vp); + } + if (*zfsvfsp == NULL) + return SET_ERROR(EINVAL); + return 0; } int
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Mar 18 09:20:58 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c zfs_vfsops.c zfs_vnops.c Log Message: Set "mnt_stat.f_fsid" and "mnt_stat.f_fsidx" from the objset guid like FreeBSD and Illumos do. Use "f_fsid" for "va_fsid" and cheat NFSD to export snapshots under ".zfs" by setting these snaphots "f_fsidx" to the parents "f_fsidx". To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c cvs rdiff -u -r1.19 -r1.20 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.46 -r1.47 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.7 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.6 Wed Feb 20 10:08:37 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Mon Mar 18 09:20:58 2019 @@ -1335,7 +1335,9 @@ sfs_snapshot_mount(vnode_t *vp, const ch if (error) goto out; - vfs_getnewfsid(vfsp); + /* Set f_fsidx from parent to cheat NFSD. */ + vfsp->mnt_stat.f_fsidx = vp->v_vfsp->mnt_stat.f_fsidx; + strlcpy(vfsp->mnt_stat.f_mntfromname, osname, sizeof(vfsp->mnt_stat.f_mntfromname)); set_statvfs_info(path, UIO_SYSSPACE, vfsp->mnt_stat.f_mntfromname, @@ -1622,7 +1624,7 @@ sfs_getattr(void *v) vap->va_nlink = 2; vap->va_uid = 0; vap->va_gid = 0; - vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsidx.__fsid_val[0]; + vap->va_fsid = vp->v_vfsp->mnt_stat.f_fsid; vap->va_fileid = node->sn_id; vap->va_size = 0; vap->va_blocksize = 0; Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.20 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.19 Tue Feb 5 09:54:36 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Mon Mar 18 09:20:58 2019 @@ -1374,7 +1374,9 @@ zfs_domount(vfs_t *vfsp, char *osname) #endif #ifdef __NetBSD__ vfsp->mnt_stat.f_fsidx.__fsid_val[0] = fsid_guid; - vfsp->mnt_stat.f_fsidx.__fsid_val[1] = fsid_guid >> 32; + vfsp->mnt_stat.f_fsidx.__fsid_val[1] = ((fsid_guid>>32) << 8) | + makefstype(vfsp->mnt_op->vfs_name) & 0xFF; + vfsp->mnt_stat.f_fsid = fsid_guid; #endif /* @@ -1962,8 +1964,6 @@ zfs_mount(vfs_t *vfsp, const char *path, #endif #ifdef __NetBSD__ - vfs_getnewfsid(vfsp); - /* setup zfs mount info */ strlcpy(vfsp->mnt_stat.f_mntfromname, osname, sizeof(vfsp->mnt_stat.f_mntfromname)); @@ -2036,7 +2036,8 @@ zfs_statvfs(vfs_t *vfsp, struct statvfs statp->f_fsid = d32; #endif #ifdef __NetBSD__ - statp->f_fsid = vfsp->mnt_stat.f_fsidx.__fsid_val[0]; + statp->f_fsid = vfsp->mnt_stat.f_fsid; + statp->f_fsidx = vfsp->mnt_stat.f_fsidx; #endif /* Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.47 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 Mon Mar 18 09:20:15 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Mon Mar 18 09:20:58 2019 @@ -3073,7 +3073,7 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i vap->va_nodeid = zp->z_id; #endif #ifdef __NetBSD__ - vap->va_fsid = vp->v_mount->mnt_stat.f_fsidx.__fsid_val[0]; + vap->va_fsid = vp->v_mount->mnt_stat.f_fsid; vap->va_nodeid = zp->z_id; /* * If we are a snapshot mounted under .zfs, return
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Mar 18 09:20:15 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: As zfs_netbsd_getpages() ignores "a_count" and processes exactly one page return an error if "a_count != 1". To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.46 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.46 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45 Mon Mar 18 09:19:39 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Mon Mar 18 09:20:15 2019 @@ -5844,6 +5844,9 @@ zfs_netbsd_getpages(void *v) if (async) { return 0; } + if (*ap->a_count != 1) { + return EBUSY; + } ZFS_ENTER(zfsvfs); ZFS_VERIFY_ZP(zp);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Mon Mar 18 09:19:39 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Change zfs_readdir() to use malloc() instead of kmem_alloc() to allocate cookies. Required by protocol, caller uses free(). To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.44 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.45 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.44 Tue Feb 5 09:54:36 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Mon Mar 18 09:19:39 2019 @@ -85,6 +85,7 @@ #include #include #include +#include uint_t zfs_putpage_key; #endif @@ -2754,7 +2755,7 @@ zfs_readdir(vnode_t *vp, uio_t *uio, cre #endif #ifdef __NetBSD__ ncooks = uio->uio_resid / _DIRENT_MINSIZE(odp); - cooks = kmem_alloc(ncooks * sizeof(off_t), KM_SLEEP); + cooks = malloc(ncooks * sizeof(off_t), M_TEMP, M_WAITOK); #endif *cookies = cooks; *ncookies = ncooks;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Fri Feb 22 09:01:32 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_replay.c Log Message: Always set "cn_namelen" in addition to "cn_nameptr". Fix vnode locking for REMOVE, RMDIR and RENAME. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.12 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c Fri Feb 22 09:01:32 2019 @@ -501,6 +501,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)start; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_CREATE(ZTOV(dzp), , , _vattr /*,vflg*/); break; case TX_MKDIR_ATTR: @@ -519,6 +522,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)(lr + 1); cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_MKDIR(ZTOV(dzp), , , _vattr /*,vflg*/); break; case TX_MKXATTR: @@ -528,6 +534,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)(lr + 1); link = name + strlen(name) + 1; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_SYMLINK(ZTOV(dzp), , , _vattr, link /*,vflg*/); break; default: @@ -585,7 +594,7 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r goto fail; } #ifdef __NetBSD__ - VOP_UNLOCK(vp, 0); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); #endif switch ((int)lr->lr_common.lrc_txtype) { @@ -596,11 +605,12 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r error = VOP_RMDIR(ZTOV(dzp), vp, /*,vflg*/); break; default: +#ifdef __NetBSD__ + vput(vp); +#endif error = SET_ERROR(ENOTSUP); } -#ifdef __NetBSD__ - vrele(vp); -#else +#ifndef __NetBSD__ vput(vp); #endif VOP_UNLOCK(ZTOV(dzp), 0); @@ -635,6 +645,9 @@ zfs_replay_link(zfsvfs_t *zfsvfs, lr_lin vflg |= FIGNORECASE; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif cn.cn_cred = kcred; #ifndef __NetBSD__ cn.cn_thread = curthread; @@ -698,7 +711,9 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r VOP_UNLOCK(ZTOV(sdzp), 0); if (error != 0) goto fail; +#ifndef __NetBSD__ VOP_UNLOCK(svp, 0); +#endif tcn.cn_nameptr = tname; tcn.cn_namelen = strlen(tname); @@ -718,7 +733,8 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r goto fail; } #ifdef __NetBSD__ - vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY); + if (tvp != NULL) + vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY); #endif error = VOP_RENAME(ZTOV(sdzp), svp, , ZTOV(tdzp), tvp, /*,vflg*/);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Feb 5 09:55:48 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c Log Message: Implement the ZFS control directory ".zfs" and its subdirectory 'snapshot". Automatically mount snapshots on access of ".zfs/snapshot/". To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.4 Tue Feb 5 09:54:36 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Tue Feb 5 09:55:48 2019 @@ -1261,14 +1261,584 @@ zfsctl_umount_snapshots(vfs_t *vfsp, int #ifdef __NetBSD__ +#include +#include #include +#include #include #include +#include +#include + +struct zfsctl_root { + timestruc_t zc_cmtime; +}; + +struct sfs_node_key { + uint64_t parent_id; + uint64_t id; +}; +struct sfs_node { + struct sfs_node_key sn_key; +#define sn_parent_id sn_key.parent_id +#define sn_id sn_key.id + lwp_t *sn_mounting; +}; + +#define ZFS_SNAPDIR_NAME "snapshot" + +#define VTOSFS(vp) ((struct sfs_node *)((vp)->v_data)) + +#define SFS_NODE_ASSERT(vp) \ + do { \ + struct sfs_node *np = VTOSFS(vp); \ + ASSERT((vp)->v_op == zfs_sfsop_p); \ + ASSERT((vp)->v_type == VDIR); \ + } while (/*CONSTCOND*/ 0) static int (**zfs_sfsop_p)(void *); -static const struct vnodeopv_entry_desc zfs_sfsop_entries[] = { +/* + * Mount a snapshot. Cannot use do_sys_umount() as it + * doesn't allow its "path" argument from SYSSPACE. + */ +static int +sfs_snapshot_mount(vnode_t *vp, const char *snapname) +{ + struct sfs_node *node = VTOSFS(vp); + zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; + vfs_t *vfsp; + char *path, *osname; + int error; + extern int zfs_domount(vfs_t *, char *); + + path = PNBUF_GET(); + osname = PNBUF_GET(); + + dmu_objset_name(zfsvfs->z_os, path); + snprintf(osname, MAXPATHLEN, "%s@%s", path, snapname); + snprintf(path, MAXPATHLEN, + "%s/" ZFS_CTLDIR_NAME "/" ZFS_SNAPDIR_NAME "/%s", + vp->v_vfsp->mnt_stat.f_mntonname, snapname); + + vfsp = vfs_mountalloc(vp->v_vfsp->mnt_op, vp); + if (vfsp == NULL) { + error = ENOMEM; + goto out; + } + vfsp->mnt_op->vfs_refcount++; + vfsp->mnt_stat.f_owner = 0; + vfsp->mnt_flag = MNT_RDONLY | MNT_NOSUID | MNT_IGNORE; + + mutex_enter(>mnt_updating); + + error = zfs_domount(vfsp, osname); + if (error) + goto out; + + vfs_getnewfsid(vfsp); + strlcpy(vfsp->mnt_stat.f_mntfromname, osname, + sizeof(vfsp->mnt_stat.f_mntfromname)); + set_statvfs_info(path, UIO_SYSSPACE, vfsp->mnt_stat.f_mntfromname, + UIO_SYSSPACE, vfsp->mnt_op->vfs_name, vfsp, curlwp); + + vfsp->mnt_lower = vp->v_vfsp; + + mountlist_append(vfsp); + vref(vp); + vp->v_mountedhere = vfsp; + + mutex_exit(>mnt_updating); + (void) VFS_STATVFS(vfsp, >mnt_stat); + +out:; + if (error && vfsp) { + mutex_exit(>mnt_updating); + fstrans_unmount(vfsp); + vfs_rele(vfsp); + } + PNBUF_PUT(osname); + PNBUF_PUT(path); + + return error; +} + +static int +sfs_lookup_snapshot(vnode_t *dvp, struct componentname *cnp, vnode_t **vpp) +{ + zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data; + vnode_t *vp; + struct sfs_node *node; + struct sfs_node_key key; + char snapname[ZFS_MAX_DATASET_NAME_LEN]; + int error; + + /* Retrieve the snapshot object id and the to be mounted on vnode. */ + if (cnp->cn_namelen >= sizeof(snapname)) + return ENOENT; + + strlcpy(snapname, cnp->cn_nameptr, cnp->cn_namelen + 1); + error = dsl_dataset_snap_lookup( dmu_objset_ds(zfsvfs->z_os), + snapname, ); + if (error) + return error; + key.parent_id = ZFSCTL_INO_SNAPDIR; + error = vcache_get(zfsvfs->z_vfs, , sizeof(key), vpp); + if (error) + return error; + + /* Handle case where the vnode is currently mounting. */ + vp = *vpp; + mutex_enter(vp->v_interlock); + node = VTOSFS(vp); + if (node->sn_mounting) { + if (node->sn_mounting == curlwp) + error = 0; + else + error = ERESTART; + mutex_exit(vp->v_interlock); + if (error) + yield(); + return error; + } + + /* If not yet mounted mount the snapshot. */ + if (vp->v_mountedhere == NULL) { + ASSERT(node->sn_mounting == NULL); + node->sn_mounting = curlwp; + mutex_exit(vp->v_interlock); + + VOP_UNLOCK(dvp, 0); + error = sfs_snapshot_mount(vp, snapname); + if (vn_lock(dvp, LK_EXCLUSIVE) != 0) { + vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); + error = ENOENT; + } + + mutex_enter(vp->v_interlock); + if ((node = VTOSFS(vp))) + node->sn_mounting = NULL; + mutex_exit(vp->v_interlock); + + if (error) { + vrele(vp); + *vpp = NULL; + return error; + } + } else + mutex_exit(vp->v_interlock); + + /* Return the mounted root
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Feb 5 09:50:18 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: zfs_netbsd_reclaim(): validate "z_log" before zil_commit(). To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.43 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42 Sat Jan 5 09:20:29 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Tue Feb 5 09:50:18 2019 @@ -5680,7 +5680,8 @@ zfs_netbsd_reclaim(void *v) } } - zil_commit(zfsvfs->z_log, zp->z_id); + if (zfsvfs->z_log) + zil_commit(zfsvfs->z_log, zp->z_id); if (zp->z_sa_hdl == NULL) zfs_znode_free(zp);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Sat Jan 12 10:43:33 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c zfs_onexit.c Log Message: The ZFS onexit routines expect opening ZFS_DEV with O_EXCL to return a cloned device with an unique minor number. Use fd_clone() on this condition to return a cloned device descriptor. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.15 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14 Tue Jan 1 10:08:01 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Sat Jan 12 10:43:33 2019 @@ -6205,6 +6205,8 @@ zfs_ctldev_init(dev_t *devp) #ifdef __FreeBSD__ devfs_set_cdevpriv((void *)(uintptr_t)minor, zfsdev_close); +#else + *devp = makedev(major(*devp), minor); #endif zs = ddi_get_soft_state(zfsdev_state, minor); @@ -6973,11 +6975,52 @@ MODULE_DEPEND(zfsctrl, acl_nfs4, 1, 1, 1 MODULE(MODULE_CLASS_DRIVER, zfs, "solaris"); +static const struct fileops zfs_fileops; + +static int +nb_zfsdev_fioctl(struct file *fp, u_long cmd, void *argp) +{ + dev_t dev = (dev_t)(uintptr_t)fp->f_data; + int rval; + + return zfsdev_ioctl(dev, cmd, (intptr_t)argp, fp->f_flag, + kauth_cred_get(), ); +} + +static int +nb_zfsdev_fclose(struct file *fp) +{ + dev_t dev = (dev_t)(uintptr_t)fp->f_data; + int error; + + return zfsdev_close(dev, fp->f_flag, OTYPCHR, fp->f_cred); +} + static int nb_zfsdev_copen(dev_t dev, int flag, int mode, lwp_t *l) { + const bool must_clone = (getminor(dev) == 0 && (flag & FEXCL) != 0); + struct file *fp; + int error, fd; + + if (must_clone) { + error = fd_allocfile(, ); + if (error) + return error; + } + + error = zfsdev_open(, flag, OTYPCHR, kauth_cred_get()); - return zfsdev_open(, flag, OTYPCHR, kauth_cred_get()); + if (must_clone) { + if (error) { + fd_abort(curproc, fp, fd); + return error; + } + return fd_clone(fp, fd, flag, _fileops, + (void *)(uintptr_t)dev); + } + + return error; } static int @@ -7031,6 +7074,19 @@ nb_zvol_strategy(struct buf *bp) (void) zvol_strategy(bp); } +static const struct fileops zfs_fileops = { + .fo_name = "zfs", + .fo_read = fbadop_read, + .fo_write = fbadop_write, + .fo_ioctl = nb_zfsdev_fioctl, + .fo_fcntl = fnullop_fcntl, + .fo_poll = fnullop_poll, + .fo_stat = fbadop_stat, + .fo_close = nb_zfsdev_fclose, + .fo_kqfilter = fnullop_kqfilter, + .fo_restart = fnullop_restart, +}; + const struct bdevsw zfs_bdevsw = { .d_open = nb_zfsdev_bopen, .d_close = nb_zfsdev_bclose, Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_onexit.c Sat Jan 12 10:43:33 2019 @@ -146,7 +146,8 @@ zfs_onexit_fd_hold(int fd, minor_t *mino if (fp == NULL) return (SET_ERROR(EBADF)); - *minorp = getminor(fp->f_vnode->v_rdev); + ASSERT(strcmp(fp->f_ops->fo_name, "zfs") == 0); + *minorp = minor((dev_t)(uintptr_t)fp->f_data); #endif return (zfs_onexit_minor_to_state(*minorp, ));
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Sat Jan 12 10:42:09 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_send.c Log Message: Need FOF_UPDATE_OFFSET to update the offset on plain files. Running "zfs send" to plain files no longer writes garbage. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_send.c Sat Jan 12 10:42:09 2019 @@ -72,6 +72,8 @@ static int fo_write(struct file *fp, struct uio *uio, cred_t *cred, int flags, kthread_t *thr) { + if (fp->f_type == DTYPE_VNODE) + flags |= FOF_UPDATE_OFFSET; return (*fp->f_ops->fo_write)(fp, >f_offset, uio, cred, flags); } @@ -79,6 +81,8 @@ static int fo_read(struct file *fp, struct uio *uio, cred_t *cred, int flags, kthread_t *thr) { + if (fp->f_type == DTYPE_VNODE) + flags |= FOF_UPDATE_OFFSET; return (*fp->f_ops->fo_read)(fp, >f_offset, uio, cred, flags); } #endif
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Sat Jan 5 09:20:29 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Even though zfs_netbsd_putpages() cannot use ZFS_ENTER() it has to respect the teardown lock. Enter z_teardown_lock as reader and ZFS_EXIT(). Instead of ZFS_VERIFY_ZP() return without writing and without error from zfs_putapage() if "z_sa_hdl == NULL". To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.42 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41 Tue Jan 1 10:09:26 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sat Jan 5 09:20:29 2019 @@ -5863,6 +5863,11 @@ zfs_putapage(vnode_t *vp, page_t **pp, i struct uvm_object *uobj = >v_uobj; kmutex_t *mtx = uobj->vmobjlock; + if (zp->z_sa_hdl == NULL) { + err = 0; + goto out_unbusy; + } + off = pp[0]->offset; len = count * PAGESIZE; KASSERT(off + len <= round_page(zp->z_size)); @@ -5914,6 +5919,7 @@ zfs_putapage(vnode_t *vp, page_t **pp, i } dmu_tx_commit(tx); +out_unbusy: mutex_enter(mtx); mutex_enter(_pageqlock); uvm_page_unbusy(pp, count); @@ -5994,6 +6000,12 @@ zfs_netbsd_putpages(void *v) return 0; } } + /* + * Cannot use ZFS_ENTER() here as it returns with error + * if z_unmounted. The next statement is equivalent. + */ + rrm_enter(>z_teardown_lock, RW_READER, FTAG); + rl = zfs_range_lock(zp, offlo, len, RL_WRITER); mutex_enter(vp->v_interlock); tsd_set(zfs_putpage_key, ); @@ -6011,6 +6023,7 @@ zfs_netbsd_putpages(void *v) if (cleaned) if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) zil_commit(zfsvfs->z_log, zp->z_id); + ZFS_EXIT(zfsvfs); fstrans_done(vp->v_mount); } return error;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Jan 1 10:08:42 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: As already noted in XXX comment do a zil_commit() on reclaim. To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39 Thu Dec 13 10:20:51 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Tue Jan 1 10:08:42 2019 @@ -5663,11 +5663,6 @@ zfs_netbsd_reclaim(void *v) /* * Process a deferred atime update. */ - /* - * XXXNETBSD I don't think this actually works. - * We are dirtying the znode again after the vcache layer cleaned it, - * so we would need to zil_commit() again here. - */ if (zp->z_atime_dirty && zp->z_unlinked == 0) { dmu_tx_t *tx = dmu_tx_create(zfsvfs->z_os); @@ -5684,6 +5679,8 @@ zfs_netbsd_reclaim(void *v) } } + zil_commit(zfsvfs->z_log, zp->z_id); + if (zp->z_sa_hdl == NULL) zfs_znode_free(zp); else
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Jan 1 10:09:27 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Cannot use ZFS_ENTER() / ZFS_EXIT() as zfs_netbsd_putpages() is used during vnode reclaim. Add missing protection with fstrans. To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.41 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.40 Tue Jan 1 10:08:42 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Tue Jan 1 10:09:26 2019 @@ -84,6 +84,7 @@ #include #include #include +#include uint_t zfs_putpage_key; #endif @@ -5972,9 +5973,6 @@ zfs_netbsd_putpages(void *v) bool async = (flags & PGO_SYNCIO) == 0; bool cleaning = (flags & PGO_CLEANIT) != 0; - ZFS_ENTER(zfsvfs); - ZFS_VERIFY_ZP(zp); - if (cleaning) { ASSERT((offlo & PAGE_MASK) == 0 && (offhi & PAGE_MASK) == 0); ASSERT(offlo < offhi || offhi == 0); @@ -5983,25 +5981,38 @@ zfs_netbsd_putpages(void *v) else len = offhi - offlo; mutex_exit(vp->v_interlock); + if (curlwp == uvm.pagedaemon_lwp) { + error = fstrans_start_nowait(vp->v_mount); + if (error) +return error; + } else { + vfs_t *mp = vp->v_mount; + fstrans_start(mp); + if (vp->v_mount != mp) { +fstrans_done(mp); +ASSERT(!vn_has_cached_data(vp)); +return 0; + } + } rl = zfs_range_lock(zp, offlo, len, RL_WRITER); mutex_enter(vp->v_interlock); tsd_set(zfs_putpage_key, ); } error = genfs_putpages(v); - if (rl) { + if (cleaning) { tsd_set(zfs_putpage_key, NULL); zfs_range_unlock(rl); - } - /* - * Only zil_commit() if we cleaned something. - * This avoids deadlock if we're called from zfs_netbsd_setsize(). - */ + /* + * Only zil_commit() if we cleaned something. This avoids + * deadlock if we're called from zfs_netbsd_setsize(). + */ - if (cleaned) - if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) - zil_commit(zfsvfs->z_log, zp->z_id); - ZFS_EXIT(zfsvfs); + if (cleaned) + if (!async || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zfsvfs->z_log, zp->z_id); + fstrans_done(vp->v_mount); + } return error; }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Jan 1 10:08:01 UTC 2019 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c zfs_vfsops.c zfs_znode.c src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_znode.h Log Message: Cannot hold zfs object across call to vcache_get() as it might deadlock with another reclaim. Add vfs operation zfs_newvnode() to create a new zfs node and hold the zfs object in zfs_loadvnode() and zfs_newvnode() only. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c cvs rdiff -u -r1.17 -r1.18 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.23 -r1.24 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c cvs rdiff -u -r1.8 -r1.9 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.14 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13 Mon Aug 20 06:47:16 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Tue Jan 1 10:08:01 2019 @@ -7120,7 +7120,6 @@ zfs_modcmd(modcmd_t cmd, void *arg) uint64_t availrmem; extern struct vfsops zfs_vfsops; - extern uint_t zfs_loadvnode_key; extern uint_t zfs_putpage_key; switch (cmd) { @@ -7144,7 +7143,6 @@ zfs_modcmd(modcmd_t cmd, void *arg) tsd_create(_fsyncer_key, NULL); tsd_create(_tsd_key, rrw_tsd_destroy); tsd_create(_allow_log_key, zfs_allow_log_destroy); - tsd_create(_loadvnode_key, zfs_loadvnode_destroy); tsd_create(_putpage_key, NULL); spa_init(FREAD | FWRITE); @@ -7179,7 +7177,6 @@ attacherr: spa_fini(); tsd_destroy(_putpage_key); - tsd_destroy(_loadvnode_key); tsd_destroy(_fsyncer_key); tsd_destroy(_tsd_key); tsd_destroy(_allow_log_key); Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.18 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17 Sun Sep 16 06:09:01 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Tue Jan 1 10:08:01 2019 @@ -163,6 +163,7 @@ struct vfsops zfs_vfsops = { .vfs_sync = zfs_netbsd_sync, .vfs_vget = zfs_vget, .vfs_loadvnode = zfs_loadvnode, + .vfs_newvnode = zfs_newvnode, .vfs_init = zfs_init, .vfs_done = zfs_fini, .vfs_start = (void *)nullop, Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.24 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23 Thu Dec 6 09:58:52 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Tue Jan 1 10:08:01 2019 @@ -60,15 +60,6 @@ extern int (**zfs_vnodeop_p)(void *); extern int (**zfs_fifoop_p)(void *); extern int (**zfs_specop_p)(void *); -struct zfs_loadvnode_args { - dmu_buf_t *db; - int blksz; - dmu_object_type_t obj_type; - void *sa_hdl; -}; - -uint_t zfs_loadvnode_key; - #endif #endif /* _KERNEL */ @@ -621,6 +612,7 @@ zfs_vnode_forget(vnode_t *vp) vgone(vp); vput(vp); } +#endif /* __FreeBSD__ */ /* * Construct a new znode/vnode and intialize. @@ -630,11 +622,18 @@ zfs_vnode_forget(vnode_t *vp) * return the znode */ static znode_t * +#ifdef __NetBSD__ +zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz, +dmu_object_type_t obj_type, sa_handle_t *hdl, vnode_t *vp) +#else zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz, dmu_object_type_t obj_type, sa_handle_t *hdl) +#endif { znode_t *zp; +#ifndef __NetBSD__ vnode_t *vp; +#endif uint64_t mode; uint64_t parent; sa_bulk_attr_t bulk[9]; @@ -643,6 +642,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu zp = kmem_cache_alloc(znode_cache, KM_SLEEP); +#ifndef __NetBSD__ KASSERT(curthread->td_vp_reserv > 0, ("zfs_znode_alloc: getnewvnode without any vnodes reserved")); error = getnewvnode("zfs", zfsvfs->z_parent->z_vfs, _vnodeops, ); @@ -650,6 +650,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu kmem_cache_free(znode_cache, zp); return (NULL); } +#endif zp->z_vnode = vp; vp->v_data = zp; @@ -669,6 +670,12 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu zp->z_seq = 0x7A4653; zp->z_sync_cnt = 0; +#ifdef __NetBSD__ + vp->v_op = zfs_vnodeop_p; + vp->v_tag = VT_ZFS; + zp->z_lockf = NULL; +#endif + vp = ZTOV(zp); zfs_znode_sa_init(zfsvfs, zp, db, obj_type, hdl); @@ -692,7 +699,9 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu if (sa_bulk_lookup(zp->z_sa_hdl, bulk,
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Dec 13 10:20:51 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Drop v_interlock for zfs_range_lock(), another thread might hold part of this range and wait for v_interlock. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.39 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38 Thu Dec 13 10:20:20 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Dec 13 10:20:51 2018 @@ -5985,7 +5985,9 @@ zfs_netbsd_putpages(void *v) len = UINT64_MAX; else len = offhi - offlo; + mutex_exit(vp->v_interlock); rl = zfs_range_lock(zp, offlo, len, RL_WRITER); + mutex_enter(vp->v_interlock); tsd_set(zfs_putpage_key, ); } error = genfs_putpages(v);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Dec 13 10:20:20 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Operation zfs_range_lock() needs range as (offset,length), not as (low,high). To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.38 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37 Thu Dec 6 10:00:40 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Dec 13 10:20:20 2018 @@ -5968,6 +5968,7 @@ zfs_netbsd_putpages(void *v) znode_t *zp = VTOZ(vp); zfsvfs_t *zfsvfs = zp->z_zfsvfs; rl_t *rl = NULL; + uint64_t len; int error; bool cleaned = false; @@ -5978,7 +5979,13 @@ zfs_netbsd_putpages(void *v) ZFS_VERIFY_ZP(zp); if (cleaning) { - rl = zfs_range_lock(zp, offlo, offhi, RL_WRITER); + ASSERT((offlo & PAGE_MASK) == 0 && (offhi & PAGE_MASK) == 0); + ASSERT(offlo < offhi || offhi == 0); + if (offhi == 0) + len = UINT64_MAX; + else + len = offhi - offlo; + rl = zfs_range_lock(zp, offlo, len, RL_WRITER); tsd_set(zfs_putpage_key, ); } error = genfs_putpages(v);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Dec 6 10:00:40 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: We have component names as counted strings (cn_nameptr, cn_namelen) but ZFS expects a null-terminated name. Always create a copy with PNBUF_GET()/strlcpy()/PNBUF_PUT(). For LOOKUP use a small buffer on stack and allocate/free compomnent names longer than 30 chars. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.36 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.37 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.36 Fri Nov 30 09:53:40 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Dec 6 10:00:40 2018 @@ -3847,8 +3847,13 @@ zfs_rename_relock(struct vnode *sdvp, st zfsvfs_t *zfsvfs; struct vnode *nvp, *svp, *tvp; znode_t *sdzp, *tdzp, *szp, *tzp; +#ifdef __FreeBSD__ const char *snm = scnp->cn_nameptr; const char *tnm = tcnp->cn_nameptr; +#endif +#ifdef __NetBSD__ + char *snm, *tnm; +#endif int error; #ifdef __FreeBSD__ @@ -3918,7 +3923,15 @@ relock: * Re-resolve svp to be certain it still exists and fetch the * correct vnode. */ +#ifdef __NetBSD__ + /* ZFS wants a null-terminated name. */ + snm = PNBUF_GET(); + strlcpy(snm, scnp->cn_nameptr, scnp->cn_namelen + 1); +#endif error = zfs_dirent_lookup(sdzp, snm, , ZEXISTS); +#ifdef __NetBSD__ + PNBUF_PUT(snm); +#endif if (error != 0) { /* Source entry invalid or not there. */ ZFS_EXIT(zfsvfs); @@ -3937,7 +3950,15 @@ relock: /* * Re-resolve tvp, if it disappeared we just carry on. */ +#ifdef __NetBSD__ + /* ZFS wants a null-terminated name. */ + tnm = PNBUF_GET(); + strlcpy(tnm, tcnp->cn_nameptr, tcnp->cn_namelen + 1); +#endif error = zfs_dirent_lookup(tdzp, tnm, , 0); +#ifdef __NetBSD__ + PNBUF_PUT(tnm); +#endif if (error != 0) { ZFS_EXIT(zfsvfs); VOP_UNLOCK(sdvp, 0); @@ -4138,8 +4159,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp znode_t *sdzp, *tdzp, *szp, *tzp; zilog_t *zilog = NULL; dmu_tx_t *tx; +#ifdef __FreeBSD__ char *snm = __UNCONST(scnp->cn_nameptr); char *tnm = __UNCONST(tcnp->cn_nameptr); +#endif +#ifdef __NetBSD__ + char *snm, *tnm; +#endif int error = 0; /* Reject renames across filesystems. */ @@ -4167,6 +4193,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp sdzp = VTOZ(sdvp); zfsvfs = tdzp->z_zfsvfs; zilog = zfsvfs->z_log; +#ifdef __NetBSD__ + /* ZFS wants a null-terminated name. */ + snm = PNBUF_GET(); + strlcpy(snm, scnp->cn_nameptr, scnp->cn_namelen + 1); + tnm = PNBUF_GET(); + strlcpy(tnm, tcnp->cn_nameptr, tcnp->cn_namelen + 1); +#endif /* * After we re-enter ZFS_ENTER() we will have to revalidate all @@ -4388,6 +4421,10 @@ unlockout: /* all 4 vnodes are locked, VOP_UNLOCK(*svpp, 0); VOP_UNLOCK(sdvp, 0); +#ifdef __NetBSD__ + PNBUF_PUT(snm); + PNBUF_PUT(tnm); +#endif if (*tvpp != sdvp && *tvpp != *svpp) if (*tvpp != NULL) @@ -5060,12 +5097,11 @@ zfs_netbsd_lookup(void *v) struct vnode *dvp = ap->a_dvp; struct vnode **vpp = ap->a_vpp; struct componentname *cnp = ap->a_cnp; - char nm[NAME_MAX + 1]; + char *nm, short_nm[31]; int error; int iswhiteout; KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); - KASSERT(cnp->cn_namelen < sizeof nm); *vpp = NULL; @@ -5095,11 +5131,19 @@ zfs_netbsd_lookup(void *v) * zfs_lookup wants a null-terminated component name, but namei * gives us a pointer into the full pathname. */ + ASSERT(cnp->cn_namelen < PATH_MAX - 1); + if (cnp->cn_namelen + 1 > sizeof(short_nm)) + nm = PNBUF_GET(); + else + nm = short_nm; (void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1); error = zfs_lookup(dvp, nm, vpp, NULL, 0, NULL, cnp->cn_cred, NULL, NULL, NULL); + if (nm != short_nm) + PNBUF_PUT(nm); + /* * Translate errors to match our namei insanity. Also, if the * caller wants to create an entry here, it's apparently our @@ -5174,6 +5218,7 @@ zfs_netbsd_create(void *v) struct vnode **vpp = ap->a_vpp; struct componentname *cnp = ap->a_cnp; struct vattr *vap = ap->a_vap; + char *nm; int mode; int error; @@ -5182,9 +5227,14 @@ zfs_netbsd_create(void *v) vattr_init_mask(vap); mode = vap->va_mode & ALLPERMS; + /* ZFS wants a null-terminated name. */ + nm = PNBUF_GET(); + (void)strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1); + /* XXX !EXCL is wrong here... */ - error = zfs_create(dvp, __UNCONST(cnp->cn_nameptr), vap, !EXCL, mode, - vpp, cnp->cn_cred, NULL); + error = zfs_create(dvp, nm, vap, !EXCL, mode, vpp, cnp->cn_cred, NULL); + + PNBUF_PUT(nm); KASSERT((error == 0) == (*vpp
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Thu Dec 6 09:58:52 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: Add missing ZFS_OBJ_HOLD_ENTER() / ZFS_OBJ_HOLD_EXIT() to zfs_zget_cleaner(). To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.23 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22 Wed Nov 28 09:55:36 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Thu Dec 6 09:58:52 2018 @@ -1188,8 +1188,11 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 znode_t *zp; int err; + ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num); + err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, ); if (err) { + ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); return (SET_ERROR(err)); } @@ -1199,12 +1202,15 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 (doi.doi_bonus_type == DMU_OT_ZNODE && doi.doi_bonus_size < sizeof (znode_phys_t { sa_buf_rele(db, NULL); + ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); return (SET_ERROR(EINVAL)); } hdl = dmu_buf_get_user(db); - KASSERT(hdl != NULL); + ASSERT3P(hdl, !=, NULL); zp = sa_get_userdata(hdl); + ASSERT3U(zp->z_id, ==, obj_num); sa_buf_rele(db, NULL); + ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num); *zpp = zp; return (0); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Nov 28 09:57:16 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: We expect VOP_ACCESS() to return EACCESS as general error. Change zfs_netbsd_access() to translate the common EPERM to EACCES. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.32 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31 Wed Nov 28 09:56:40 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Nov 28 09:57:16 2018 @@ -5053,6 +5053,10 @@ zfs_netbsd_access(void *v) KASSERT(VOP_ISLOCKED(vp)); error = zfs_access(vp, zfs_mode, 0, cred, NULL); + /* We expect EACCES as common error. */ + if (error == EPERM) + error = EACCES; + return (error); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Nov 28 09:56:40 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Don't try to release a NULL vnode in zfs_netbsd_rename(). To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.31 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30 Wed Nov 28 09:56:09 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Nov 28 09:56:40 2018 @@ -5467,7 +5467,8 @@ zfs_netbsd_rename(void *v) VN_RELE(fdvp); VN_RELE(tdvp); - VN_RELE(fvp); + if (fvp != NULL) + VN_RELE(fvp); if (tvp != NULL) VN_RELE(tvp);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Nov 28 09:56:09 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Remove an early test for "source and target are equal" from zfs_rename() that broke BSD semantics. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.30 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29 Wed Nov 28 09:55:06 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Nov 28 09:56:09 2018 @@ -4191,11 +4191,13 @@ zfs_rename(vnode_t *sdvp, vnode_t **svpp goto unlockout; } +#ifndef __NetBSD__ /* If source and target are the same file, there is nothing to do. */ if ((*svpp) == (*tvpp)) { error = 0; goto unlockout; } +#endif if (((*svpp)->v_type == VDIR && (*svpp)->v_mountedhere != NULL) || ((*tvpp) != NULL && (*tvpp)->v_type == VDIR &&
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Nov 28 09:55:36 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: Add missing sa_buf_rele() into zfs_zget_cleaner(). To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.22 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21 Tue Jul 31 09:33:50 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Wed Nov 28 09:55:36 2018 @@ -1204,6 +1204,7 @@ zfs_zget_cleaner(zfsvfs_t *zfsvfs, uint6 hdl = dmu_buf_get_user(db); KASSERT(hdl != NULL); zp = sa_get_userdata(hdl); + sa_buf_rele(db, NULL); *zpp = zp; return (0); }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Wed Nov 28 09:55:06 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Always unbusy pages in zfs_putapage() after the data has been written into the DMU. Running fsx no longer hangs the kernel. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.29 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28 Thu Nov 15 04:55:49 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Nov 28 09:55:06 2018 @@ -5826,13 +5826,11 @@ zfs_putapage(vnode_t *vp, page_t **pp, i } dmu_tx_commit(tx); - if (async) { - mutex_enter(mtx); - mutex_enter(_pageqlock); - uvm_page_unbusy(pp, count); - mutex_exit(_pageqlock); - mutex_exit(mtx); - } + mutex_enter(mtx); + mutex_enter(_pageqlock); + uvm_page_unbusy(pp, count); + mutex_exit(_pageqlock); + mutex_exit(mtx); out: return (err);
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: riastradh Date: Thu Nov 15 04:55:17 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: dtrace.h Log Message: Omit conflicting definition that breaks build on aarch64. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.17 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.18 --- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.17 Mon Jun 4 21:36:03 2018 +++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Thu Nov 15 04:55:17 2018 @@ -2483,7 +2483,10 @@ extern void dtrace_helpers_destroy(proc_ #define ARG2_MASK 0x1f #define OFFSET_SHIFT 15 #define OFFSET_SIZE 7 +#if 0 +/* conflicts with lzjb.c */ #define OFFSET_MASK ((1 << OFFSET_SIZE) - 1) +#endif #define DTRACE_INVOP_PUSHM 1 #define DTRACE_INVOP_RET 2
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Thu Nov 15 04:55:49 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c Log Message: Need for mm_md_direct_mapped_phys. It turns out this code always sees __HAVE_MM_MD_DIRECT_MAPPED_PHYS as disabled on amd64, for reasons that I shall address forthwith, but it is enabled on aarch64 and so the MKZFS=yes build breaks. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.27 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.28 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.27 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Thu Nov 15 04:55:49 2018 @@ -80,6 +80,7 @@ #endif #ifdef __NetBSD__ +#include #include #include #include
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Thu Nov 15 04:55:38 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: spa_misc.c src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: spa_impl.h Log Message: Be consistent about _KERNEL vs _HARDKERNEL in zfs. As it happens, on x86 both _HARDKERNEL and _KERNEL get defined; see the conditional in sys/rump/Makefile.rump that _refrains_ from defining _RUMPKERNEL on x86. So the only version of this code that has been tested is the one with all of it included. But on, e.g., aarch64, we do not get _HARDKERNEL here, and the code fails to build because some things use the field struct spa::spa_deadman_cycid under _KERNEL when it is declared only under _HARDKERNEL. If there's a reason _not_ to use this in rump -- and it's not obvious to me why -- then all access to the field needs to agree to use _HARDKERNEL. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.4 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c:1.3 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa_misc.c Thu Nov 15 04:55:38 2018 @@ -391,7 +391,7 @@ zfs_deadman_init(void) #endif /* __FreeBSD__ */ #ifdef __NetBSD__ -#ifdef _HARDKERNEL +#ifdef _KERNEL static struct workqueue *spa_workqueue; static void spa_deadman(void *arg); @@ -420,10 +420,10 @@ zfs_deadman_fini(void) workqueue_destroy(spa_workqueue); spa_workqueue = NULL; } -#else /* !_HARDKERNEL */ +#else /* !_KERNEL */ #define zfs_deadman_init() /* nothing */ #define zfs_deadman_fini() /* nothing */ -#endif /* !_HARDKERNEL */ +#endif /* !_KERNEL */ #endif /* __NetBSD__ */ /* @@ -664,7 +664,7 @@ spa_deadman(void *arg) #endif } -#ifdef _HARDKERNEL +#ifdef _KERNEL static void spa_deadman_timeout(void *arg) { @@ -771,7 +771,7 @@ spa_add(const char *name, nvlist_t *conf #endif #endif #ifdef __NetBSD__ -#ifdef _HARDKERNEL +#ifdef _KERNEL callout_init(>spa_deadman_cycid, 0); callout_setfunc(>spa_deadman_cycid, spa_deadman_timeout, spa); #endif @@ -892,7 +892,7 @@ spa_remove(spa_t *spa) #endif #endif #ifdef __NetBSD__ -#ifdef _HARDKERNEL +#ifdef _KERNEL callout_drain(>spa_deadman_cycid); #endif #endif Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/spa_impl.h Thu Nov 15 04:55:38 2018 @@ -44,7 +44,7 @@ #include #include -#if defined(__NetBSD__) && defined(_HARDKERNEL) +#if defined(__NetBSD__) && defined(_KERNEL) #include #endif @@ -276,7 +276,7 @@ struct spa { #endif #endif /* __FreeBSD__ */ #ifdef __NetBSD__ -#ifdef _HARDKERNEL +#ifdef _KERNEL struct callout spa_deadman_cycid; /* callout id */ struct work spa_deadman_work; #endif
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Thu Nov 15 04:55:06 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev.c Log Message: "PRIu64", not llu, to print uint64_t. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c:1.5 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev.c Thu Nov 15 04:55:06 2018 @@ -3614,12 +3614,12 @@ vdev_deadman(vdev_t *vd) delta = gethrtime() - fio->io_timestamp; if (delta > spa_deadman_synctime(spa)) { zfs_dbgmsg("SLOW IO: zio timestamp %lluns, " -"delta %lluns, last io %lluns", +"delta %"PRIu64"ns, last io %lluns", fio->io_timestamp, delta, vq->vq_io_complete_ts); printf("SLOW IO: zio timestamp %lluns, " -"delta %luns, last io %lluns", +"delta %"PRIu64"ns, last io %lluns", fio->io_timestamp, delta, vq->vq_io_complete_ts);
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: christos Date: Tue Oct 23 22:25:21 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: nvpair.h Log Message: prefix all nv* symbols with opensolaris_ To generate a diff of this commit: cvs rdiff -u -r1.1.1.3 -r1.2 \ src/external/cddl/osnet/dist/uts/common/sys/nvpair.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/nvpair.h diff -u src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.1.1.3 src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.2 --- src/external/cddl/osnet/dist/uts/common/sys/nvpair.h:1.1.1.3 Mon May 28 16:53:03 2018 +++ src/external/cddl/osnet/dist/uts/common/sys/nvpair.h Tue Oct 23 18:25:21 2018 @@ -30,6 +30,8 @@ #include #include +#include + #if defined(_KERNEL) && !defined(_BOOT) #include #endif
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: martin Date: Sun Sep 16 06:09:01 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c Log Message: Do not initialize .vfs_fhtovp twice To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.16 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.17 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.16 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Sun Sep 16 06:09:01 2018 @@ -163,7 +163,6 @@ struct vfsops zfs_vfsops = { .vfs_sync = zfs_netbsd_sync, .vfs_vget = zfs_vget, .vfs_loadvnode = zfs_loadvnode, - .vfs_fhtovp = zfs_fhtovp, .vfs_init = zfs_init, .vfs_done = zfs_fini, .vfs_start = (void *)nullop,
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Fri Sep 14 19:06:53 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_fuid.c Log Message: The macros kidmap_getsidby{u,g}id always return 1 from sid.h on NetBSD, and clang is complaining about the impossible... So initialize rid and be done with it, it is the least intrusive fix. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5 Sat Aug 18 07:59:25 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c Fri Sep 14 15:06:53 2018 @@ -558,7 +558,7 @@ zfs_fuid_create(zfsvfs_t *zfsvfs, uint64 const char *domain; char *kdomain; uint32_t fuid_idx = FUID_INDEX(id); - uint32_t rid; + uint32_t rid = UID_NOBODY; // XXX: broken clang idmap_stat status; uint64_t idx = 0; zfs_fuid_t *zfuid = NULL;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Fri Sep 7 02:25:40 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_acl.c Log Message: handle clang stupidity To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c:1.4 Mon May 28 17:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_acl.c Thu Sep 6 22:25:40 2018 @@ -2359,6 +2359,7 @@ zfs_zaccess(znode_t *zp, int mode, int f */ if (zp->z_pflags & ZFS_XATTR) return (0); + xzp = NULL; // XXX: hello clang is_attr is false here. #else /* * If attribute then validate against base file
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Mon Aug 20 06:47:16 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c Log Message: Avoid uninitialized warning. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.13 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12 Sat Jun 16 11:18:33 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Mon Aug 20 02:47:16 2018 @@ -6470,7 +6470,8 @@ zfsdev_ioctl(dev_t dev, int zcmd, intptr goto out; } } - } + } else + zc_iocparm = NULL; if (compat) { if (newioc) {
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Sat Aug 18 11:59:25 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_fuid.c Log Message: make sure rid and idx are initialized. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c:1.4 Mon May 28 17:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_fuid.c Sat Aug 18 07:59:25 2018 @@ -605,8 +605,14 @@ zfs_fuid_create(zfsvfs_t *zfsvfs, uint64 rid = FUID_RID(fuidp->z_fuid_group); idx = FUID_INDEX(fuidp->z_fuid_group); break; + default: + rid = UID_NOBODY; + break; }; - domain = fuidp->z_domain_table[idx - 1]; + if (idx == 0) + domain = nulldomain; + else + domain = fuidp->z_domain_table[idx - 1]; } else { if (type == ZFS_OWNER || type == ZFS_ACE_USER) status = kidmap_getsidbyuid(crgetzone(cr), id,
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Sat Aug 18 11:58:59 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_label.c Log Message: vdev_inuse might not be called and spare_guid contains random stuff. To generate a diff of this commit: cvs rdiff -u -r1.1.1.3 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.1.1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c:1.1.1.3 Mon May 28 16:52:58 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_label.c Sat Aug 18 07:58:59 2018 @@ -648,7 +648,7 @@ vdev_label_init(vdev_t *vd, uint64_t crt char *buf; size_t buflen; int error; - uint64_t spare_guid, l2cache_guid; + uint64_t spare_guid = 0, l2cache_guid; int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL; ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: hannken Date: Tue Jul 31 09:33:50 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_znode.c Log Message: Initialize z_lockf for new znodes. Ok: Chuck Silvers To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.20 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.21 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.20 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Tue Jul 31 09:33:50 2018 @@ -1309,6 +1309,7 @@ skip_lookup: zp->z_blksz = blksz; zp->z_seq = 0x7A4653; zp->z_sync_cnt = 0; + zp->z_lockf = NULL; zfs_znode_sa_init(zfsvfs, zp, db, obj_type, hdl);
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: gson Date: Sat Jun 16 15:18:33 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ioctl.c Log Message: Use space between words To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.12 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c:1.11 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ioctl.c Sat Jun 16 15:18:33 2018 @@ -7133,7 +7133,7 @@ zfs_modcmd(modcmd_t cmd, void *arg) printf("WARNING: ZFS on NetBSD is under development\n"); availrmem = (uint64_t)physmem * PAGE_SIZE / 1048576; if (availrmem < ZFS_MIN_MEGS * 80 / 100) { - printf("ERROR: at least %dMB of memory required to" + printf("ERROR: at least %dMB of memory required to " "use ZFS\n", ZFS_MIN_MEGS); return ENOMEM; }
CVS commit: src/external/cddl/osnet/dist/uts/common/rpc
Module Name:src Committed By: maya Date: Wed Jun 13 04:21:21 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/rpc: types.h Log Message: Avoid declaring ulonglong_t. Comment here already says it isn't necessary and will be removed. Hasten the process for us and avoid the problematic typedef. This is useful because u_longlong_t would otherwise need to be provided by compat headers. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/uts/common/rpc/types.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/rpc/types.h diff -u src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.2 src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.3 --- src/external/cddl/osnet/dist/uts/common/rpc/types.h:1.2 Fri Apr 10 22:44:20 2015 +++ src/external/cddl/osnet/dist/uts/common/rpc/types.h Wed Jun 13 04:21:21 2018 @@ -49,13 +49,6 @@ extern "C" { typedef int bool_t; typedef int enum_t; -/* - * The ulonglong_t type was introduced to workaround an rpcgen bug - * that has been fixed, this next typedef will be removed in a future release. - * Do *NOT* use! - */ -typedef u_longlong_t ulonglong_t; - #if defined(_LP64) || defined(_I32LPx) typedef uint32_t rpcprog_t; typedef uint32_t rpcvers_t;
CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace
Module Name:src Committed By: kamil Date: Wed Jun 6 15:24:57 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/dtrace: dtrace.c Log Message: Correct compilation of osnet/dist/uts/common/dtrace/dtrace.c under Clang Add missing const keywords in dtrace_strncmp(). Initialize lim1 and lim2 to zero always. This prevents a false positive about potentially unset but used variable. This could be done with -W flags, but they are incompatible between compilers. This is a step forward functional MKLLVM=yes HAVE_LLVM=yes build. Sponsored by To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 \ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c diff -u src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.36 src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.37 --- src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.36 Mon May 28 21:05:06 2018 +++ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Wed Jun 6 15:24:57 2018 @@ -1263,7 +1263,7 @@ dtrace_strtoll(char *input, int base, si * Compare two strings using safe loads. */ static int -dtrace_strncmp(char *s1, char *s2, size_t limit) +dtrace_strncmp(const char *s1, const char *s2, size_t limit) { uint8_t c1, c2; volatile uint16_t *flags; @@ -6592,7 +6592,7 @@ dtrace_dif_emulate(dtrace_difo_t *difo, size_t sz = state->dts_options[DTRACEOPT_STRSIZE]; uintptr_t s1 = regs[r1]; uintptr_t s2 = regs[r2]; - size_t lim1, lim2; + size_t lim1 = 0, lim2 = 0; if (s1 != 0 && !dtrace_strcanload(s1, sz, , mstate, vstate))
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: christos Date: Mon Jun 4 21:36:03 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: dtrace.h Log Message: add because the header needs proc_t kthread_t etc. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.16 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.17 --- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.16 Mon May 28 17:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Mon Jun 4 17:36:03 2018 @@ -59,6 +59,7 @@ extern "C" { #include #include #include +#include #include typedef int model_t; #endif
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: chs Date: Sun Jun 3 03:05:56 UTC 2018 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dmu_tx.c Log Message: avoid calling kpause() with a delay of 0. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c Sun Jun 3 03:05:56 2018 @@ -1151,7 +1151,11 @@ dmu_tx_delay(dmu_tx_t *tx, uint64_t dirt zfs_delay_resolution_ns * SBT_1NS, C_ABSOLUTE); #endif #ifdef __NetBSD__ - kpause("dmu_tx_delay", false, (wakeup - now) * hz / 10, NULL); + int timo = (wakeup - now) * hz / 10; + + if (timo == 0) + timo = 1; + kpause("dmu_tx_delay", false, timo, NULL); #endif #else hrtime_t delta = wakeup - gethrtime();
CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace
Module Name:src Committed By: christos Date: Sun Oct 9 14:05:12 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/dtrace: dtrace.c Log Message: PR/51539: Henning Petersen: replace , with ; To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 \ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c diff -u src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.33 src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.34 --- src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c:1.33 Sat Jul 16 22:09:10 2016 +++ src/external/cddl/osnet/dist/uts/common/dtrace/dtrace.c Sun Oct 9 10:05:12 2016 @@ -16659,7 +16659,7 @@ dtrace_state_worker_add(void (*fn)(dtrac w = kmem_alloc(sizeof(*w), KM_SLEEP); mutex_init(>lock, MUTEX_DEFAULT, IPL_NONE); cv_init(>cv, "dtrace"); - w->interval = ((uintmax_t)hz * interval) / NANOSEC, + w->interval = ((uintmax_t)hz * interval) / NANOSEC; w->fn = fn; w->state = state; w->exiting = false;
CVS commit: src/external/cddl/osnet/dist/uts/common/zmod
Module Name:src Committed By: christos Date: Sat Jun 18 21:41:09 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/zmod: deflate.c zconf.h zlib.h zutil.c zutil.h Log Message: fix dup definitions in module. To generate a diff of this commit: cvs rdiff -u -r1.1.1.1 -r1.2 \ src/external/cddl/osnet/dist/uts/common/zmod/deflate.c \ src/external/cddl/osnet/dist/uts/common/zmod/zconf.h \ src/external/cddl/osnet/dist/uts/common/zmod/zlib.h \ src/external/cddl/osnet/dist/uts/common/zmod/zutil.c \ src/external/cddl/osnet/dist/uts/common/zmod/zutil.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/zmod/deflate.c diff -u src/external/cddl/osnet/dist/uts/common/zmod/deflate.c:1.1.1.1 src/external/cddl/osnet/dist/uts/common/zmod/deflate.c:1.2 --- src/external/cddl/osnet/dist/uts/common/zmod/deflate.c:1.1.1.1 Fri Aug 7 14:34:41 2009 +++ src/external/cddl/osnet/dist/uts/common/zmod/deflate.c Sat Jun 18 17:41:08 2016 @@ -303,7 +303,7 @@ int ZEXPORT deflateInit2_(strm, level, m if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || s->pending_buf == Z_NULL) { s->status = FINISH_STATE; -strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); +strm->msg = zError(Z_MEM_ERROR); (void) deflateEnd (strm); return Z_MEM_ERROR; } Index: src/external/cddl/osnet/dist/uts/common/zmod/zconf.h diff -u src/external/cddl/osnet/dist/uts/common/zmod/zconf.h:1.1.1.1 src/external/cddl/osnet/dist/uts/common/zmod/zconf.h:1.2 --- src/external/cddl/osnet/dist/uts/common/zmod/zconf.h:1.1.1.1 Fri Aug 7 14:34:44 2009 +++ src/external/cddl/osnet/dist/uts/common/zmod/zconf.h Sat Jun 18 17:41:08 2016 @@ -94,6 +94,13 @@ extern "C" { #define crc32 z_crc32 #define get_crc_table z_get_crc_table #define zError z_zError +#define _tr_flush_block z__tr_flush_block +#define _length_code z__length_code +#define inflate_fast z_inflate_fast +#define _tr_stored_block z__tr_stored_block +#define _dist_code z__dist_code +#define _tr_init z__tr_init +#define _tr_align z__tr_align #define MAX_MEM_LEVEL 9 #define MAX_WBITS 15 Index: src/external/cddl/osnet/dist/uts/common/zmod/zlib.h diff -u src/external/cddl/osnet/dist/uts/common/zmod/zlib.h:1.1.1.1 src/external/cddl/osnet/dist/uts/common/zmod/zlib.h:1.2 --- src/external/cddl/osnet/dist/uts/common/zmod/zlib.h:1.1.1.1 Fri Aug 7 14:34:46 2009 +++ src/external/cddl/osnet/dist/uts/common/zmod/zlib.h Sat Jun 18 17:41:08 2016 @@ -90,7 +90,7 @@ typedef struct z_stream_s { uInt avail_out; /* remaining free space at next_out */ uLongtotal_out; /* total nb of bytes output so far */ -char *msg; /* last error message, NULL if no error */ +const char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ Index: src/external/cddl/osnet/dist/uts/common/zmod/zutil.c diff -u src/external/cddl/osnet/dist/uts/common/zmod/zutil.c:1.1.1.1 src/external/cddl/osnet/dist/uts/common/zmod/zutil.c:1.2 --- src/external/cddl/osnet/dist/uts/common/zmod/zutil.c:1.1.1.1 Fri Aug 7 14:34:47 2009 +++ src/external/cddl/osnet/dist/uts/common/zmod/zutil.c Sat Jun 18 17:41:08 2016 @@ -16,7 +16,7 @@ struct internal_state {int dummy;}; /* for buggy compilers */ #endif -const char * const z_errmsg[10] = { +static const char * const z_errmsg[10] = { "need dictionary", /* Z_NEED_DICT 2 */ "stream end", /* Z_STREAM_END 1 */ "",/* Z_OK 0 */ Index: src/external/cddl/osnet/dist/uts/common/zmod/zutil.h diff -u src/external/cddl/osnet/dist/uts/common/zmod/zutil.h:1.1.1.1 src/external/cddl/osnet/dist/uts/common/zmod/zutil.h:1.2 --- src/external/cddl/osnet/dist/uts/common/zmod/zutil.h:1.1.1.1 Fri Aug 7 14:34:47 2009 +++ src/external/cddl/osnet/dist/uts/common/zmod/zutil.h Sat Jun 18 17:41:08 2016 @@ -55,13 +55,15 @@ typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; +#if 0 extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ +#endif #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] #define ERR_RETURN(strm,err) \ - return (strm->msg = (char*)ERR_MSG(err), (err)) + return (strm->msg = zError(err), (err)) /* To be used only when the state is known to be valid */ /* common constants */
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Mon Feb 29 16:19:20 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zvol.c Log Message: uint64_t can't be negative. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.7 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c:1.6 Mon Jul 28 10:01:23 2014 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zvol.c Mon Feb 29 16:19:20 2016 @@ -1246,7 +1246,7 @@ zvol_strategy(buf_t *bp) addr = bp->b_data; resid = bp->b_bcount; - if (resid > 0 && (off < 0 || off >= volsize)) { + if (resid > 0 && off >= volsize) { bioerror(bp, EIO); biodone(bp); return;
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Mon Feb 29 16:18:37 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_rlock.c Log Message: Sprinkle some more zfs range lock reference count kasserts. >From a debugging session months ago, might as well share them. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.4 Sat Apr 11 04:35:39 2015 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c Mon Feb 29 16:18:37 2016 @@ -98,6 +98,8 @@ static int zfs_range_lock_hold(rl_t *rl) { + KASSERT(rl->r_zp != NULL); + KASSERT(0 < rl->r_refcnt); KASSERT(mutex_owned(>r_zp->z_range_lock)); if (rl->r_refcnt >= ULONG_MAX) @@ -111,8 +113,9 @@ static void zfs_range_lock_rele(rl_t *rl) { + KASSERT(rl->r_zp != NULL); + KASSERT(0 < rl->r_refcnt); KASSERT(mutex_owned(>r_zp->z_range_lock)); - KASSERT(rl->r_refcnt > 0); if (--rl->r_refcnt == 0) { cv_destroy(>r_wr_cv); @@ -184,10 +187,12 @@ zfs_range_lock_writer(znode_t *zp, rl_t goto wait; /* already locked at same offset */ rl = (rl_t *)avl_nearest(tree, where, AVL_AFTER); + KASSERT(0 < rl->r_refcnt); if (rl && (rl->r_off < new->r_off + new->r_len)) goto wait; rl = (rl_t *)avl_nearest(tree, where, AVL_BEFORE); + KASSERT(0 < rl->r_refcnt); if (rl && rl->r_off + rl->r_len > new->r_off) goto wait; @@ -345,6 +350,7 @@ zfs_range_add_reader(avl_tree_t *tree, r return; } + KASSERT(0 < next->r_refcnt); if (off < next->r_off) { /* Add a proxy for initial range before the overlap */ zfs_range_new_proxy(tree, off, next->r_off - off, zp); @@ -369,17 +375,20 @@ zfs_range_add_reader(avl_tree_t *tree, r if (off + len == next->r_off + next->r_len) { /* exact overlap with end */ next = zfs_range_proxify(tree, next); + KASSERT(0 < next->r_refcnt); next->r_cnt++; return; } if (off + len < next->r_off + next->r_len) { /* new range ends in the middle of this block */ next = zfs_range_split(tree, next, off + len); + KASSERT(0 < next->r_refcnt); next->r_cnt++; return; } ASSERT3U(off + len, >, next->r_off + next->r_len); next = zfs_range_proxify(tree, next); + KASSERT(0 < next->r_refcnt); next->r_cnt++; }
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: joerg Date: Fri Feb 19 19:25:59 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dbuf.c Log Message: Don't use #pragma weak to implicitly change argument types. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.5 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.4 Sat Feb 27 23:43:53 2010 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c Fri Feb 19 19:25:59 2016 @@ -1267,7 +1267,13 @@ dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_ return (0); } -#pragma weak dmu_buf_will_dirty = dbuf_will_dirty +__attribute__((__weak__)) void +dmu_buf_will_dirty(dmu_buf_t *db_fake, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dbuf_will_dirty(db, tx); +} + void dbuf_will_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx) { @@ -1309,7 +1315,13 @@ dmu_buf_will_fill(dmu_buf_t *db_fake, dm (void) dbuf_dirty(db, tx); } -#pragma weak dmu_buf_fill_done = dbuf_fill_done +__attribute__((__weak__)) void +dmu_buf_fill_done(dmu_buf_t *db_fake, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dbuf_fill_done(db, tx); +} + /* ARGSUSED */ void dbuf_fill_done(dmu_buf_impl_t *db, dmu_tx_t *tx) @@ -1815,7 +1827,13 @@ dbuf_create_bonus(dnode_t *dn) dn->dn_bonus = dbuf_create(dn, 0, DB_BONUS_BLKID, dn->dn_dbuf, NULL); } -#pragma weak dmu_buf_add_ref = dbuf_add_ref +__attribute__((__weak__)) void +dmu_buf_add_ref(dmu_buf_t *db_fake, void *tag) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dbuf_add_ref(db, tag); +} + void dbuf_add_ref(dmu_buf_impl_t *db, void *tag) { @@ -1823,7 +1841,13 @@ dbuf_add_ref(dmu_buf_impl_t *db, void *t ASSERT(holds > 1); } -#pragma weak dmu_buf_rele = dbuf_rele +__attribute__((__weak__)) void +dmu_buf_rele(dmu_buf_t *db_fake, void *tag) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dbuf_rele(db, tag); +} + void dbuf_rele(dmu_buf_impl_t *db, void *tag) { @@ -1889,7 +1913,13 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, } } -#pragma weak dmu_buf_refcount = dbuf_refcount +__attribute__((__weak__)) uint64_t +dmu_buf_refcount(dmu_buf_t *db_fake) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + return dbuf_refcount(db); +} + uint64_t dbuf_refcount(dmu_buf_impl_t *db) {
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: joerg Date: Fri Feb 19 19:25:22 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: dsl_dataset.c src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: dsl_dataset.h Log Message: dmu_objset_rename is an alias for dsl_dataset_rename, but differs in constness of the first argument. Newer clang checks for this and prohibits it, so just be consistent by constifying the latter. To generate a diff of this commit: cvs rdiff -u -r1.1.1.2 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c cvs rdiff -u -r1.1.1.2 -r1.2 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c:1.1.1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c:1.1.1.2 Sat Feb 27 22:30:55 2010 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dsl_dataset.c Fri Feb 19 19:25:22 2016 @@ -2304,7 +2304,7 @@ dsl_valid_rename(const char *oldname, vo #pragma weak dmu_objset_rename = dsl_dataset_rename int -dsl_dataset_rename(char *oldname, const char *newname, boolean_t recursive) +dsl_dataset_rename(const char *oldname, const char *newname, boolean_t recursive) { dsl_dir_t *dd; dsl_dataset_t *ds; Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h:1.1.1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h:1.2 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h:1.1.1.2 Sat Feb 27 22:31:40 2010 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/dsl_dataset.h Fri Feb 19 19:25:22 2016 @@ -192,7 +192,7 @@ dsl_checkfunc_t dsl_dataset_destroy_chec dsl_syncfunc_t dsl_dataset_destroy_sync; dsl_checkfunc_t dsl_dataset_snapshot_check; dsl_syncfunc_t dsl_dataset_snapshot_sync; -int dsl_dataset_rename(char *name, const char *newname, boolean_t recursive); +int dsl_dataset_rename(const char *name, const char *newname, boolean_t recursive); int dsl_dataset_promote(const char *name, char *conflsnap); int dsl_dataset_clone_swap(dsl_dataset_t *clone, dsl_dataset_t *origin_head, boolean_t force);
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: riastradh Date: Sat Jan 23 15:45:42 UTC 2016 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: debug.h Log Message: Omit spurious include of in dtrace tools build. Fixes dtrace tools cross-build from architectures with no dtrace support: # compile libctf/ctf_create.lo [...] /export/anoncvs/src/tools/libctf/../../external/cddl/osnet/sys/sys/isa_defs.h:50:2: error: #error "architecture not supported" #error "architecture not supported" ^ To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/uts/common/sys/debug.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/debug.h diff -u src/external/cddl/osnet/dist/uts/common/sys/debug.h:1.2 src/external/cddl/osnet/dist/uts/common/sys/debug.h:1.3 --- src/external/cddl/osnet/dist/uts/common/sys/debug.h:1.2 Tue Dec 14 14:08:42 2010 +++ src/external/cddl/osnet/dist/uts/common/sys/debug.h Sat Jan 23 15:45:42 2016 @@ -29,7 +29,6 @@ #ifndef _SYS_DEBUG_H #define _SYS_DEBUG_H -#include #include #include
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: christos Date: Tue Dec 8 20:56:21 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c Log Message: catch up with DIOCGPART -> DIOCGPARTINFO To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.5 Sat Nov 19 21:54:25 2011 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Tue Dec 8 15:56:21 2015 @@ -138,16 +138,16 @@ skip_open: * Determine the actual size of the device. * XXXNETBSD wedges. */ - error = VOP_IOCTL(vp, DIOCGPART, , FREAD|FWRITE, + error = VOP_IOCTL(vp, DIOCGPARTINFO, , FREAD|FWRITE, kauth_cred_get()); if (error != 0) { vrele(vp); vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; return error; } - *psize = (uint64_t)pinfo.part->p_size * pinfo.disklab->d_secsize; - *ashift = highbit(MAX(pinfo.disklab->d_secsize, SPA_MINBLOCKSIZE)) - 1; - vd->vdev_wholedisk = (pinfo.part->p_offset == 0); /* XXXNETBSD */ + *psize = pinfo.pi_size * pinfo.pi_secsize; + *ashift = highbit(MAX(pinfo.pi_secsize, SPA_MINBLOCKSIZE)) - 1; + vd->vdev_wholedisk = (pinfo.pi_offset == 0); /* XXXNETBSD */ /* * Create a workqueue to process cache-flushes concurrently.
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: riz Date: Fri Oct 2 22:16:39 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: dtrace.h Log Message: Restore some defines lost in last update, and don't include sys/cpuvar.h MKDTRACE=yes now builds for arm platforms again. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.13 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.14 --- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.13 Thu Sep 24 19:55:00 2015 +++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Fri Oct 2 22:16:38 2015 @@ -57,7 +57,6 @@ extern "C" { #ifdef illumos #include #else -#include #include #include #include @@ -2450,6 +2449,18 @@ extern void dtrace_helpers_destroy(proc_ #define DTRACE_INVOP_POPM 2 #define DTRACE_INVOP_B 3 +#define DTRACE_INVOP_MOV_IP_SP 1 +#define DTRACE_INVOP_BX_LR 2 +#define DTRACE_INVOP_MOV_PC_LR 3 +#define DTRACE_INVOP_LDM 4 +#define DTRACE_INVOP_LDMIB 5 +#define DTRACE_INVOP_LDR_IMM 6 +#define DTRACE_INVOP_MOVW 7 +#define DTRACE_INVOP_MOV_IMM 8 +#define DTRACE_INVOP_CMP_IMM 9 +#define DTRACE_INVOP_B_LABEL 10 +#define DTRACE_INVOP_PUSH 11 + #elif defined(__aarch64__) #define INSN_SIZE 4
CVS commit: src/external/cddl/osnet/dist/uts/common/dtrace
Module Name:src Committed By: christos Date: Thu Sep 24 14:23:39 UTC 2015 Removed Files: src/external/cddl/osnet/dist/uts/common/dtrace: lockstat.c profile.c sdt_subr.c systrace.c Log Message: remove dup copies of code that we've moved to dev a long while ago To generate a diff of this commit: cvs rdiff -u -r1.4 -r0 \ src/external/cddl/osnet/dist/uts/common/dtrace/lockstat.c cvs rdiff -u -r1.3 -r0 \ src/external/cddl/osnet/dist/uts/common/dtrace/profile.c \ src/external/cddl/osnet/dist/uts/common/dtrace/sdt_subr.c \ src/external/cddl/osnet/dist/uts/common/dtrace/systrace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: christos Date: Thu Sep 24 14:21:35 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: ctf_api.h dtrace.h dtrace_impl.h Log Message: sync with FreeBSD To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h cvs rdiff -u -r1.11 -r1.12 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace_impl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h diff -u src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h:1.3 src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h:1.4 --- src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h:1.3 Sat Mar 13 17:31:15 2010 +++ src/external/cddl/osnet/dist/uts/common/sys/ctf_api.h Thu Sep 24 10:21:35 2015 @@ -23,6 +23,9 @@ * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + */ /* * This header file defines the interfaces available from the CTF debugger @@ -40,8 +43,6 @@ #ifndef _CTF_API_H #define _CTF_API_H -/* #pragma ident "%Z%%M% %I% %E% SMI" */ - #include #include #include @@ -65,10 +66,10 @@ typedef long ctf_id_t; * filling in ctf_sect_t structures and passing them to ctf_bufopen(): */ typedef struct ctf_sect { - char *cts_name; /* section name (if any) */ + const char *cts_name; /* section name (if any) */ ulong_t cts_type; /* section type (ELF SHT_... value) */ ulong_t cts_flags; /* section flags (ELF SHF_... value) */ -#if defined(sun) +#ifdef illumos const void *cts_data; /* pointer to section data */ #else void *cts_data; /* pointer to section data */ @@ -154,6 +155,7 @@ extern ctf_file_t *ctf_bufopen(const ctf extern ctf_file_t *ctf_fdopen(int, int *); extern ctf_file_t *ctf_open(const char *, int *); extern ctf_file_t *ctf_create(int *); +extern ctf_file_t *ctf_dup(ctf_file_t *); extern void ctf_close(ctf_file_t *); extern ctf_file_t *ctf_parent_file(ctf_file_t *); @@ -179,6 +181,8 @@ extern ctf_id_t ctf_lookup_by_symbol(ctf extern ctf_id_t ctf_type_resolve(ctf_file_t *, ctf_id_t); extern ssize_t ctf_type_lname(ctf_file_t *, ctf_id_t, char *, size_t); extern char *ctf_type_name(ctf_file_t *, ctf_id_t, char *, size_t); +extern char *ctf_type_qname(ctf_file_t *, ctf_id_t, char *, size_t, +const char *); extern ssize_t ctf_type_size(ctf_file_t *, ctf_id_t); extern ssize_t ctf_type_align(ctf_file_t *, ctf_id_t); extern int ctf_type_kind(ctf_file_t *, ctf_id_t); @@ -227,6 +231,8 @@ extern int ctf_add_member(ctf_file_t *, extern int ctf_set_array(ctf_file_t *, ctf_id_t, const ctf_arinfo_t *); +extern int ctf_delete_type(ctf_file_t *, ctf_id_t); + extern int ctf_update(ctf_file_t *); extern int ctf_discard(ctf_file_t *); extern int ctf_write(ctf_file_t *, int); Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.11 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.12 --- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.11 Sat Mar 7 10:14:29 2015 +++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Thu Sep 24 10:21:35 2015 @@ -20,13 +20,20 @@ */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + #ifndef _SYS_DTRACE_H #define _SYS_DTRACE_H +/* #pragma ident "%Z%%M% %I% %E% SMI" */ + #ifdef __cplusplus extern "C" { #endif @@ -47,22 +54,20 @@ extern "C" { #include #include #include -#include -#if defined(sun) +#ifdef illumos #include #else -#include +#include #include #include #include #include +#include typedef int model_t; #endif #include -#if 0 +#ifdef illumos #include -#endif -#if defined(sun) #include #else #include @@ -253,6 +258,10 @@ typedef enum dtrace_probespec { #define DIF_VAR_ERRNO 0x0120 /* thread errno */ #define DIF_VAR_EXECARGS 0x0121 /* process arguments */ +#ifndef illumos +#define DIF_VAR_CPU 0x0200 +#endif + #define DIF_SUBR_RAND 0 #define DIF_SUBR_MUTEX_OWNED 1 #define DIF_SUBR_MUTEX_OWNER 2 @@ -297,13 +306,18 @@ typedef enum dtrace_probespec { #define DIF_SUBR_INET_NTOP 41 #define DIF_SUBR_INET_NTOA 42 #define DIF_SUBR_INET_NTOA6 43 -#define DIF_SUBR_MEMREF 44 -#define DIF_SUBR_TYPEREF 45 -#define DIF_SUBR_SX_SHARED_HELD 46 -#define DIF_SUBR_SX_EXCLUSIVE_HELD 47 -#define DIF_SUBR_SX_ISEXCLUSIVE 48 - -#define DIF_SUBR_MAX 48 /* max subroutine value */ +#define DIF_SUBR_TOUPPER 44 +#define DIF_SUBR_TOLOWER 45
CVS commit: src/external/cddl/osnet/dist/uts/common/sys
Module Name:src Committed By: christos Date: Thu Sep 24 19:55:00 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/sys: dtrace.h Log Message: include explicitly for kthread_t To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/sys/dtrace.h diff -u src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.12 src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.13 --- src/external/cddl/osnet/dist/uts/common/sys/dtrace.h:1.12 Thu Sep 24 10:21:35 2015 +++ src/external/cddl/osnet/dist/uts/common/sys/dtrace.h Thu Sep 24 15:55:00 2015 @@ -58,6 +58,7 @@ extern "C" { #include #else #include +#include #include #include #include
CVS commit: src/external/cddl/osnet/dist/uts/common/fs/zfs
Module Name:src Committed By: riastradh Date: Sat Apr 11 04:35:39 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_rlock.c Log Message: Make sure rl_t::r_zp is always initialized. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.4 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.3 Sat Apr 11 02:33:16 2015 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c Sat Apr 11 04:35:39 2015 @@ -229,6 +229,7 @@ zfs_range_proxify(avl_tree_t *tree, rl_t /* create a proxy range lock */ proxy = kmem_alloc(sizeof (rl_t), KM_SLEEP); + proxy-r_zp = rl-r_zp; proxy-r_off = rl-r_off; proxy-r_len = rl-r_len; proxy-r_cnt = 1; @@ -261,6 +262,7 @@ zfs_range_split(avl_tree_t *tree, rl_t * /* create the rear proxy range lock */ rear = kmem_alloc(sizeof (rl_t), KM_SLEEP); + rear-r_zp = rl-r_zp; rear-r_off = off; rear-r_len = rl-r_off + rl-r_len - off; rear-r_cnt = rl-r_cnt; @@ -283,12 +285,13 @@ zfs_range_split(avl_tree_t *tree, rl_t * * Create and add a new proxy range lock for the supplied range. */ static void -zfs_range_new_proxy(avl_tree_t *tree, uint64_t off, uint64_t len) +zfs_range_new_proxy(avl_tree_t *tree, uint64_t off, uint64_t len, znode_t *zp) { rl_t *rl; ASSERT(len); rl = kmem_alloc(sizeof (rl_t), KM_SLEEP); + rl-r_zp = zp; rl-r_off = off; rl-r_len = len; rl-r_cnt = 1; @@ -305,6 +308,7 @@ zfs_range_new_proxy(avl_tree_t *tree, ui static void zfs_range_add_reader(avl_tree_t *tree, rl_t *new, rl_t *prev, avl_index_t where) { + znode_t *zp = new-r_zp; rl_t *next; uint64_t off = new-r_off; uint64_t len = new-r_len; @@ -343,7 +347,7 @@ zfs_range_add_reader(avl_tree_t *tree, r if (off next-r_off) { /* Add a proxy for initial range before the overlap */ - zfs_range_new_proxy(tree, off, next-r_off - off); + zfs_range_new_proxy(tree, off, next-r_off - off, zp); } new-r_cnt = 0; /* will use proxies in tree */ @@ -360,7 +364,7 @@ zfs_range_add_reader(avl_tree_t *tree, r /* there's a gap */ ASSERT3U(next-r_off, , prev-r_off + prev-r_len); zfs_range_new_proxy(tree, prev-r_off + prev-r_len, - next-r_off - (prev-r_off + prev-r_len)); + next-r_off - (prev-r_off + prev-r_len), zp); } if (off + len == next-r_off + next-r_len) { /* exact overlap with end */ @@ -381,7 +385,7 @@ zfs_range_add_reader(avl_tree_t *tree, r /* Add the remaining end range. */ zfs_range_new_proxy(tree, prev-r_off + prev-r_len, - (off + len) - (prev-r_off + prev-r_len)); + (off + len) - (prev-r_off + prev-r_len), zp); } /*
CVS commit: src/external/cddl/osnet/dist/uts/common/rpc
Module Name:src Committed By: riastradh Date: Sat Apr 11 03:23:37 UTC 2015 Modified Files: src/external/cddl/osnet/dist/uts/common/rpc: xdr.h Log Message: Skip Solaris ILP32 ABI compatibility shenanigans from upstream. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/uts/common/rpc/xdr.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/external/cddl/osnet/dist/uts/common/rpc/xdr.h diff -u src/external/cddl/osnet/dist/uts/common/rpc/xdr.h:1.2 src/external/cddl/osnet/dist/uts/common/rpc/xdr.h:1.3 --- src/external/cddl/osnet/dist/uts/common/rpc/xdr.h:1.2 Fri Apr 10 22:44:20 2015 +++ src/external/cddl/osnet/dist/uts/common/rpc/xdr.h Sat Apr 11 03:23:37 2015 @@ -156,10 +156,13 @@ typedef struct XDR { * xdr_ops * Changes must be reviewed by Solaris File Sharing * Changes must be communicated to contract-2003-...@sun.com + * + * XXX We are not Solaris, we are NetBSD. So no need for silly ABI + * compatibility with Solaris ILP32 gunk. */ struct xdr_ops { #ifdef __STDC__ -#if !defined(_KERNEL) +#if !defined(_KERNEL) !defined(__NetBSD__) bool_t (*x_getlong)(struct XDR *, long *); /* get a long from underlying stream */ bool_t (*x_putlong)(struct XDR *, long *); @@ -178,14 +181,14 @@ struct xdr_ops { void (*x_destroy)(struct XDR *); /* free privates of this xdr_stream */ bool_t (*x_control)(struct XDR *, int, void *); -#if defined(_LP64) || defined(_KERNEL) +#if defined(_LP64) || defined(_KERNEL) || defined(__NetBSD__) bool_t (*x_getint32)(struct XDR *, int32_t *); /* get a int from underlying stream */ bool_t (*x_putint32)(struct XDR *, int32_t *); /* put an int to */ #endif /* _LP64 || _KERNEL */ #else -#if !defined(_KERNEL) +#if !defined(_KERNEL) !defined(__NetBSD__) bool_t (*x_getlong)(); /* get a long from underlying stream */ bool_t (*x_putlong)(); /* put a long to */ #endif /* KERNEL */ @@ -197,7 +200,7 @@ struct xdr_ops { /* buf quick ptr to buffered data */ void (*x_destroy)(); /* free privates of this xdr_stream */ bool_t (*x_control)(); -#if defined(_LP64) || defined(_KERNEL) +#if defined(_LP64) || defined(_KERNEL) || defined(__NetBSD__) bool_t (*x_getint32)(); bool_t (*x_putint32)(); #endif /* _LP64 || defined(_KERNEL) */ @@ -213,7 +216,7 @@ struct xdr_ops { * uint_t len; * uint_t pos; */ -#if !defined(_KERNEL) +#if !defined(_KERNEL) !defined(__NetBSD__) #define XDR_GETLONG(xdrs, longp) \ (*(xdrs)-x_ops-x_getlong)(xdrs, longp) #define xdr_getlong(xdrs, longp) \ @@ -226,7 +229,7 @@ struct xdr_ops { #endif /* KERNEL */ -#if !defined(_LP64) !defined(_KERNEL) +#if !defined(_LP64) !defined(_KERNEL) !defined(__NetBSD__) /* * For binary compatability on ILP32 we do not change the shape @@ -367,7 +370,7 @@ struct xdr_discrim { #define IXDR_GET_U_INT32(buf) ((uint32_t)IXDR_GET_INT32(buf)) #define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_INT32((buf), ((int32_t)(v))) -#if !defined(_KERNEL) !defined(_LP64) +#if !defined(_KERNEL) !defined(_LP64) !defined(__NetBSD__) #define IXDR_GET_LONG(buf) ((long)ntohl((ulong_t)*(buf)++)) #define IXDR_PUT_LONG(buf, v) (*(buf)++ = (long)htonl((ulong_t)v))