summaryrefslogtreecommitdiffstats
path: root/sys/geom/bde
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-04-26 21:40:26 +0000
committerphk <phk@FreeBSD.org>2003-04-26 21:40:26 +0000
commitcd6350ca834ceea87040227b9b0c66cbcbad93ac (patch)
tree18e1e0807bae0353b9c515c30e92a70efcbd8cf9 /sys/geom/bde
parentda80cf8fcc6d4bfffb81099844ce2b2e58dd2cd6 (diff)
downloadFreeBSD-src-cd6350ca834ceea87040227b9b0c66cbcbad93ac.zip
FreeBSD-src-cd6350ca834ceea87040227b9b0c66cbcbad93ac.tar.gz
Bail as soon as the first write request has failed, there is no point
in trying the second write if the first one went nowhere.
Diffstat (limited to 'sys/geom/bde')
-rw-r--r--sys/geom/bde/g_bde_work.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/geom/bde/g_bde_work.c b/sys/geom/bde/g_bde_work.c
index 6b5d763..9fd0f98 100644
--- a/sys/geom/bde/g_bde_work.c
+++ b/sys/geom/bde/g_bde_work.c
@@ -597,8 +597,17 @@ g_bde_worker(void *arg)
mtx_unlock(&sc->worklist_mutex);
g_bde_crypt_write(wp);
mtx_lock(&sc->worklist_mutex);
- g_bde_start_write(wp->sp);
- g_bde_start_write(wp->ksp);
+ error = g_bde_start_write(wp->sp);
+ if (error) {
+ g_bde_contribute(wp->bp, wp->length, error);
+ g_bde_release_keysector(wp);
+ g_bde_delete_sector(sc, wp->sp);
+ g_bde_delete_work(wp);
+ break;
+ }
+ error = g_bde_start_write(wp->ksp);
+ if (wp->error == 0)
+ wp->error = error;
break;
case BIO_DELETE:
wp->state = FINISH;
OpenPOWER on IntegriCloud