diff options
| author | oster <oster@NetBSD.org> | 2000-02-24 23:39:21 +0000 |
|---|---|---|
| committer | oster <oster@NetBSD.org> | 2000-02-24 23:39:21 +0000 |
| commit | bdd659fc7f2082fd88403d4f7658495e3b314d86 (patch) | |
| tree | c0b3f80134a7a51d5599f52d43548f80257dd1de /sys/dev/raidframe | |
| parent | a84d573e155dea7dca4909541eec5339816e30be (diff) | |
Deal with unconfiguring components in the autoconfigure case.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_driver.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/sys/dev/raidframe/rf_driver.c b/sys/dev/raidframe/rf_driver.c index bc0161cd07e..1908e79c23d 100644 --- a/sys/dev/raidframe/rf_driver.c +++ b/sys/dev/raidframe/rf_driver.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_driver.c,v 1.30 2000/02/23 03:44:02 oster Exp $ */ +/* $NetBSD: rf_driver.c,v 1.31 2000/02/24 23:39:21 oster Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. * All rights reserved. @@ -296,10 +296,17 @@ rf_UnconfigureVnodes( raidPtr ) for (r = 0; r < raidPtr->numRow; r++) { for (c = 0; c < raidPtr->numCol; c++) { printf("Closing vnode for row: %d col: %d\n", r, c); - if (raidPtr->raid_cinfo[r][c].ci_vp) { - VOP_UNLOCK(raidPtr->raid_cinfo[r][c].ci_vp, 0); - (void) vn_close(raidPtr->raid_cinfo[r][c].ci_vp, - FREAD | FWRITE, p->p_ucred, p); + if (raidPtr->raid_cinfo[r][c].ci_vp != NULL) { + if (raidPtr->Disks[r][c].auto_configured == 1) { + VOP_CLOSE(raidPtr->raid_cinfo[r][c].ci_vp, + FREAD, NOCRED, 0); + vput(raidPtr->raid_cinfo[r][c].ci_vp); + + } else { + VOP_UNLOCK(raidPtr->raid_cinfo[r][c].ci_vp, 0); + (void) vn_close(raidPtr->raid_cinfo[r][c].ci_vp, + FREAD | FWRITE, p->p_ucred, p); + } raidPtr->raid_cinfo[r][c].ci_vp = NULL; } else { printf("vnode was NULL\n"); @@ -310,9 +317,16 @@ rf_UnconfigureVnodes( raidPtr ) for (r = 0; r < raidPtr->numSpare; r++) { printf("Closing vnode for spare: %d\n", r); if (raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp) { - VOP_UNLOCK(raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp, 0); - (void) vn_close(raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp, - FREAD | FWRITE, p->p_ucred, p); + if (raidPtr->Disks[r][c].auto_configured == 1) { + VOP_CLOSE(raidPtr->raid_cinfo[0][raidPtr->numCol +r].ci_vp, + FREAD, NOCRED, 0); + vput(raidPtr->raid_cinfo[0][raidPtr->numCol +r].ci_vp); + + } else { + VOP_UNLOCK(raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp, 0); + (void) vn_close(raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp, + FREAD | FWRITE, p->p_ucred, p); + } raidPtr->raid_cinfo[0][raidPtr->numCol + r].ci_vp = NULL; } else { printf("vnode was NULL\n"); |
