diff options
4 files changed, 12 insertions, 4 deletions
diff --git a/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c b/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c index 1fafe5f..30c5a0c 100644 --- a/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c +++ b/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c @@ -291,7 +291,7 @@ cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime) ASSERT(abstime > 0); top: - delta = abstime - lbolt; + delta = abstime; if (delta <= 0) return (-1); @@ -413,7 +413,10 @@ vn_open(char *path, int x1, int flags, int mode, vnode_t **vpp, int x2, int x3) *vpp = vp = umem_zalloc(sizeof (vnode_t), UMEM_NOFAIL); vp->v_fd = fd; - vp->v_size = st.st_size; + if (S_ISCHR(st.st_mode)) + ioctl(fd, DIOCGMEDIASIZE, &vp->v_size); + else + vp->v_size = st.st_size; vp->v_path = spa_strdup(path); return (0); diff --git a/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h b/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h index d46948e..82a0767 100644 --- a/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h +++ b/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h @@ -80,6 +80,7 @@ extern "C" { #include <sys/sdt.h> #include <sys/kstat.h> #include <sys/kernel.h> +#include <sys/disk.h> #include <machine/atomic.h> #define ZFS_EXPORTS_PATH "/etc/zfs/exports" diff --git a/contrib/opensolaris/lib/libzpool/common/kernel.c b/contrib/opensolaris/lib/libzpool/common/kernel.c index 1fafe5f..30c5a0c 100644 --- a/contrib/opensolaris/lib/libzpool/common/kernel.c +++ b/contrib/opensolaris/lib/libzpool/common/kernel.c @@ -291,7 +291,7 @@ cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime) ASSERT(abstime > 0); top: - delta = abstime - lbolt; + delta = abstime; if (delta <= 0) return (-1); @@ -413,7 +413,10 @@ vn_open(char *path, int x1, int flags, int mode, vnode_t **vpp, int x2, int x3) *vpp = vp = umem_zalloc(sizeof (vnode_t), UMEM_NOFAIL); vp->v_fd = fd; - vp->v_size = st.st_size; + if (S_ISCHR(st.st_mode)) + ioctl(fd, DIOCGMEDIASIZE, &vp->v_size); + else + vp->v_size = st.st_size; vp->v_path = spa_strdup(path); return (0); diff --git a/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h b/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h index d46948e..82a0767 100644 --- a/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h +++ b/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h @@ -80,6 +80,7 @@ extern "C" { #include <sys/sdt.h> #include <sys/kstat.h> #include <sys/kernel.h> +#include <sys/disk.h> #include <machine/atomic.h> #define ZFS_EXPORTS_PATH "/etc/zfs/exports" |