summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2016-10-20 14:50:12 +0200
committerKevin Wolf <kwolf@redhat.com>2016-10-27 19:05:23 +0200
commit0d4377b3ea97cc28c71642c92c2cfa8cdb1cc8bd (patch)
tree3832ddcde238f5a0c93d4f2db17cd673c42d01e0 /block
parent48af776a5b85ad2dc6124d3d0fb210ca6b98d32c (diff)
downloadqemu-0d4377b3ea97cc28c71642c92c2cfa8cdb1cc8bd.tar.gz
qemu-0d4377b3ea97cc28c71642c92c2cfa8cdb1cc8bd.tar.bz2
qemu-0d4377b3ea97cc28c71642c92c2cfa8cdb1cc8bd.zip
raw-posix: Don't use bdrv_ioctl()
Instead of letting raw-posix use the bdrv_ioctl() abstraction to issue an ioctl to itself, just call ioctl() directly. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/raw-posix.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/block/raw-posix.c b/block/raw-posix.c
index f481e57f78..247e47b88f 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -2069,13 +2069,23 @@ static bool hdev_is_sg(BlockDriverState *bs)
#if defined(__linux__)
+ BDRVRawState *s = bs->opaque;
struct stat st;
struct sg_scsi_id scsiid;
int sg_version;
+ int ret;
+
+ if (stat(bs->filename, &st) < 0 || !S_ISCHR(st.st_mode)) {
+ return false;
+ }
- if (stat(bs->filename, &st) >= 0 && S_ISCHR(st.st_mode) &&
- !bdrv_ioctl(bs, SG_GET_VERSION_NUM, &sg_version) &&
- !bdrv_ioctl(bs, SG_GET_SCSI_ID, &scsiid)) {
+ ret = ioctl(s->fd, SG_GET_VERSION_NUM, &sg_version);
+ if (ret < 0) {
+ return false;
+ }
+
+ ret = ioctl(s->fd, SG_GET_SCSI_ID, &scsiid);
+ if (ret >= 0) {
DPRINTF("SG device found: type=%d, version=%d\n",
scsiid.scsi_type, sg_version);
return true;