* Re: [Qemu-devel] [PATCH] block/iscsi: query for supported VPD pages [not found] <1390996593-19498-1-git-send-email-pl@kamp.de> @ 2014-02-17 17:09 ` Peter Lieven 2014-02-17 17:26 ` Paolo Bonzini 0 siblings, 1 reply; 3+ messages in thread From: Peter Lieven @ 2014-02-17 17:09 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf, Peter Lieven, ronniesahlberg, stefanha ping ;-) Am 29.01.2014 12:56, schrieb Peter Lieven: > this patch ensures that we only query for block provisioning and > block limits vpd pages if they are advertised. It also cleans > up the inquiry code and eliminates some redundant code. > > Signed-off-by: Peter Lieven <pl@kamp.de> > --- > block/iscsi.c | 107 +++++++++++++++++++++++++++++---------------------------- > 1 file changed, 54 insertions(+), 53 deletions(-) > > diff --git a/block/iscsi.c b/block/iscsi.c > index 6f4af72..38b07f8 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -1066,7 +1066,8 @@ static QemuOptsList runtime_opts = { > }; > > static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, > - int lun, int evpd, int pc) { > + int lun, int evpd, int pc, > + void **inq) { > int full_size; > struct scsi_task *task = NULL; > task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); > @@ -1084,14 +1085,18 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, > } > } > > + *inq = scsi_datain_unmarshall(task); > + if (*inq == NULL) { > + goto fail; > + } > + > return task; > > fail: > error_report("iSCSI: Inquiry command failed : %s", > iscsi_get_error(iscsi)); > - if (task) { > + if (task != NULL) { > scsi_free_scsi_task(task); > - return NULL; > } > return NULL; > } > @@ -1108,11 +1113,12 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > struct iscsi_url *iscsi_url = NULL; > struct scsi_task *task = NULL; > struct scsi_inquiry_standard *inq = NULL; > + struct scsi_inquiry_supported_pages *inq_vpd; > char *initiator_name = NULL; > QemuOpts *opts; > Error *local_err = NULL; > const char *filename; > - int ret; > + int i, ret; > > if ((BDRV_SECTOR_SIZE % 512) != 0) { > error_report("iSCSI: Invalid BDRV_SECTOR_SIZE. " > @@ -1132,7 +1138,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > > filename = qemu_opt_get(opts, "filename"); > > - > iscsi_url = iscsi_parse_full_url(iscsi, filename); > if (iscsi_url == NULL) { > error_report("Failed to parse URL : %s", filename); > @@ -1194,24 +1199,17 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > > iscsilun->iscsi = iscsi; > iscsilun->lun = iscsi_url->lun; > + iscsilun->has_write_same = true; > > - task = iscsi_inquiry_sync(iscsi, iscsilun->lun, 0, 0, 36); > - > - if (task == NULL || task->status != SCSI_STATUS_GOOD) { > - error_report("iSCSI: failed to send inquiry command."); > - ret = -EINVAL; > - goto out; > - } > - > - inq = scsi_datain_unmarshall(task); > - if (inq == NULL) { > - error_report("iSCSI: Failed to unmarshall inquiry data."); > + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 0, 0, > + (void **) &inq); > + if (task == NULL) { > ret = -EINVAL; > goto out; > } > - > iscsilun->type = inq->periperal_device_type; > - iscsilun->has_write_same = true; > + scsi_free_scsi_task(task); > + task = NULL; > > if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { > goto out; > @@ -1228,45 +1226,48 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, > bs->sg = 1; > } > > - if (iscsilun->lbpme) { > - struct scsi_inquiry_logical_block_provisioning *inq_lbp; > - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, > - SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING); > - if (task == NULL) { > - ret = -EINVAL; > - goto out; > - } > - inq_lbp = scsi_datain_unmarshall(task); > - if (inq_lbp == NULL) { > - error_report("iSCSI: failed to unmarshall inquiry datain blob"); > - ret = -EINVAL; > - goto out; > - } > - memcpy(&iscsilun->lbp, inq_lbp, > - sizeof(struct scsi_inquiry_logical_block_provisioning)); > - scsi_free_scsi_task(task); > - task = NULL; > + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, > + SCSI_INQUIRY_PAGECODE_SUPPORTED_VPD_PAGES, > + (void **) &inq_vpd); > + if (task == NULL) { > + ret = -EINVAL; > + goto out; > } > - > - if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { > + for (i = 0; i < inq_vpd->num_pages; i++) { > + struct scsi_task *inq_task; > + struct scsi_inquiry_logical_block_provisioning *inq_lbp; > struct scsi_inquiry_block_limits *inq_bl; > - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, > - SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS); > - if (task == NULL) { > - ret = -EINVAL; > - goto out; > - } > - inq_bl = scsi_datain_unmarshall(task); > - if (inq_bl == NULL) { > - error_report("iSCSI: failed to unmarshall inquiry datain blob"); > - ret = -EINVAL; > - goto out; > + switch (inq_vpd->pages[i]) { > + case SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING: > + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, > + SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, > + (void **) &inq_lbp); > + if (inq_task == NULL) { > + ret = -EINVAL; > + goto out; > + } > + memcpy(&iscsilun->lbp, inq_lbp, > + sizeof(struct scsi_inquiry_logical_block_provisioning)); > + scsi_free_scsi_task(inq_task); > + break; > + case SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS: > + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, > + SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, > + (void **) &inq_bl); > + if (inq_task == NULL) { > + ret = -EINVAL; > + goto out; > + } > + memcpy(&iscsilun->bl, inq_bl, > + sizeof(struct scsi_inquiry_block_limits)); > + scsi_free_scsi_task(inq_task); > + break; > + default: > + break; > } > - memcpy(&iscsilun->bl, inq_bl, > - sizeof(struct scsi_inquiry_block_limits)); > - scsi_free_scsi_task(task); > - task = NULL; > } > + scsi_free_scsi_task(task); > + task = NULL; > > #if defined(LIBISCSI_FEATURE_NOP_COUNTER) > /* Set up a timer for sending out iSCSI NOPs */ ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] block/iscsi: query for supported VPD pages 2014-02-17 17:09 ` [Qemu-devel] [PATCH] block/iscsi: query for supported VPD pages Peter Lieven @ 2014-02-17 17:26 ` Paolo Bonzini 2014-02-17 17:28 ` Peter Lieven 0 siblings, 1 reply; 3+ messages in thread From: Paolo Bonzini @ 2014-02-17 17:26 UTC (permalink / raw) To: Peter Lieven, qemu-devel; +Cc: kwolf, stefanha, ronniesahlberg Il 17/02/2014 18:09, Peter Lieven ha scritto: > ping ;-) Looks good, but I cannot find the original post. Paolo > Am 29.01.2014 12:56, schrieb Peter Lieven: >> this patch ensures that we only query for block provisioning and >> block limits vpd pages if they are advertised. It also cleans >> up the inquiry code and eliminates some redundant code. >> >> Signed-off-by: Peter Lieven <pl@kamp.de> >> --- >> block/iscsi.c | 107 +++++++++++++++++++++++++++++---------------------------- >> 1 file changed, 54 insertions(+), 53 deletions(-) >> >> diff --git a/block/iscsi.c b/block/iscsi.c >> index 6f4af72..38b07f8 100644 >> --- a/block/iscsi.c >> +++ b/block/iscsi.c >> @@ -1066,7 +1066,8 @@ static QemuOptsList runtime_opts = { >> }; >> >> static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, >> - int lun, int evpd, int pc) { >> + int lun, int evpd, int pc, >> + void **inq) { >> int full_size; >> struct scsi_task *task = NULL; >> task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); >> @@ -1084,14 +1085,18 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, >> } >> } >> >> + *inq = scsi_datain_unmarshall(task); >> + if (*inq == NULL) { >> + goto fail; >> + } >> + >> return task; >> >> fail: >> error_report("iSCSI: Inquiry command failed : %s", >> iscsi_get_error(iscsi)); >> - if (task) { >> + if (task != NULL) { >> scsi_free_scsi_task(task); >> - return NULL; >> } >> return NULL; >> } >> @@ -1108,11 +1113,12 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >> struct iscsi_url *iscsi_url = NULL; >> struct scsi_task *task = NULL; >> struct scsi_inquiry_standard *inq = NULL; >> + struct scsi_inquiry_supported_pages *inq_vpd; >> char *initiator_name = NULL; >> QemuOpts *opts; >> Error *local_err = NULL; >> const char *filename; >> - int ret; >> + int i, ret; >> >> if ((BDRV_SECTOR_SIZE % 512) != 0) { >> error_report("iSCSI: Invalid BDRV_SECTOR_SIZE. " >> @@ -1132,7 +1138,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >> >> filename = qemu_opt_get(opts, "filename"); >> >> - >> iscsi_url = iscsi_parse_full_url(iscsi, filename); >> if (iscsi_url == NULL) { >> error_report("Failed to parse URL : %s", filename); >> @@ -1194,24 +1199,17 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >> >> iscsilun->iscsi = iscsi; >> iscsilun->lun = iscsi_url->lun; >> + iscsilun->has_write_same = true; >> >> - task = iscsi_inquiry_sync(iscsi, iscsilun->lun, 0, 0, 36); >> - >> - if (task == NULL || task->status != SCSI_STATUS_GOOD) { >> - error_report("iSCSI: failed to send inquiry command."); >> - ret = -EINVAL; >> - goto out; >> - } >> - >> - inq = scsi_datain_unmarshall(task); >> - if (inq == NULL) { >> - error_report("iSCSI: Failed to unmarshall inquiry data."); >> + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 0, 0, >> + (void **) &inq); >> + if (task == NULL) { >> ret = -EINVAL; >> goto out; >> } >> - >> iscsilun->type = inq->periperal_device_type; >> - iscsilun->has_write_same = true; >> + scsi_free_scsi_task(task); >> + task = NULL; >> >> if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { >> goto out; >> @@ -1228,45 +1226,48 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >> bs->sg = 1; >> } >> >> - if (iscsilun->lbpme) { >> - struct scsi_inquiry_logical_block_provisioning *inq_lbp; >> - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >> - SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING); >> - if (task == NULL) { >> - ret = -EINVAL; >> - goto out; >> - } >> - inq_lbp = scsi_datain_unmarshall(task); >> - if (inq_lbp == NULL) { >> - error_report("iSCSI: failed to unmarshall inquiry datain blob"); >> - ret = -EINVAL; >> - goto out; >> - } >> - memcpy(&iscsilun->lbp, inq_lbp, >> - sizeof(struct scsi_inquiry_logical_block_provisioning)); >> - scsi_free_scsi_task(task); >> - task = NULL; >> + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >> + SCSI_INQUIRY_PAGECODE_SUPPORTED_VPD_PAGES, >> + (void **) &inq_vpd); >> + if (task == NULL) { >> + ret = -EINVAL; >> + goto out; >> } >> - >> - if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { >> + for (i = 0; i < inq_vpd->num_pages; i++) { >> + struct scsi_task *inq_task; >> + struct scsi_inquiry_logical_block_provisioning *inq_lbp; >> struct scsi_inquiry_block_limits *inq_bl; >> - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >> - SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS); >> - if (task == NULL) { >> - ret = -EINVAL; >> - goto out; >> - } >> - inq_bl = scsi_datain_unmarshall(task); >> - if (inq_bl == NULL) { >> - error_report("iSCSI: failed to unmarshall inquiry datain blob"); >> - ret = -EINVAL; >> - goto out; >> + switch (inq_vpd->pages[i]) { >> + case SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING: >> + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >> + SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, >> + (void **) &inq_lbp); >> + if (inq_task == NULL) { >> + ret = -EINVAL; >> + goto out; >> + } >> + memcpy(&iscsilun->lbp, inq_lbp, >> + sizeof(struct scsi_inquiry_logical_block_provisioning)); >> + scsi_free_scsi_task(inq_task); >> + break; >> + case SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS: >> + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >> + SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, >> + (void **) &inq_bl); >> + if (inq_task == NULL) { >> + ret = -EINVAL; >> + goto out; >> + } >> + memcpy(&iscsilun->bl, inq_bl, >> + sizeof(struct scsi_inquiry_block_limits)); >> + scsi_free_scsi_task(inq_task); >> + break; >> + default: >> + break; >> } >> - memcpy(&iscsilun->bl, inq_bl, >> - sizeof(struct scsi_inquiry_block_limits)); >> - scsi_free_scsi_task(task); >> - task = NULL; >> } >> + scsi_free_scsi_task(task); >> + task = NULL; >> >> #if defined(LIBISCSI_FEATURE_NOP_COUNTER) >> /* Set up a timer for sending out iSCSI NOPs */ > > > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] block/iscsi: query for supported VPD pages 2014-02-17 17:26 ` Paolo Bonzini @ 2014-02-17 17:28 ` Peter Lieven 0 siblings, 0 replies; 3+ messages in thread From: Peter Lieven @ 2014-02-17 17:28 UTC (permalink / raw) To: Paolo Bonzini, qemu-devel; +Cc: kwolf, stefanha, ronniesahlberg Am 17.02.2014 18:26, schrieb Paolo Bonzini: > Il 17/02/2014 18:09, Peter Lieven ha scritto: >> ping ;-) > > Looks good, but I cannot find the original post. strange, sent it to qemu-devel on Jan/29. Peter > > Paolo > >> Am 29.01.2014 12:56, schrieb Peter Lieven: >>> this patch ensures that we only query for block provisioning and >>> block limits vpd pages if they are advertised. It also cleans >>> up the inquiry code and eliminates some redundant code. >>> >>> Signed-off-by: Peter Lieven <pl@kamp.de> >>> --- >>> block/iscsi.c | 107 +++++++++++++++++++++++++++++---------------------------- >>> 1 file changed, 54 insertions(+), 53 deletions(-) >>> >>> diff --git a/block/iscsi.c b/block/iscsi.c >>> index 6f4af72..38b07f8 100644 >>> --- a/block/iscsi.c >>> +++ b/block/iscsi.c >>> @@ -1066,7 +1066,8 @@ static QemuOptsList runtime_opts = { >>> }; >>> >>> static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, >>> - int lun, int evpd, int pc) { >>> + int lun, int evpd, int pc, >>> + void **inq) { >>> int full_size; >>> struct scsi_task *task = NULL; >>> task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); >>> @@ -1084,14 +1085,18 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, >>> } >>> } >>> >>> + *inq = scsi_datain_unmarshall(task); >>> + if (*inq == NULL) { >>> + goto fail; >>> + } >>> + >>> return task; >>> >>> fail: >>> error_report("iSCSI: Inquiry command failed : %s", >>> iscsi_get_error(iscsi)); >>> - if (task) { >>> + if (task != NULL) { >>> scsi_free_scsi_task(task); >>> - return NULL; >>> } >>> return NULL; >>> } >>> @@ -1108,11 +1113,12 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >>> struct iscsi_url *iscsi_url = NULL; >>> struct scsi_task *task = NULL; >>> struct scsi_inquiry_standard *inq = NULL; >>> + struct scsi_inquiry_supported_pages *inq_vpd; >>> char *initiator_name = NULL; >>> QemuOpts *opts; >>> Error *local_err = NULL; >>> const char *filename; >>> - int ret; >>> + int i, ret; >>> >>> if ((BDRV_SECTOR_SIZE % 512) != 0) { >>> error_report("iSCSI: Invalid BDRV_SECTOR_SIZE. " >>> @@ -1132,7 +1138,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >>> >>> filename = qemu_opt_get(opts, "filename"); >>> >>> - >>> iscsi_url = iscsi_parse_full_url(iscsi, filename); >>> if (iscsi_url == NULL) { >>> error_report("Failed to parse URL : %s", filename); >>> @@ -1194,24 +1199,17 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >>> >>> iscsilun->iscsi = iscsi; >>> iscsilun->lun = iscsi_url->lun; >>> + iscsilun->has_write_same = true; >>> >>> - task = iscsi_inquiry_sync(iscsi, iscsilun->lun, 0, 0, 36); >>> - >>> - if (task == NULL || task->status != SCSI_STATUS_GOOD) { >>> - error_report("iSCSI: failed to send inquiry command."); >>> - ret = -EINVAL; >>> - goto out; >>> - } >>> - >>> - inq = scsi_datain_unmarshall(task); >>> - if (inq == NULL) { >>> - error_report("iSCSI: Failed to unmarshall inquiry data."); >>> + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 0, 0, >>> + (void **) &inq); >>> + if (task == NULL) { >>> ret = -EINVAL; >>> goto out; >>> } >>> - >>> iscsilun->type = inq->periperal_device_type; >>> - iscsilun->has_write_same = true; >>> + scsi_free_scsi_task(task); >>> + task = NULL; >>> >>> if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { >>> goto out; >>> @@ -1228,45 +1226,48 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, >>> bs->sg = 1; >>> } >>> >>> - if (iscsilun->lbpme) { >>> - struct scsi_inquiry_logical_block_provisioning *inq_lbp; >>> - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >>> - SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING); >>> - if (task == NULL) { >>> - ret = -EINVAL; >>> - goto out; >>> - } >>> - inq_lbp = scsi_datain_unmarshall(task); >>> - if (inq_lbp == NULL) { >>> - error_report("iSCSI: failed to unmarshall inquiry datain blob"); >>> - ret = -EINVAL; >>> - goto out; >>> - } >>> - memcpy(&iscsilun->lbp, inq_lbp, >>> - sizeof(struct scsi_inquiry_logical_block_provisioning)); >>> - scsi_free_scsi_task(task); >>> - task = NULL; >>> + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >>> + SCSI_INQUIRY_PAGECODE_SUPPORTED_VPD_PAGES, >>> + (void **) &inq_vpd); >>> + if (task == NULL) { >>> + ret = -EINVAL; >>> + goto out; >>> } >>> - >>> - if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { >>> + for (i = 0; i < inq_vpd->num_pages; i++) { >>> + struct scsi_task *inq_task; >>> + struct scsi_inquiry_logical_block_provisioning *inq_lbp; >>> struct scsi_inquiry_block_limits *inq_bl; >>> - task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >>> - SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS); >>> - if (task == NULL) { >>> - ret = -EINVAL; >>> - goto out; >>> - } >>> - inq_bl = scsi_datain_unmarshall(task); >>> - if (inq_bl == NULL) { >>> - error_report("iSCSI: failed to unmarshall inquiry datain blob"); >>> - ret = -EINVAL; >>> - goto out; >>> + switch (inq_vpd->pages[i]) { >>> + case SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING: >>> + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >>> + SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, >>> + (void **) &inq_lbp); >>> + if (inq_task == NULL) { >>> + ret = -EINVAL; >>> + goto out; >>> + } >>> + memcpy(&iscsilun->lbp, inq_lbp, >>> + sizeof(struct scsi_inquiry_logical_block_provisioning)); >>> + scsi_free_scsi_task(inq_task); >>> + break; >>> + case SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS: >>> + inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, >>> + SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, >>> + (void **) &inq_bl); >>> + if (inq_task == NULL) { >>> + ret = -EINVAL; >>> + goto out; >>> + } >>> + memcpy(&iscsilun->bl, inq_bl, >>> + sizeof(struct scsi_inquiry_block_limits)); >>> + scsi_free_scsi_task(inq_task); >>> + break; >>> + default: >>> + break; >>> } >>> - memcpy(&iscsilun->bl, inq_bl, >>> - sizeof(struct scsi_inquiry_block_limits)); >>> - scsi_free_scsi_task(task); >>> - task = NULL; >>> } >>> + scsi_free_scsi_task(task); >>> + task = NULL; >>> >>> #if defined(LIBISCSI_FEATURE_NOP_COUNTER) >>> /* Set up a timer for sending out iSCSI NOPs */ >> >> >> > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-02-17 17:29 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1390996593-19498-1-git-send-email-pl@kamp.de> 2014-02-17 17:09 ` [Qemu-devel] [PATCH] block/iscsi: query for supported VPD pages Peter Lieven 2014-02-17 17:26 ` Paolo Bonzini 2014-02-17 17:28 ` Peter Lieven
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).