* [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 @ 2014-03-05 15:00 Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Kevin Wolf @ 2014-03-05 15:00 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, pbonzini, pl Kevin Wolf (2): iscsi: Use bs->sg for everything else than disks block: Fix bs->request_alignment assertion for bs->sg=1 block.c | 2 +- block/iscsi.c | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) -- 1.8.1.4 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 15:00 [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Kevin Wolf @ 2014-03-05 15:00 ` Kevin Wolf 2014-03-05 15:33 ` Benoît Canet 2014-03-05 16:02 ` Peter Lieven 2014-03-05 15:00 ` [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 Kevin Wolf 2014-03-05 15:31 ` [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Paolo Bonzini 2 siblings, 2 replies; 10+ messages in thread From: Kevin Wolf @ 2014-03-05 15:00 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, pbonzini, pl The current iscsi block driver code makes the rather arbitrary decision that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all other device types are disks. Instead of this, check for TYPE_DISK to expose the disk interface and make everything else bs->sg = 1. In particular, this includes devices with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact scenario.) Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block/iscsi.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/block/iscsi.c b/block/iscsi.c index 0a15f53..b490e98 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); bs->request_alignment = iscsilun->block_size; - /* Medium changer or tape. We dont have any emulation for this so this must - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try - * to read from the device to guess the image format. + /* We don't have any emulation for devices other than disks and CD-ROMs, so + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu + * will try to read from the device to guess the image format. */ - if (iscsilun->type == TYPE_MEDIUM_CHANGER || - iscsilun->type == TYPE_TAPE) { + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { bs->sg = 1; } -- 1.8.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf @ 2014-03-05 15:33 ` Benoît Canet 2014-03-05 15:41 ` Kevin Wolf 2014-03-05 16:02 ` Peter Lieven 1 sibling, 1 reply; 10+ messages in thread From: Benoît Canet @ 2014-03-05 15:33 UTC (permalink / raw) To: Kevin Wolf; +Cc: pbonzini, pl, qemu-devel The Wednesday 05 Mar 2014 à 16:00:48 (+0100), Kevin Wolf wrote : > The current iscsi block driver code makes the rather arbitrary decision > that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all > other device types are disks. > > Instead of this, check for TYPE_DISK to expose the disk interface and > make everything else bs->sg = 1. In particular, this includes devices > with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. > (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact > scenario.) > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > block/iscsi.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/block/iscsi.c b/block/iscsi.c > index 0a15f53..b490e98 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); > bs->request_alignment = iscsilun->block_size; > > - /* Medium changer or tape. We dont have any emulation for this so this must > - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try > - * to read from the device to guess the image format. > + /* We don't have any emulation for devices other than disks and CD-ROMs, so > + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu > + * will try to read from the device to guess the image format. > */ > - if (iscsilun->type == TYPE_MEDIUM_CHANGER || > - iscsilun->type == TYPE_TAPE) { > + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { I don't understand you are talking about type TYPE_STORAGE_ARRAY in the commit message but testing against TYPE_ROM and they are not the same. Maybe a comment explaining the role of TYPE_ROM would give a clue to non scsi savy persons like me. Best regards Benoît > bs->sg = 1; > } > > -- > 1.8.1.4 > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 15:33 ` Benoît Canet @ 2014-03-05 15:41 ` Kevin Wolf 2014-03-05 15:47 ` Benoît Canet 0 siblings, 1 reply; 10+ messages in thread From: Kevin Wolf @ 2014-03-05 15:41 UTC (permalink / raw) To: Benoît Canet; +Cc: pbonzini, pl, qemu-devel Am 05.03.2014 um 16:33 hat Benoît Canet geschrieben: > The Wednesday 05 Mar 2014 à 16:00:48 (+0100), Kevin Wolf wrote : > > The current iscsi block driver code makes the rather arbitrary decision > > that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all > > other device types are disks. > > > > Instead of this, check for TYPE_DISK to expose the disk interface and > > make everything else bs->sg = 1. In particular, this includes devices > > with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. > > (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact > > scenario.) > > > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > > --- > > block/iscsi.c | 9 ++++----- > > 1 file changed, 4 insertions(+), 5 deletions(-) > > > > diff --git a/block/iscsi.c b/block/iscsi.c > > index 0a15f53..b490e98 100644 > > --- a/block/iscsi.c > > +++ b/block/iscsi.c > > @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > > bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); > > bs->request_alignment = iscsilun->block_size; > > > > - /* Medium changer or tape. We dont have any emulation for this so this must > > - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try > > - * to read from the device to guess the image format. > > + /* We don't have any emulation for devices other than disks and CD-ROMs, so > > + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu > > + * will try to read from the device to guess the image format. > > */ > > - if (iscsilun->type == TYPE_MEDIUM_CHANGER || > > - iscsilun->type == TYPE_TAPE) { > > + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { > I don't understand you are talking about type TYPE_STORAGE_ARRAY in the commit > message but testing against TYPE_ROM and they are not the same. > Maybe a comment explaining the role of TYPE_ROM would give a clue to non scsi > savy persons like me. TYPE_STORAGE_ARRAY is what exposed the bug (see the Bugzilla reference). It was previously bs->sg = 0, but becomes now bs->sg = 1. The reason for this is that the usual block layer operations only work on disks (i.e. hard disks = TYPE_DISK and CD-ROM drives = TYPE_ROM), so for all the rest we can only expose a generic SCSI device, but no real block device. Kevin ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 15:41 ` Kevin Wolf @ 2014-03-05 15:47 ` Benoît Canet 0 siblings, 0 replies; 10+ messages in thread From: Benoît Canet @ 2014-03-05 15:47 UTC (permalink / raw) To: Kevin Wolf; +Cc: Benoît Canet, pbonzini, pl, qemu-devel The Wednesday 05 Mar 2014 à 16:41:20 (+0100), Kevin Wolf wrote : > Am 05.03.2014 um 16:33 hat Benoît Canet geschrieben: > > The Wednesday 05 Mar 2014 à 16:00:48 (+0100), Kevin Wolf wrote : > > > The current iscsi block driver code makes the rather arbitrary decision > > > that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all > > > other device types are disks. > > > > > > Instead of this, check for TYPE_DISK to expose the disk interface and > > > make everything else bs->sg = 1. In particular, this includes devices > > > with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. > > > (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact > > > scenario.) > > > > > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > > > --- > > > block/iscsi.c | 9 ++++----- > > > 1 file changed, 4 insertions(+), 5 deletions(-) > > > > > > diff --git a/block/iscsi.c b/block/iscsi.c > > > index 0a15f53..b490e98 100644 > > > --- a/block/iscsi.c > > > +++ b/block/iscsi.c > > > @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > > > bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); > > > bs->request_alignment = iscsilun->block_size; > > > > > > - /* Medium changer or tape. We dont have any emulation for this so this must > > > - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try > > > - * to read from the device to guess the image format. > > > + /* We don't have any emulation for devices other than disks and CD-ROMs, so > > > + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu > > > + * will try to read from the device to guess the image format. > > > */ > > > - if (iscsilun->type == TYPE_MEDIUM_CHANGER || > > > - iscsilun->type == TYPE_TAPE) { > > > + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { > > I don't understand you are talking about type TYPE_STORAGE_ARRAY in the commit > > message but testing against TYPE_ROM and they are not the same. > > Maybe a comment explaining the role of TYPE_ROM would give a clue to non scsi > > savy persons like me. > > TYPE_STORAGE_ARRAY is what exposed the bug (see the Bugzilla reference). > It was previously bs->sg = 0, but becomes now bs->sg = 1. The reason for > this is that the usual block layer operations only work on disks (i.e. > hard disks = TYPE_DISK and CD-ROM drives = TYPE_ROM), so for all the > rest we can only expose a generic SCSI device, but no real block device. Ok I didn't knew that TYPE_ROM == type of CDROM. It's simpler now. Reviewed-by: Benoit Canet <benoit@irqsave.net> > > Kevin > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf 2014-03-05 15:33 ` Benoît Canet @ 2014-03-05 16:02 ` Peter Lieven 2014-03-05 16:21 ` Kevin Wolf 1 sibling, 1 reply; 10+ messages in thread From: Peter Lieven @ 2014-03-05 16:02 UTC (permalink / raw) To: Kevin Wolf, qemu-devel; +Cc: pbonzini Am 05.03.2014 16:00, schrieb Kevin Wolf: > The current iscsi block driver code makes the rather arbitrary decision > that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all > other device types are disks. > > Instead of this, check for TYPE_DISK to expose the disk interface and > make everything else bs->sg = 1. In particular, this includes devices > with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. > (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact > scenario.) > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > block/iscsi.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/block/iscsi.c b/block/iscsi.c > index 0a15f53..b490e98 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); > bs->request_alignment = iscsilun->block_size; > > - /* Medium changer or tape. We dont have any emulation for this so this must > - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try > - * to read from the device to guess the image format. > + /* We don't have any emulation for devices other than disks and CD-ROMs, so > + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu > + * will try to read from the device to guess the image format. > */ > - if (iscsilun->type == TYPE_MEDIUM_CHANGER || > - iscsilun->type == TYPE_TAPE) { > + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { > bs->sg = 1; > } > We have ioctl support in the iscsi block driver only for Linux. Is this a problem? Peter ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks 2014-03-05 16:02 ` Peter Lieven @ 2014-03-05 16:21 ` Kevin Wolf 0 siblings, 0 replies; 10+ messages in thread From: Kevin Wolf @ 2014-03-05 16:21 UTC (permalink / raw) To: Peter Lieven; +Cc: pbonzini, qemu-devel Am 05.03.2014 um 17:02 hat Peter Lieven geschrieben: > Am 05.03.2014 16:00, schrieb Kevin Wolf: > > The current iscsi block driver code makes the rather arbitrary decision > > that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all > > other device types are disks. > > > > Instead of this, check for TYPE_DISK to expose the disk interface and > > make everything else bs->sg = 1. In particular, this includes devices > > with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. > > (See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact > > scenario.) > > > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > > --- > > block/iscsi.c | 9 ++++----- > > 1 file changed, 4 insertions(+), 5 deletions(-) > > > > diff --git a/block/iscsi.c b/block/iscsi.c > > index 0a15f53..b490e98 100644 > > --- a/block/iscsi.c > > +++ b/block/iscsi.c > > @@ -1231,12 +1231,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > > bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); > > bs->request_alignment = iscsilun->block_size; > > > > - /* Medium changer or tape. We dont have any emulation for this so this must > > - * be sg ioctl compatible. We force it to be sg, otherwise qemu will try > > - * to read from the device to guess the image format. > > + /* We don't have any emulation for devices other than disks and CD-ROMs, so > > + * this must be sg ioctl compatible. We force it to be sg, otherwise qemu > > + * will try to read from the device to guess the image format. > > */ > > - if (iscsilun->type == TYPE_MEDIUM_CHANGER || > > - iscsilun->type == TYPE_TAPE) { > > + if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { > > bs->sg = 1; > > } > > > We have ioctl support in the iscsi block driver only for Linux. Is this a problem? Should be okay. It will cause the requests to fail, obviously (bdrv_ioctl returns -ENOTSUP, and bdrv_aio_ioctl returns NULL), but callers seem to cope with it and if we don't know how to handle the request, that's the right thing to do. Kevin ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 2014-03-05 15:00 [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf @ 2014-03-05 15:00 ` Kevin Wolf 2014-03-05 15:34 ` Benoît Canet 2014-03-05 15:31 ` [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Paolo Bonzini 2 siblings, 1 reply; 10+ messages in thread From: Kevin Wolf @ 2014-03-05 15:00 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, pbonzini, pl For sg backends, bs->request_alignment is meaningless and may be 0. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block.c b/block.c index 38bbdf3..f01b91c 100644 --- a/block.c +++ b/block.c @@ -935,7 +935,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, bdrv_refresh_limits(bs); assert(bdrv_opt_mem_align(bs) != 0); - assert(bs->request_alignment != 0); + assert((bs->request_alignment != 0) || bs->sg); #ifndef _WIN32 if (bs->is_temporary) { -- 1.8.1.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 2014-03-05 15:00 ` [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 Kevin Wolf @ 2014-03-05 15:34 ` Benoît Canet 0 siblings, 0 replies; 10+ messages in thread From: Benoît Canet @ 2014-03-05 15:34 UTC (permalink / raw) To: Kevin Wolf; +Cc: pbonzini, pl, qemu-devel The Wednesday 05 Mar 2014 à 16:00:49 (+0100), Kevin Wolf wrote : > For sg backends, bs->request_alignment is meaningless and may be 0. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > block.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/block.c b/block.c > index 38bbdf3..f01b91c 100644 > --- a/block.c > +++ b/block.c > @@ -935,7 +935,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, > > bdrv_refresh_limits(bs); > assert(bdrv_opt_mem_align(bs) != 0); > - assert(bs->request_alignment != 0); > + assert((bs->request_alignment != 0) || bs->sg); > > #ifndef _WIN32 > if (bs->is_temporary) { > -- > 1.8.1.4 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 2014-03-05 15:00 [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 Kevin Wolf @ 2014-03-05 15:31 ` Paolo Bonzini 2 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2014-03-05 15:31 UTC (permalink / raw) To: Kevin Wolf, qemu-devel; +Cc: pl Il 05/03/2014 16:00, Kevin Wolf ha scritto: > Kevin Wolf (2): > iscsi: Use bs->sg for everything else than disks > block: Fix bs->request_alignment assertion for bs->sg=1 > > block.c | 2 +- > block/iscsi.c | 9 ++++----- > 2 files changed, 5 insertions(+), 6 deletions(-) > Looks good. Thanks! Paolo ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-03-05 16:22 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-03-05 15:00 [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 1/2] iscsi: Use bs->sg for everything else than disks Kevin Wolf 2014-03-05 15:33 ` Benoît Canet 2014-03-05 15:41 ` Kevin Wolf 2014-03-05 15:47 ` Benoît Canet 2014-03-05 16:02 ` Peter Lieven 2014-03-05 16:21 ` Kevin Wolf 2014-03-05 15:00 ` [Qemu-devel] [PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 Kevin Wolf 2014-03-05 15:34 ` Benoît Canet 2014-03-05 15:31 ` [Qemu-devel] [PATCH 0/2] iscsi: Fix bs->request_alignment failure on LUN 0 Paolo Bonzini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).