diff options
| author | oster <oster@NetBSD.org> | 2004-03-20 17:30:40 +0000 |
|---|---|---|
| committer | oster <oster@NetBSD.org> | 2004-03-20 17:30:40 +0000 |
| commit | 06f16f554fb668530f457261f0788af13f09c3f8 (patch) | |
| tree | 84e316cfa1fbfb904f1aa5e7043f5a76b944a7a7 /sys/dev/raidframe | |
| parent | 57f6eb7ead57a24a51c8e11e4e9318876466a8e6 (diff) | |
NO_STRIPE_LOCKS is never set, so this code will always execute.
Remove conditionals, and left-shift code.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_states.c | 127 |
1 files changed, 62 insertions, 65 deletions
diff --git a/sys/dev/raidframe/rf_states.c b/sys/dev/raidframe/rf_states.c index e3cff102977..2ceb64465cc 100644 --- a/sys/dev/raidframe/rf_states.c +++ b/sys/dev/raidframe/rf_states.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_states.c,v 1.31 2004/03/19 01:56:03 oster Exp $ */ +/* $NetBSD: rf_states.c,v 1.32 2004/03/20 17:30:40 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_states.c,v 1.31 2004/03/19 01:56:03 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_states.c,v 1.32 2004/03/20 17:30:40 oster Exp $"); #include <sys/errno.h> @@ -382,76 +382,75 @@ rf_State_Lock(RF_RaidAccessDesc_t *desc) RF_Raid_t *raidPtr = desc->raidPtr; RF_AccessStripeMapHeader_t *asmh = desc->asmap; RF_AccessStripeMap_t *asm_p; + RF_StripeNum_t lastStripeID = -1; int suspended = RF_FALSE; #if RF_ACC_TRACE > 0 RF_ETIMER_START(timer); #endif - if (!(raidPtr->Layout.map->flags & RF_NO_STRIPE_LOCKS)) { - RF_StripeNum_t lastStripeID = -1; - - /* acquire each lock that we don't already hold */ - for (asm_p = asmh->stripeMap; asm_p; asm_p = asm_p->next) { - RF_ASSERT(RF_IO_IS_R_OR_W(desc->type)); - if (!rf_suppressLocksAndLargeWrites && - asm_p->parityInfo && - !(desc->flags & RF_DAG_SUPPRESS_LOCKS) && - !(asm_p->flags & RF_ASM_FLAGS_LOCK_TRIED)) { - asm_p->flags |= RF_ASM_FLAGS_LOCK_TRIED; + + /* acquire each lock that we don't already hold */ + for (asm_p = asmh->stripeMap; asm_p; asm_p = asm_p->next) { + RF_ASSERT(RF_IO_IS_R_OR_W(desc->type)); + if (!rf_suppressLocksAndLargeWrites && + asm_p->parityInfo && + !(desc->flags & RF_DAG_SUPPRESS_LOCKS) && + !(asm_p->flags & RF_ASM_FLAGS_LOCK_TRIED)) { + asm_p->flags |= RF_ASM_FLAGS_LOCK_TRIED; /* locks must be acquired hierarchically */ - RF_ASSERT(asm_p->stripeID > lastStripeID); - lastStripeID = asm_p->stripeID; - - RF_INIT_LOCK_REQ_DESC(asm_p->lockReqDesc, desc->type, - (void (*) (struct buf *)) rf_ContinueRaidAccess, desc, asm_p, - raidPtr->Layout.dataSectorsPerStripe); - if (rf_AcquireStripeLock(raidPtr->lockTable, asm_p->stripeID, - &asm_p->lockReqDesc)) { - suspended = RF_TRUE; - break; - } + RF_ASSERT(asm_p->stripeID > lastStripeID); + lastStripeID = asm_p->stripeID; + + RF_INIT_LOCK_REQ_DESC(asm_p->lockReqDesc, desc->type, + (void (*) (struct buf *)) rf_ContinueRaidAccess, desc, asm_p, + raidPtr->Layout.dataSectorsPerStripe); + if (rf_AcquireStripeLock(raidPtr->lockTable, asm_p->stripeID, + &asm_p->lockReqDesc)) { + suspended = RF_TRUE; + break; } - if (desc->type == RF_IO_TYPE_WRITE && - raidPtr->status == rf_rs_reconstructing) { - if (!(asm_p->flags & RF_ASM_FLAGS_FORCE_TRIED)) { - int val; - - asm_p->flags |= RF_ASM_FLAGS_FORCE_TRIED; - val = rf_ForceOrBlockRecon(raidPtr, asm_p, - (void (*) (RF_Raid_t *, void *)) rf_ContinueRaidAccess, desc); - if (val == 0) { - asm_p->flags |= RF_ASM_FLAGS_RECON_BLOCKED; - } else { - suspended = RF_TRUE; - break; - } + } + if (desc->type == RF_IO_TYPE_WRITE && + raidPtr->status == rf_rs_reconstructing) { + if (!(asm_p->flags & RF_ASM_FLAGS_FORCE_TRIED)) { + int val; + + asm_p->flags |= RF_ASM_FLAGS_FORCE_TRIED; + val = rf_ForceOrBlockRecon(raidPtr, asm_p, + (void (*) (RF_Raid_t *, void *)) rf_ContinueRaidAccess, desc); + if (val == 0) { + asm_p->flags |= RF_ASM_FLAGS_RECON_BLOCKED; } else { -#if RF_DEBUG_PSS > 0 - if (rf_pssDebug) { - printf("raid%d: skipping force/block because already done, psid %ld\n", - desc->raidPtr->raidid, - (long) asm_p->stripeID); - } -#endif + suspended = RF_TRUE; + break; } } else { #if RF_DEBUG_PSS > 0 if (rf_pssDebug) { - printf("raid%d: skipping force/block because not write or not under recon, psid %ld\n", + printf("raid%d: skipping force/block because already done, psid %ld\n", desc->raidPtr->raidid, (long) asm_p->stripeID); } #endif } + } else { +#if RF_DEBUG_PSS > 0 + if (rf_pssDebug) { + printf("raid%d: skipping force/block because not write or not under recon, psid %ld\n", + desc->raidPtr->raidid, + (long) asm_p->stripeID); + } +#endif } + } #if RF_ACC_TRACE > 0 - RF_ETIMER_STOP(timer); - RF_ETIMER_EVAL(timer); - tracerec->specific.user.lock_us += RF_ETIMER_VAL_US(timer); + RF_ETIMER_STOP(timer); + RF_ETIMER_EVAL(timer); + tracerec->specific.user.lock_us += RF_ETIMER_VAL_US(timer); #endif - if (suspended) - return (RF_TRUE); - } + if (suspended) + return (RF_TRUE); + desc->state++; return (RF_FALSE); } @@ -701,19 +700,17 @@ rf_State_Cleanup(RF_RaidAccessDesc_t *desc) RF_ETIMER_START(timer); #endif - if (!(raidPtr->Layout.map->flags & RF_NO_STRIPE_LOCKS)) { - for (asm_p = asmh->stripeMap; asm_p; asm_p = asm_p->next) { - if (!rf_suppressLocksAndLargeWrites && - asm_p->parityInfo && - !(desc->flags & RF_DAG_SUPPRESS_LOCKS)) { - RF_ASSERT_VALID_LOCKREQ(&asm_p->lockReqDesc); - rf_ReleaseStripeLock(raidPtr->lockTable, - asm_p->stripeID, - &asm_p->lockReqDesc); - } - if (asm_p->flags & RF_ASM_FLAGS_RECON_BLOCKED) { - rf_UnblockRecon(raidPtr, asm_p); - } + for (asm_p = asmh->stripeMap; asm_p; asm_p = asm_p->next) { + if (!rf_suppressLocksAndLargeWrites && + asm_p->parityInfo && + !(desc->flags & RF_DAG_SUPPRESS_LOCKS)) { + RF_ASSERT_VALID_LOCKREQ(&asm_p->lockReqDesc); + rf_ReleaseStripeLock(raidPtr->lockTable, + asm_p->stripeID, + &asm_p->lockReqDesc); + } + if (asm_p->flags & RF_ASM_FLAGS_RECON_BLOCKED) { + rf_UnblockRecon(raidPtr, asm_p); } } #if RF_ACC_TRACE > 0 |
