Module Name: src Committed By: jdolecek Date: Tue Apr 14 08:22:00 UTC 2020
Modified Files: src/sys/arch/xen/xen: xbd_xenbus.c Log Message: if grant fails also revoke the grants for previous segments, fixes grant leak on grant error To generate a diff of this commit: cvs rdiff -u -r1.107 -r1.108 src/sys/arch/xen/xen/xbd_xenbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/xen/xbd_xenbus.c diff -u src/sys/arch/xen/xen/xbd_xenbus.c:1.107 src/sys/arch/xen/xen/xbd_xenbus.c:1.108 --- src/sys/arch/xen/xen/xbd_xenbus.c:1.107 Mon Apr 13 20:09:13 2020 +++ src/sys/arch/xen/xen/xbd_xenbus.c Tue Apr 14 08:21:59 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: xbd_xenbus.c,v 1.107 2020/04/13 20:09:13 jdolecek Exp $ */ +/* $NetBSD: xbd_xenbus.c,v 1.108 2020/04/14 08:21:59 jdolecek Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.107 2020/04/13 20:09:13 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.108 2020/04/14 08:21:59 jdolecek Exp $"); #include "opt_xen.h" @@ -1049,6 +1049,12 @@ xbd_diskstart(device_t self, struct buf &xbdreq->req_gntref[seg]))) { printf("%s: %s: xengnt_grant_access failed", device_xname(sc->sc_dksc.sc_dev), __func__); + if (seg > 0) { + for (; --seg >= 0; ) { + xengnt_revoke_access( + xbdreq->req_gntref[seg]); + } + } bus_dmamap_unload(sc->sc_xbusd->xbusd_dmat, xbdreq->req_dmamap); SLIST_INSERT_HEAD(&sc->sc_xbdreq_head, xbdreq,