summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2010-11-19 06:44:33 +0000
committerdholland <dholland@NetBSD.org>2010-11-19 06:44:33 +0000
commit8f6ed30d57969451cf6dee44963bdbfad19bea01 (patch)
tree4d7f4fee51c9f0d03aeb78a6de5fe56a3a096106 /sys/dev/raidframe
parent0ce666ede04fa90ffe8633b9bd63f0454d2c09ff (diff)
Introduce struct pathbuf. This is an abstraction to hold a pathname
and the metadata required to interpret it. Callers of namei must now create a pathbuf and pass it to NDINIT (instead of a string and a uio_seg), then destroy the pathbuf after the namei session is complete. Update all namei call sites accordingly. Add a pathbuf(9) man page and update namei(9). The pathbuf interface also now appears in a couple of related additional places that were passing string/uio_seg pairs that were later fed into NDINIT. Update other call sites accordingly.
Diffstat (limited to 'sys/dev/raidframe')
-rw-r--r--sys/dev/raidframe/rf_copyback.c18
-rw-r--r--sys/dev/raidframe/rf_disks.c15
-rw-r--r--sys/dev/raidframe/rf_reconstruct.c14
3 files changed, 37 insertions, 10 deletions
diff --git a/sys/dev/raidframe/rf_copyback.c b/sys/dev/raidframe/rf_copyback.c
index c92615678d1..423d998772c 100644
--- a/sys/dev/raidframe/rf_copyback.c
+++ b/sys/dev/raidframe/rf_copyback.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_copyback.c,v 1.43 2010/11/01 02:35:25 mrg Exp $ */
+/* $NetBSD: rf_copyback.c,v 1.44 2010/11/19 06:44:40 dholland Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -38,7 +38,7 @@
****************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.43 2010/11/01 02:35:25 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.44 2010/11/19 06:44:40 dholland Exp $");
#include <dev/raidframe/raidframevar.h>
@@ -81,6 +81,7 @@ rf_ConfigureCopyback(RF_ShutdownList_t **listp)
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <sys/vnode.h>
+#include <sys/namei.h> /* for pathbuf */
/* do a complete copyback */
void
@@ -93,6 +94,7 @@ rf_CopybackReconstructedData(RF_Raid_t *raidPtr)
RF_RaidDisk_t *badDisk;
char *databuf;
+ struct pathbuf *dev_pb;
struct vnode *vp;
struct vattr va;
@@ -133,8 +135,16 @@ rf_CopybackReconstructedData(RF_Raid_t *raidPtr)
printf("About to (re-)open the device: %s\n",
raidPtr->Disks[fcol].devname);
- retcode = dk_lookup(raidPtr->Disks[fcol].devname, curlwp, &vp,
- UIO_SYSSPACE);
+ dev_pb = pathbuf_create(raidPtr->Disks[fcol].devname);
+ if (dev_pb == NULL) {
+ /* shouldn't happen unless maybe the system is OOMing */
+ printf("raid%d: copyback: pathbuf_create on device: %s failed: %d!\n",
+ raidPtr->raidid, raidPtr->Disks[fcol].devname,
+ ENOMEM);
+ return;
+ }
+ retcode = dk_lookup(dev_pb, curlwp, &vp);
+ pathbuf_destroy(dev_pb);
if (retcode) {
printf("raid%d: copyback: dk_lookup on device: %s failed: %d!\n",
diff --git a/sys/dev/raidframe/rf_disks.c b/sys/dev/raidframe/rf_disks.c
index 81a22b89b46..a659a5cf6de 100644
--- a/sys/dev/raidframe/rf_disks.c
+++ b/sys/dev/raidframe/rf_disks.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_disks.c,v 1.74 2010/11/01 02:35:25 mrg Exp $ */
+/* $NetBSD: rf_disks.c,v 1.75 2010/11/19 06:44:40 dholland Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -60,7 +60,7 @@
***************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.74 2010/11/01 02:35:25 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.75 2010/11/19 06:44:40 dholland Exp $");
#include <dev/raidframe/raidframevar.h>
@@ -78,6 +78,7 @@ __KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.74 2010/11/01 02:35:25 mrg Exp $");
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <sys/vnode.h>
+#include <sys/namei.h> /* for pathbuf */
#include <sys/kauth.h>
static int rf_AllocDiskStructures(RF_Raid_t *, RF_Config_t *);
@@ -569,6 +570,7 @@ rf_ConfigureDisk(RF_Raid_t *raidPtr, char *bf, RF_RaidDisk_t *diskPtr,
RF_RowCol_t col)
{
char *p;
+ struct pathbuf *pb;
struct vnode *vp;
struct vattr va;
int error;
@@ -593,7 +595,14 @@ rf_ConfigureDisk(RF_Raid_t *raidPtr, char *bf, RF_RaidDisk_t *diskPtr,
return (0);
}
- error = dk_lookup(diskPtr->devname, curlwp, &vp, UIO_SYSSPACE);
+ pb = pathbuf_create(diskPtr->devname);
+ if (pb == NULL) {
+ printf("pathbuf_create for device: %s failed!\n",
+ diskPtr->devname);
+ return ENOMEM;
+ }
+ error = dk_lookup(pb, curlwp, &vp);
+ pathbuf_destroy(pb);
if (error) {
printf("dk_lookup on device: %s failed!\n", diskPtr->devname);
if (error == ENXIO) {
diff --git a/sys/dev/raidframe/rf_reconstruct.c b/sys/dev/raidframe/rf_reconstruct.c
index 2a1282ce1ee..d6276dc5e06 100644
--- a/sys/dev/raidframe/rf_reconstruct.c
+++ b/sys/dev/raidframe/rf_reconstruct.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_reconstruct.c,v 1.109 2010/11/01 02:35:25 mrg Exp $ */
+/* $NetBSD: rf_reconstruct.c,v 1.110 2010/11/19 06:44:40 dholland Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -33,7 +33,7 @@
************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.109 2010/11/01 02:35:25 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.110 2010/11/19 06:44:40 dholland Exp $");
#include <sys/param.h>
#include <sys/time.h>
@@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.109 2010/11/01 02:35:25 mrg Exp
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <sys/vnode.h>
+#include <sys/namei.h> /* for pathbuf */
#include <dev/raidframe/raidframevar.h>
#include "rf_raid.h"
@@ -348,6 +349,7 @@ rf_ReconstructInPlace(RF_Raid_t *raidPtr, RF_RowCol_t col)
RF_ComponentLabel_t *c_label;
int numDisksDone = 0, rc;
struct partinfo dpart;
+ struct pathbuf *pb;
struct vnode *vp;
struct vattr va;
int retcode;
@@ -428,7 +430,13 @@ rf_ReconstructInPlace(RF_Raid_t *raidPtr, RF_RowCol_t col)
raidPtr->Disks[col].devname);
#endif
RF_UNLOCK_MUTEX(raidPtr->mutex);
- retcode = dk_lookup(raidPtr->Disks[col].devname, curlwp, &vp, UIO_SYSSPACE);
+ pb = pathbuf_create(raidPtr->Disks[col].devname);
+ if (pb == NULL) {
+ retcode = ENOMEM;
+ } else {
+ retcode = dk_lookup(pb, curlwp, &vp);
+ pathbuf_destroy(pb);
+ }
if (retcode) {
printf("raid%d: rebuilding: dk_lookup on device: %s failed: %d!\n",raidPtr->raidid,