diff options
| author | dholland <dholland@NetBSD.org> | 2010-11-19 06:44:33 +0000 |
|---|---|---|
| committer | dholland <dholland@NetBSD.org> | 2010-11-19 06:44:33 +0000 |
| commit | 8f6ed30d57969451cf6dee44963bdbfad19bea01 (patch) | |
| tree | 4d7f4fee51c9f0d03aeb78a6de5fe56a3a096106 /sys/dev/raidframe | |
| parent | 0ce666ede04fa90ffe8633b9bd63f0454d2c09ff (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.c | 18 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_disks.c | 15 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconstruct.c | 14 |
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, |
