diff options
author | Marius Strobl <marius@FreeBSD.org> | 2021-01-21 23:09:09 +0000 |
---|---|---|
committer | Marius Strobl <marius@FreeBSD.org> | 2021-01-21 23:18:40 +0000 |
commit | 3b433ed76500f1dde444bed736f9f36695cb93a0 (patch) | |
tree | a8bc6a83ad99702d11bb82340e7f1a28faa0a219 /sys/dev/mmc | |
parent | 2dcbf0462e17db1b0a8cc99d1f95a7b0ba6437b2 (diff) | |
download | src-3b433ed76500f1dde444bed736f9f36695cb93a0.tar.gz src-3b433ed76500f1dde444bed736f9f36695cb93a0.zip |
mmcsd(4): properly set BIO error when partition switching fails
While at it, remove redundant braces and goto in mmcsd_task().
Reported by: Coverity
CID: 1419639
Diffstat (limited to 'sys/dev/mmc')
-rw-r--r-- | sys/dev/mmc/mmcsd.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/sys/dev/mmc/mmcsd.c b/sys/dev/mmc/mmcsd.c index 2a55a9be1548..5e821586f722 100644 --- a/sys/dev/mmc/mmcsd.c +++ b/sys/dev/mmc/mmcsd.c @@ -1440,6 +1440,7 @@ mmcsd_task(void *arg) mmcbus = sc->mmcbus; while (1) { + bio_error = 0; MMCSD_DISK_LOCK(part); do { if (part->running == 0) @@ -1481,21 +1482,18 @@ mmcsd_task(void *arg) if (block < part->eend && end > part->eblock) part->eblock = part->eend = 0; block = mmcsd_rw(part, bp); - } else if (bp->bio_cmd == BIO_DELETE) { + } else if (bp->bio_cmd == BIO_DELETE) block = mmcsd_delete(part, bp); - } else { + else bio_error = EOPNOTSUPP; - goto release; - } release: MMCBUS_RELEASE_BUS(mmcbus, dev); if (block < end) { bp->bio_error = (bio_error == 0) ? EIO : bio_error; bp->bio_resid = (end - block) * sz; bp->bio_flags |= BIO_ERROR; - } else { + } else bp->bio_resid = 0; - } biodone(bp); } out: |