diff options
| author | oster <oster@NetBSD.org> | 2000-02-23 02:03:03 +0000 |
|---|---|---|
| committer | oster <oster@NetBSD.org> | 2000-02-23 02:03:03 +0000 |
| commit | 6aaac32240a92d3a6d9b96f7d586de85ef611f21 (patch) | |
| tree | 6278b49024391a7ab29cc1d10eb5557e0b94d5b6 /sys/dev/raidframe | |
| parent | d84e4ed0195c75d86ea00a0b51a341f41dd417e0 (diff) | |
Do a better job of (re)initializing the component labels after
a reconstruct or a copyback.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_copyback.c | 31 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconstruct.c | 13 |
2 files changed, 22 insertions, 22 deletions
diff --git a/sys/dev/raidframe/rf_copyback.c b/sys/dev/raidframe/rf_copyback.c index 8f8bbd75405..04c864ebe6b 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.12 2000/01/09 01:29:28 oster Exp $ */ +/* $NetBSD: rf_copyback.c,v 1.13 2000/02/23 02:03:03 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -126,11 +126,21 @@ rf_CopybackReconstructedData(raidPtr) if (raidPtr->raid_cinfo[frow][fcol].ci_vp != NULL) { printf("Closed the open device: %s\n", raidPtr->Disks[frow][fcol].devname); - VOP_UNLOCK(raidPtr->raid_cinfo[frow][fcol].ci_vp, 0); - (void) vn_close(raidPtr->raid_cinfo[frow][fcol].ci_vp, - FREAD | FWRITE, proc->p_ucred, proc); + if (raidPtr->Disks[frow][fcol].auto_configured == 1) { + VOP_CLOSE(raidPtr->raid_cinfo[frow][fcol].ci_vp, + FREAD, NOCRED, 0); + vput(raidPtr->raid_cinfo[frow][fcol].ci_vp); + } else { + VOP_UNLOCK(raidPtr->raid_cinfo[frow][fcol].ci_vp, 0); + (void) vn_close(raidPtr->raid_cinfo[frow][fcol].ci_vp, + FREAD | FWRITE, proc->p_ucred, proc); + } raidPtr->raid_cinfo[frow][fcol].ci_vp = NULL; + } + /* note that this disk was *not* auto_configured (any longer) */ + raidPtr->Disks[frow][fcol].auto_configured = 0; + printf("About to (re-)open the device: %s\n", raidPtr->Disks[frow][fcol].devname); @@ -231,17 +241,12 @@ rf_CopybackReconstructedData(raidPtr) raidread_component_label( raidPtr->raid_cinfo[frow][fcol].ci_dev, raidPtr->raid_cinfo[frow][fcol].ci_vp, &c_label); - - c_label.version = RF_COMPONENT_LABEL_VERSION; - c_label.mod_counter = raidPtr->mod_counter; - c_label.serial_number = raidPtr->serial_number; + + raid_init_component_label( raidPtr, &c_label ); + c_label.row = frow; c_label.column = fcol; - c_label.num_rows = raidPtr->numRow; - c_label.num_columns = raidPtr->numCol; - c_label.clean = RF_RAID_DIRTY; - c_label.status = rf_ds_optimal; - + raidwrite_component_label( raidPtr->raid_cinfo[frow][fcol].ci_dev, raidPtr->raid_cinfo[frow][fcol].ci_vp, &c_label); diff --git a/sys/dev/raidframe/rf_reconstruct.c b/sys/dev/raidframe/rf_reconstruct.c index 84f800ead79..8925f40f759 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.15 2000/02/13 04:53:57 oster Exp $ */ +/* $NetBSD: rf_reconstruct.c,v 1.16 2000/02/23 02:03:03 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -583,16 +583,11 @@ rf_ReconstructInPlace(raidPtr, row, col) raidread_component_label(raidPtr->raid_cinfo[row][col].ci_dev, raidPtr->raid_cinfo[row][col].ci_vp, &c_label); - - c_label.version = RF_COMPONENT_LABEL_VERSION; - c_label.mod_counter = raidPtr->mod_counter; - c_label.serial_number = raidPtr->serial_number; + + raid_init_component_label(raidPtr, &c_label); + c_label.row = row; c_label.column = col; - c_label.num_rows = raidPtr->numRow; - c_label.num_columns = raidPtr->numCol; - c_label.clean = RF_RAID_DIRTY; - c_label.status = rf_ds_optimal; raidwrite_component_label(raidPtr->raid_cinfo[row][col].ci_dev, raidPtr->raid_cinfo[row][col].ci_vp, |
