diff options
author | phk <phk@FreeBSD.org> | 2003-04-26 21:40:26 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-04-26 21:40:26 +0000 |
commit | cd6350ca834ceea87040227b9b0c66cbcbad93ac (patch) | |
tree | 18e1e0807bae0353b9c515c30e92a70efcbd8cf9 /sys/geom/bde | |
parent | da80cf8fcc6d4bfffb81099844ce2b2e58dd2cd6 (diff) | |
download | FreeBSD-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.c | 13 |
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; |