summaryrefslogtreecommitdiff
path: root/sys/dev/dm
diff options
context:
space:
mode:
authorhannken <hannken@NetBSD.org>2014-06-14 07:39:00 +0000
committerhannken <hannken@NetBSD.org>2014-06-14 07:39:00 +0000
commit972c4e43674c8f7855eb1ff4ccb9c2ec3be05bc0 (patch)
treee2c9bfd67c6e90a9ceb05b5d48bc465955949342 /sys/dev/dm
parent88f50c82d078baa660c1e8b3792370f7b177ce03 (diff)
Change dk_lookup() to return an anonymous vnode not associated with
any file system. Change all consumers of dk_lookup() to get the device from "v_rdev" instead of VOP_GETATTR() as specfs does not support VOP_GETATTR(). Devices obtained with dk_lookup() will no longer disappear on forced unmounts. Fix for PR kern/48849 (root mirror raid fails on shutdown) Welcome to 6.99.44
Diffstat (limited to 'sys/dev/dm')
-rw-r--r--sys/dev/dm/dm.h4
-rw-r--r--sys/dev/dm/dm_target_linear.c14
-rw-r--r--sys/dev/dm/dm_target_snapshot.c25
-rw-r--r--sys/dev/dm/dm_target_stripe.c14
4 files changed, 14 insertions, 43 deletions
diff --git a/sys/dev/dm/dm.h b/sys/dev/dm/dm.h
index a2e6b561fa1..a9167c1336c 100644
--- a/sys/dev/dm/dm.h
+++ b/sys/dev/dm/dm.h
@@ -1,4 +1,4 @@
-/* $NetBSD: dm.h,v 1.25 2013/12/09 09:35:16 wiz Exp $ */
+/* $NetBSD: dm.h,v 1.26 2014/06/14 07:39:00 hannken Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -49,6 +49,8 @@
#include <sys/disk.h>
#include <sys/disklabel.h>
+#include <miscfs/specfs/specdev.h> /* for v_rdev */
+
#include <prop/proplib.h>
#define DM_MAX_TYPE_NAME 16
diff --git a/sys/dev/dm/dm_target_linear.c b/sys/dev/dm/dm_target_linear.c
index 7a03f173fe2..098445be784 100644
--- a/sys/dev/dm/dm_target_linear.c
+++ b/sys/dev/dm/dm_target_linear.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dm_target_linear.c,v 1.13 2011/10/14 09:23:30 hannken Exp $ */
+/* $NetBSD: dm_target_linear.c,v 1.14 2014/06/14 07:39:00 hannken Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -192,22 +192,14 @@ int
dm_target_linear_deps(dm_table_entry_t * table_en, prop_array_t prop_array)
{
dm_target_linear_config_t *tlc;
- struct vattr va;
-
- int error;
if (table_en->target_config == NULL)
return ENOENT;
tlc = table_en->target_config;
- vn_lock(tlc->pdev->pdev_vnode, LK_SHARED | LK_RETRY);
- error = VOP_GETATTR(tlc->pdev->pdev_vnode, &va, curlwp->l_cred);
- VOP_UNLOCK(tlc->pdev->pdev_vnode);
- if (error != 0)
- return error;
-
- prop_array_add_uint64(prop_array, (uint64_t) va.va_rdev);
+ prop_array_add_uint64(prop_array,
+ (uint64_t) tlc->pdev->pdev_vnode->v_rdev);
return 0;
}
diff --git a/sys/dev/dm/dm_target_snapshot.c b/sys/dev/dm/dm_target_snapshot.c
index 72d7cd43848..685e94ac6f3 100644
--- a/sys/dev/dm/dm_target_snapshot.c
+++ b/sys/dev/dm/dm_target_snapshot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dm_target_snapshot.c,v 1.15 2011/10/14 09:23:30 hannken Exp $ */
+/* $NetBSD: dm_target_snapshot.c,v 1.16 2014/06/14 07:39:00 hannken Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -348,33 +348,18 @@ dm_target_snapshot_deps(dm_table_entry_t * table_en,
prop_array_t prop_array)
{
dm_target_snapshot_config_t *tsc;
- struct vattr va;
-
- int error;
if (table_en->target_config == NULL)
return 0;
tsc = table_en->target_config;
- vn_lock(tsc->tsc_snap_dev->pdev_vnode, LK_SHARED | LK_RETRY);
- error = VOP_GETATTR(tsc->tsc_snap_dev->pdev_vnode, &va, curlwp->l_cred);
- VOP_UNLOCK(tsc->tsc_snap_dev->pdev_vnode);
- if (error != 0)
- return error;
-
- prop_array_add_uint64(prop_array, (uint64_t) va.va_rdev);
+ prop_array_add_uint64(prop_array,
+ (uint64_t) tsc->tsc_snap_dev->pdev_vnode->v_rdev);
if (tsc->tsc_persistent_dev) {
-
- vn_lock(tsc->tsc_cow_dev->pdev_vnode, LK_SHARED | LK_RETRY);
- error = VOP_GETATTR(tsc->tsc_cow_dev->pdev_vnode, &va,
- curlwp->l_cred);
- VOP_UNLOCK(tsc->tsc_cow_dev->pdev_vnode);
- if (error != 0)
- return error;
-
- prop_array_add_uint64(prop_array, (uint64_t) va.va_rdev);
+ prop_array_add_uint64(prop_array,
+ (uint64_t) tsc->tsc_cow_dev->pdev_vnode->v_rdev);
}
return 0;
diff --git a/sys/dev/dm/dm_target_stripe.c b/sys/dev/dm/dm_target_stripe.c
index 8bd4c8c1a98..de5352a8d01 100644
--- a/sys/dev/dm/dm_target_stripe.c
+++ b/sys/dev/dm/dm_target_stripe.c
@@ -1,4 +1,4 @@
-/*$NetBSD: dm_target_stripe.c,v 1.18 2012/08/07 16:11:11 haad Exp $*/
+/*$NetBSD: dm_target_stripe.c,v 1.19 2014/06/14 07:39:00 hannken Exp $*/
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -319,9 +319,6 @@ dm_target_stripe_deps(dm_table_entry_t * table_en, prop_array_t prop_array)
{
dm_target_stripe_config_t *tsc;
dm_target_linear_config_t *tlc;
- struct vattr va;
-
- int error;
if (table_en->target_config == NULL)
return ENOENT;
@@ -329,13 +326,8 @@ dm_target_stripe_deps(dm_table_entry_t * table_en, prop_array_t prop_array)
tsc = table_en->target_config;
TAILQ_FOREACH(tlc, &tsc->stripe_devs, entries) {
- vn_lock(tlc->pdev->pdev_vnode, LK_SHARED | LK_RETRY);
- error = VOP_GETATTR(tlc->pdev->pdev_vnode, &va, curlwp->l_cred);
- VOP_UNLOCK(tlc->pdev->pdev_vnode);
- if (error != 0)
- return error;
-
- prop_array_add_uint64(prop_array, (uint64_t) va.va_rdev);
+ prop_array_add_uint64(prop_array,
+ (uint64_t) tlc->pdev->pdev_vnode->v_rdev);
}
return 0;