MFC r261538:

Make CTL block backend return proper error code for operations unsupposed
by the underlying device.
This commit is contained in:
mav 2014-02-21 18:32:45 +00:00
parent cf0fa484f9
commit 6e3a96834a

View File

@ -512,6 +512,7 @@ ctl_be_block_biodone(struct bio *bio)
struct ctl_be_block_io *beio;
struct ctl_be_block_lun *be_lun;
union ctl_io *io;
int error;
beio = bio->bio_caller1;
be_lun = beio->lun;
@ -519,8 +520,9 @@ ctl_be_block_biodone(struct bio *bio)
DPRINTF("entered\n");
error = bio->bio_error;
mtx_lock(&be_lun->lock);
if (bio->bio_error != 0)
if (error != 0)
beio->num_errors++;
beio->num_bios_done++;
@ -552,7 +554,9 @@ ctl_be_block_biodone(struct bio *bio)
* entire I/O with a medium error.
*/
if (beio->num_errors > 0) {
if (beio->bio_cmd == BIO_FLUSH) {
if (error == EOPNOTSUPP) {
ctl_set_invalid_opcode(&io->scsiio);
} else if (beio->bio_cmd == BIO_FLUSH) {
/* XXX KDM is there is a better error here? */
ctl_set_internal_failure(&io->scsiio,
/*sks_valid*/ 1,