From owner-dev-commits-src-main@freebsd.org Thu Aug 19 10:31:43 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B394866269C; Thu, 19 Aug 2021 10:31:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Gr1KC4ZrBz4Zxl; Thu, 19 Aug 2021 10:31:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7AD8423BB8; Thu, 19 Aug 2021 10:31:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 17JAVhW0067448; Thu, 19 Aug 2021 10:31:43 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 17JAVhdJ067447; Thu, 19 Aug 2021 10:31:43 GMT (envelope-from git) Date: Thu, 19 Aug 2021 10:31:43 GMT Message-Id: <202108191031.17JAVhdJ067447@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ka Ho Ng Subject: git: 78267c2e703c - main - md: Replace BIO_DELETE emulation with vn_deallocate(9) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: khng X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 78267c2e703c236d37692da77a4ee92da9502943 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Aug 2021 10:31:43 -0000 The branch main has been updated by khng: URL: https://cgit.FreeBSD.org/src/commit/?id=78267c2e703c236d37692da77a4ee92da9502943 commit 78267c2e703c236d37692da77a4ee92da9502943 Author: Ka Ho Ng AuthorDate: 2021-08-19 10:30:13 +0000 Commit: Ka Ho Ng CommitDate: 2021-08-19 10:30:13 +0000 md: Replace BIO_DELETE emulation with vn_deallocate(9) Both zero-filling and/or deallocation can be done with vn_deallocate(9). Sponsored by: The FreeBSD Foundation Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D28899 --- sys/dev/md/md.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index c5c90d9173ad..1627ee2e5fa6 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -875,7 +875,7 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) struct buf *pb; bus_dma_segment_t *vlist; struct thread *td; - off_t iolen, iostart, len, zerosize; + off_t iolen, iostart, off, len; int ma_offs, npages; switch (bp->bio_cmd) { @@ -883,9 +883,9 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) auio.uio_rw = UIO_READ; break; case BIO_WRITE: - case BIO_DELETE: auio.uio_rw = UIO_WRITE; break; + case BIO_DELETE: case BIO_FLUSH: break; default: @@ -897,6 +897,7 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) pb = NULL; piov = NULL; ma_offs = bp->bio_ma_offset; + off = bp->bio_offset; len = bp->bio_length; /* @@ -914,6 +915,11 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) VOP_UNLOCK(vp); vn_finished_write(mp); return (error); + } else if (bp->bio_cmd == BIO_DELETE) { + error = vn_deallocate(vp, &off, &len, 0, + sc->flags & MD_ASYNC ? 0 : IO_SYNC, sc->cred, NOCRED); + bp->bio_resid = len; + return (error); } auio.uio_offset = (vm_ooffset_t)bp->bio_offset; @@ -921,25 +927,7 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) auio.uio_segflg = UIO_SYSSPACE; auio.uio_td = td; - if (bp->bio_cmd == BIO_DELETE) { - /* - * Emulate BIO_DELETE by writing zeros. - */ - zerosize = ZERO_REGION_SIZE - - (ZERO_REGION_SIZE % sc->sectorsize); - auio.uio_iovcnt = howmany(bp->bio_length, zerosize); - piov = malloc(sizeof(*piov) * auio.uio_iovcnt, M_MD, M_WAITOK); - auio.uio_iov = piov; - while (len > 0) { - piov->iov_base = __DECONST(void *, zero_region); - piov->iov_len = len; - if (len > zerosize) - piov->iov_len = zerosize; - len -= piov->iov_len; - piov++; - } - piov = auio.uio_iov; - } else if ((bp->bio_flags & BIO_VLIST) != 0) { + if ((bp->bio_flags & BIO_VLIST) != 0) { piov = malloc(sizeof(*piov) * bp->bio_ma_n, M_MD, M_WAITOK); auio.uio_iov = piov; vlist = (bus_dma_segment_t *)bp->bio_data;