From owner-svn-src-user@freebsd.org Fri Aug 21 15:20:04 2015 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 869C69BF59E for ; Fri, 21 Aug 2015 15:20:04 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 76AC8143; Fri, 21 Aug 2015 15:20:04 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7LFK4wI029066; Fri, 21 Aug 2015 15:20:04 GMT (envelope-from marcel@FreeBSD.org) Received: (from marcel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7LFK13C029055; Fri, 21 Aug 2015 15:20:01 GMT (envelope-from marcel@FreeBSD.org) Message-Id: <201508211520.t7LFK13C029055@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: marcel set sender to marcel@FreeBSD.org using -f From: Marcel Moolenaar Date: Fri, 21 Aug 2015 15:20:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r286996 - in user/marcel/libvdsk: bhyve bhyveload libvdsk X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Aug 2015 15:20:04 -0000 Author: marcel Date: Fri Aug 21 15:20:01 2015 New Revision: 286996 URL: https://svnweb.freebsd.org/changeset/base/286996 Log: o Add vdsk_trim() to support BOP_DELETE. o Reorder arguments to vdsk_read() and vdsk_write() so that the offset is second, like for vdsk_trim(). Modified: user/marcel/libvdsk/bhyve/block_if.c user/marcel/libvdsk/bhyveload/bhyveload.c user/marcel/libvdsk/libvdsk/qcow.c user/marcel/libvdsk/libvdsk/raw.c user/marcel/libvdsk/libvdsk/vdsk.c user/marcel/libvdsk/libvdsk/vdsk.h user/marcel/libvdsk/libvdsk/vdsk_int.h user/marcel/libvdsk/libvdsk/vhd.c user/marcel/libvdsk/libvdsk/vmdk.c Modified: user/marcel/libvdsk/bhyve/block_if.c ============================================================================== --- user/marcel/libvdsk/bhyve/block_if.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/bhyve/block_if.c Fri Aug 21 15:20:01 2015 (r286996) @@ -202,21 +202,16 @@ blockif_proc(struct blockif_ctxt *bc, st err = 0; switch (be->be_op) { case BOP_READ: - err = vdsk_read(bc, br->br_iov, br->br_iovcnt, br->br_offset); + err = vdsk_read(bc, br->br_offset, br->br_iov, br->br_iovcnt); break; case BOP_WRITE: - err = vdsk_write(bc, br->br_iov, br->br_iovcnt, br->br_offset); + err = vdsk_write(bc, br->br_offset, br->br_iov, br->br_iovcnt); break; case BOP_FLUSH: err = vdsk_flush(bc); break; case BOP_DELETE: - if (!bc->bc_candelete) - err = EOPNOTSUPP; - else if (bc->bc_rdonly) - err = EROFS; - else - err = EOPNOTSUPP; + err = vdsk_trim(bc, br->br_offset, br->br_resid); break; default: err = EINVAL; Modified: user/marcel/libvdsk/bhyveload/bhyveload.c ============================================================================== --- user/marcel/libvdsk/bhyveload/bhyveload.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/bhyveload/bhyveload.c Fri Aug 21 15:20:01 2015 (r286996) @@ -296,7 +296,7 @@ cb_diskread(void *arg, int unit, uint64_ iov.iov_base = to; iov.iov_len = size; - error = vdsk_read(disk[unit], &iov, 1, from); + error = vdsk_read(disk[unit], from, &iov, 1); if (!error) *resid = 0; Modified: user/marcel/libvdsk/libvdsk/qcow.c ============================================================================== --- user/marcel/libvdsk/libvdsk/qcow.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/qcow.c Fri Aug 21 15:20:01 2015 (r286996) @@ -117,16 +117,24 @@ qcow_close(struct vdsk *vdsk __unused) } static int -qcow_read(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +qcow_read(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) { return (ENOSYS); } static int -qcow_write(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +qcow_write(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) +{ + + return (ENOSYS); +} + +static int +qcow_trim(struct vdsk *vdsk __unused, off_t offset __unused, + ssize_t length __unused) { return (ENOSYS); @@ -148,6 +156,7 @@ static struct vdsk_format qcow_format = .close = qcow_close, .read = qcow_read, .write = qcow_write, + .trim = qcow_trim, .flush = qcow_flush, }; FORMAT_DEFINE(qcow_format); Modified: user/marcel/libvdsk/libvdsk/raw.c ============================================================================== --- user/marcel/libvdsk/libvdsk/raw.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/raw.c Fri Aug 21 15:20:01 2015 (r286996) @@ -62,7 +62,7 @@ raw_close(struct vdsk *vdsk __unused) } static int -raw_read(struct vdsk *vdsk, const struct iovec *iov, int iovcnt, off_t offset) +raw_read(struct vdsk *vdsk, off_t offset, const struct iovec *iov, int iovcnt) { ssize_t res; @@ -71,7 +71,7 @@ raw_read(struct vdsk *vdsk, const struct } static int -raw_write(struct vdsk *vdsk, const struct iovec *iov, int iovcnt, off_t offset) +raw_write(struct vdsk *vdsk, off_t offset, const struct iovec *iov, int iovcnt) { ssize_t res; @@ -80,6 +80,14 @@ raw_write(struct vdsk *vdsk, const struc } static int +raw_trim(struct vdsk *vdsk __unused, off_t offset __unused, + ssize_t length __unused) +{ + + return (EOPNOTSUPP); +} + +static int raw_flush(struct vdsk *vdsk) { int res; @@ -97,6 +105,7 @@ static struct vdsk_format raw_format = { .close = raw_close, .read = raw_read, .write = raw_write, + .trim = raw_trim, .flush = raw_flush, }; FORMAT_DEFINE(raw_format); Modified: user/marcel/libvdsk/libvdsk/vdsk.c ============================================================================== --- user/marcel/libvdsk/libvdsk/vdsk.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/vdsk.c Fri Aug 21 15:20:01 2015 (r286996) @@ -209,21 +209,31 @@ vdsk_sectorsize(vdskctx ctx) } int -vdsk_read(vdskctx ctx, const struct iovec *iov, int iovcnt, off_t offset) +vdsk_read(vdskctx ctx, off_t offset, const struct iovec *iov, int iovcnt) { struct vdsk *vdsk = vdsk_deref(ctx); - return (vdsk->fmt->read(vdsk, iov, iovcnt, offset)); + return (vdsk->fmt->read(vdsk, offset, iov, iovcnt)); } int -vdsk_write(vdskctx ctx, const struct iovec *iov, int iovcnt, off_t offset) +vdsk_write(vdskctx ctx, off_t offset, const struct iovec *iov, int iovcnt) { struct vdsk *vdsk = vdsk_deref(ctx); if ((vdsk->fflags & FWRITE) == 0) return (EROFS); - return (vdsk->fmt->write(vdsk, iov, iovcnt, offset)); + return (vdsk->fmt->write(vdsk, offset, iov, iovcnt)); +} + +int +vdsk_trim(vdskctx ctx, off_t offset, ssize_t length) +{ + struct vdsk *vdsk = vdsk_deref(ctx); + + if ((vdsk->fflags & FWRITE) == 0) + return (EROFS); + return (vdsk->fmt->trim(vdsk, offset, length)); } int Modified: user/marcel/libvdsk/libvdsk/vdsk.h ============================================================================== --- user/marcel/libvdsk/libvdsk/vdsk.h Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/vdsk.h Fri Aug 21 15:20:01 2015 (r286996) @@ -41,9 +41,9 @@ int vdsk_close(vdskctx); off_t vdsk_capacity(vdskctx); int vdsk_sectorsize(vdskctx); -int vdsk_read(vdskctx, const struct iovec *, int, off_t); -int vdsk_write(vdskctx, const struct iovec *, int, off_t); - +int vdsk_read(vdskctx, off_t, const struct iovec *, int); +int vdsk_write(vdskctx, off_t, const struct iovec *, int); +int vdsk_trim(vdskctx, off_t, ssize_t); int vdsk_flush(vdskctx); #endif /* __VDSK_H__ */ Modified: user/marcel/libvdsk/libvdsk/vdsk_int.h ============================================================================== --- user/marcel/libvdsk/libvdsk/vdsk_int.h Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/vdsk_int.h Fri Aug 21 15:20:01 2015 (r286996) @@ -48,8 +48,9 @@ struct vdsk_format { int (*probe)(struct vdsk *); int (*open)(struct vdsk *); int (*close)(struct vdsk *); - int (*read)(struct vdsk *, const struct iovec *, int, off_t); - int (*write)(struct vdsk *, const struct iovec *, int, off_t); + int (*read)(struct vdsk *, off_t, const struct iovec *, int); + int (*write)(struct vdsk *, off_t, const struct iovec *, int); + int (*trim)(struct vdsk *, off_t, ssize_t); int (*flush)(struct vdsk *); }; Modified: user/marcel/libvdsk/libvdsk/vhd.c ============================================================================== --- user/marcel/libvdsk/libvdsk/vhd.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/vhd.c Fri Aug 21 15:20:01 2015 (r286996) @@ -63,16 +63,24 @@ vhd_close(struct vdsk *vdsk __unused) } static int -vhd_read(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +vhd_read(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) { return (ENOSYS); } static int -vhd_write(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +vhd_write(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) +{ + + return (ENOSYS); +} + +static int +vhd_trim(struct vdsk *vdsk __unused, off_t offset __unused, + ssize_t length __unused) { return (ENOSYS); @@ -94,6 +102,7 @@ static struct vdsk_format vhd_format = { .close = vhd_close, .read = vhd_read, .write = vhd_write, + .trim = vhd_trim, .flush = vhd_flush, }; FORMAT_DEFINE(vhd_format); Modified: user/marcel/libvdsk/libvdsk/vmdk.c ============================================================================== --- user/marcel/libvdsk/libvdsk/vmdk.c Fri Aug 21 15:15:22 2015 (r286995) +++ user/marcel/libvdsk/libvdsk/vmdk.c Fri Aug 21 15:20:01 2015 (r286996) @@ -63,16 +63,24 @@ vmdk_close(struct vdsk *vdsk __unused) } static int -vmdk_read(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +vmdk_read(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) { return (ENOSYS); } static int -vmdk_write(struct vdsk *vdsk __unused, const struct iovec *iov __unused, - int iovcnt __unused, off_t offset __unused) +vmdk_write(struct vdsk *vdsk __unused, off_t offset __unused, + const struct iovec *iov __unused, int iovcnt __unused) +{ + + return (ENOSYS); +} + +static int +vmdk_trim(struct vdsk *vdsk __unused, off_t offset __unused, + ssize_t length __unused) { return (ENOSYS); @@ -94,6 +102,7 @@ static struct vdsk_format vmdk_format = .close = vmdk_close, .read = vmdk_read, .write = vmdk_write, + .trim = vmdk_trim, .flush = vmdk_flush, }; FORMAT_DEFINE(vmdk_format);