summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authormartin <martin@NetBSD.org>2020-03-21 15:52:09 +0000
committermartin <martin@NetBSD.org>2020-03-21 15:52:09 +0000
commit4f2d73e6f81a404c140afe816619669c40c3dd41 (patch)
treefb99b371e50385b8b7e92c5151d7e9af7769a3a8 /sys
parent4414c647123430173c9d7f36453d0a63342a7658 (diff)
Pull up following revision(s) (requested by riastradh in ticket #795):
sys/dev/dksubr.c: revision 1.112 sys/arch/xen/xen/xbd_xenbus.c: revision 1.95 sys/dev/scsipi/sd.c: revision 1.328 sys/dev/dkvar.h: revision 1.32 sys/dev/ld.c: revision 1.109 sys/dev/cgd.c: revision 1.120 sys/dev/raidframe/rf_netbsdkintf.c: revision 1.380 sys/dev/ata/wd.c: revision 1.458 Add a flag to dk_dump for virtual disk devices. If a disk is backed by a physical medium other than itself, such as cgd(4), then it passes DK_DUMP_RECURSIVE to disable the recursion detection for dk_dump. If, however, a device represents a physical medium on its own, such as wd(4), then it passes 0 instead. With this, I can now dump to dk on cgd on dk on wd.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/xen/xen/xbd_xenbus.c6
-rw-r--r--sys/dev/ata/wd.c6
-rw-r--r--sys/dev/cgd.c6
-rw-r--r--sys/dev/dksubr.c12
-rw-r--r--sys/dev/dkvar.h6
-rw-r--r--sys/dev/ld.c6
-rw-r--r--sys/dev/raidframe/rf_netbsdkintf.c8
-rw-r--r--sys/dev/scsipi/sd.c6
8 files changed, 30 insertions, 26 deletions
diff --git a/sys/arch/xen/xen/xbd_xenbus.c b/sys/arch/xen/xen/xbd_xenbus.c
index 5976988dde2..d3b9a12f43a 100644
--- a/sys/arch/xen/xen/xbd_xenbus.c
+++ b/sys/arch/xen/xen/xbd_xenbus.c
@@ -1,4 +1,4 @@
-/* $NetBSD: xbd_xenbus.c,v 1.92 2019/02/02 12:32:55 cherry Exp $ */
+/* $NetBSD: xbd_xenbus.c,v 1.92.4.1 2020/03/21 15:52:09 martin Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.92 2019/02/02 12:32:55 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.92.4.1 2020/03/21 15:52:09 martin Exp $");
#include "opt_xen.h"
@@ -930,7 +930,7 @@ xbddump(dev_t dev, daddr_t blkno, void *va, size_t size)
DPRINTF(("xbddump(%d, %" PRId64 ", %p, %lu)\n", dev, blkno, va,
(unsigned long)size));
- return dk_dump(&sc->sc_dksc, dev, blkno, va, size);
+ return dk_dump(&sc->sc_dksc, dev, blkno, va, size, 0);
}
static int
diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c
index aa52d8a7425..4cc9fbe675a 100644
--- a/sys/dev/ata/wd.c
+++ b/sys/dev/ata/wd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: wd.c,v 1.452.2.1 2020/03/21 15:18:57 martin Exp $ */
+/* $NetBSD: wd.c,v 1.452.2.2 2020/03/21 15:52:09 martin Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.452.2.1 2020/03/21 15:18:57 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.452.2.2 2020/03/21 15:52:09 martin Exp $");
#include "opt_ata.h"
#include "opt_wd.h"
@@ -1570,7 +1570,7 @@ wddump(dev_t dev, daddr_t blkno, void *va, size_t size)
return (ENXIO);
dksc = &wd->sc_dksc;
- return dk_dump(dksc, dev, blkno, va, size);
+ return dk_dump(dksc, dev, blkno, va, size, 0);
}
static int
diff --git a/sys/dev/cgd.c b/sys/dev/cgd.c
index c73a364908c..624e6e61fb2 100644
--- a/sys/dev/cgd.c
+++ b/sys/dev/cgd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.116.10.1 2020/03/21 15:18:57 martin Exp $ */
+/* $NetBSD: cgd.c,v 1.116.10.2 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.116.10.1 2020/03/21 15:18:57 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.116.10.2 2020/03/21 15:52:09 martin Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -770,7 +770,7 @@ cgddump(dev_t dev, daddr_t blkno, void *va, size_t size)
DPRINTF_FOLLOW(("cgddump(0x%"PRIx64", %" PRId64 ", %p, %lu)\n",
dev, blkno, va, (unsigned long)size));
GETCGD_SOFTC(cs, dev);
- return dk_dump(&cs->sc_dksc, dev, blkno, va, size);
+ return dk_dump(&cs->sc_dksc, dev, blkno, va, size, DK_DUMP_RECURSIVE);
}
/*
diff --git a/sys/dev/dksubr.c b/sys/dev/dksubr.c
index 90ba04166ef..2e82b614b91 100644
--- a/sys/dev/dksubr.c
+++ b/sys/dev/dksubr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dksubr.c,v 1.109 2019/06/28 14:56:46 jmcneill Exp $ */
+/* $NetBSD: dksubr.c,v 1.109.2.1 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.109 2019/06/28 14:56:46 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.109.2.1 2020/03/21 15:52:09 martin Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -761,7 +761,7 @@ static volatile int dk_dumping = 0;
/* ARGSUSED */
int
dk_dump(struct dk_softc *dksc, dev_t dev,
- daddr_t blkno, void *vav, size_t size)
+ daddr_t blkno, void *vav, size_t size, int flags)
{
const struct dkdriver *dkd = dksc->sc_dkdev.dk_driver;
struct disk_geom *dg = &dksc->sc_dkdev.dk_geom;
@@ -784,7 +784,8 @@ dk_dump(struct dk_softc *dksc, dev_t dev,
/* ensure that we are not already dumping */
if (dk_dumping)
return EFAULT;
- dk_dumping = 1;
+ if ((flags & DK_DUMP_RECURSIVE) == 0)
+ dk_dumping = 1;
if (dkd->d_dumpblocks == NULL) {
DPRINTF(DKDB_DUMP, ("%s: no dumpblocks\n", __func__));
@@ -863,7 +864,8 @@ dk_dump(struct dk_softc *dksc, dev_t dev,
va += nblk * lp->d_secsize;
}
- dk_dumping = 0;
+ if ((flags & DK_DUMP_RECURSIVE) == 0)
+ dk_dumping = 0;
return 0;
}
diff --git a/sys/dev/dkvar.h b/sys/dev/dkvar.h
index 0be2cd0d47c..29b4be0e652 100644
--- a/sys/dev/dkvar.h
+++ b/sys/dev/dkvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: dkvar.h,v 1.30 2017/11/01 19:15:31 mlelstv Exp $ */
+/* $NetBSD: dkvar.h,v 1.30.10.1 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -83,6 +83,8 @@ struct dk_softc {
((_dksc)->sc_dkdev.dk_bopenmask & (_pmask) && \
((_dksc)->sc_dkdev.dk_copenmask & (_pmask))))
+#define DK_DUMP_RECURSIVE __BIT(0) /* this is a virtual disk */
+
/*
* Functions that are exported to the pseudo disk implementations:
*/
@@ -106,7 +108,7 @@ int dk_size(struct dk_softc *, dev_t);
int dk_ioctl(struct dk_softc *, dev_t,
u_long, void *, int, struct lwp *);
int dk_dump(struct dk_softc *, dev_t,
- daddr_t, void *, size_t);
+ daddr_t, void *, size_t, int);
void dk_getdisklabel(struct dk_softc *, dev_t);
void dk_getdefaultlabel(struct dk_softc *, struct disklabel *);
diff --git a/sys/dev/ld.c b/sys/dev/ld.c
index c07477c4b95..c35c39a8910 100644
--- a/sys/dev/ld.c
+++ b/sys/dev/ld.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ld.c,v 1.106.4.1 2020/02/11 08:37:34 martin Exp $ */
+/* $NetBSD: ld.c,v 1.106.4.2 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.106.4.1 2020/02/11 08:37:34 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.106.4.2 2020/03/21 15:52:09 martin Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -507,7 +507,7 @@ lddump(dev_t dev, daddr_t blkno, void *va, size_t size)
if ((sc->sc_flags & LDF_ENABLED) == 0)
return (ENODEV);
- return dk_dump(dksc, dev, blkno, va, size);
+ return dk_dump(dksc, dev, blkno, va, size, 0);
}
static int
diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c
index d9a7c7ba469..ba3aaae04ef 100644
--- a/sys/dev/raidframe/rf_netbsdkintf.c
+++ b/sys/dev/raidframe/rf_netbsdkintf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_netbsdkintf.c,v 1.376 2019/03/01 11:06:56 pgoyette Exp $ */
+/* $NetBSD: rf_netbsdkintf.c,v 1.376.4.1 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * from: Utah $Hdr: cd.c 1.6 90/11/28$
+ * from: Utah $Hdr$
*
* @(#)cd.c 8.2 (Berkeley) 11/16/93
*/
@@ -101,7 +101,7 @@
***********************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.376 2019/03/01 11:06:56 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.376.4.1 2020/03/21 15:52:09 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_raid_autoconfig.h"
@@ -663,7 +663,7 @@ raiddump(dev_t dev, daddr_t blkno, void *va, size_t size)
*/
blkno += RF_PROTECTED_SECTORS;
- return dk_dump(dksc, dev, blkno, va, size);
+ return dk_dump(dksc, dev, blkno, va, size, DK_DUMP_RECURSIVE);
}
static int
diff --git a/sys/dev/scsipi/sd.c b/sys/dev/scsipi/sd.c
index d8812542a4f..1608582974b 100644
--- a/sys/dev/scsipi/sd.c
+++ b/sys/dev/scsipi/sd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sd.c,v 1.327 2019/03/19 06:59:40 mlelstv Exp $ */
+/* $NetBSD: sd.c,v 1.327.4.1 2020/03/21 15:52:09 martin Exp $ */
/*-
* Copyright (c) 1998, 2003, 2004 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.327 2019/03/19 06:59:40 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.327.4.1 2020/03/21 15:52:09 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_scsi.h"
@@ -1192,7 +1192,7 @@ sddump(dev_t dev, daddr_t blkno, void *va, size_t size)
if ((periph->periph_flags & PERIPH_MEDIA_LOADED) == 0)
return (ENXIO);
- return dk_dump(dksc, dev, blkno, va, size);
+ return dk_dump(dksc, dev, blkno, va, size, 0);
}
static int