* [PATCH,RFC] target: fix block limits VPD emulation
@ 2010-11-10 21:04 Christoph Hellwig
2010-11-11 7:52 ` Nicholas A. Bellinger
0 siblings, 1 reply; 2+ messages in thread
From: Christoph Hellwig @ 2010-11-10 21:04 UTC (permalink / raw)
To: nab; +Cc: linux-scsi
Just because our target supports TP the initiator doesn't have.
Handle short block limit VPD requests even if TP is supported.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: lio-core-2.6/drivers/target/target_core_cdb.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_cdb.c 2010-11-09 12:12:21.908196346 +0100
+++ lio-core-2.6/drivers/target/target_core_cdb.c 2010-11-09 12:15:14.691529680 +0100
@@ -497,20 +497,18 @@ target_emulate_evpd_b0(struct se_cmd *cm
if (DEV_ATTRIB(dev)->emulate_tpu || DEV_ATTRIB(dev)->emulate_tpws)
have_tp = 1;
- if (have_tp) {
- if (cmd->data_length < (0x3c + 4)) {
- printk(KERN_INFO "Received data_length: %u"
- " too small for TPE=1 EVPD 0xb0\n",
- cmd->data_length);
- return -1;
- }
- } else {
- if (cmd->data_length < (0x10 + 4)) {
- printk(KERN_INFO "Received data_length: %u"
- " too small for TPE=1 EVPD 0xb0\n",
- cmd->data_length);
- return -1;
- }
+ if (cmd->data_length < (0x10 + 4)) {
+ printk(KERN_INFO "Received data_length: %u"
+ " too small for EVPD 0xb0\n",
+ cmd->data_length);
+ return -1;
+ }
+
+ if (have_tp && cmd->data_length < (0x3c + 4)) {
+ printk(KERN_INFO "Received data_length: %u"
+ " too small for TPE=1 EVPD 0xb0\n",
+ cmd->data_length);
+ have_tp = 0;
}
buf[0] = dev->transport->get_device_type(dev);
@@ -532,7 +530,11 @@ target_emulate_evpd_b0(struct se_cmd *cm
*/
put_unaligned_be32(DEV_ATTRIB(dev)->optimal_sectors, &buf[12]);
- if (!have_tp)
+ /*
+ * Exit now if we don't support TP or the initiator sent a too
+ * short buffer.
+ */
+ if (!have_tp || cmd->data_length < (0x3c + 4))
return 0;
/*
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH,RFC] target: fix block limits VPD emulation
2010-11-10 21:04 [PATCH,RFC] target: fix block limits VPD emulation Christoph Hellwig
@ 2010-11-11 7:52 ` Nicholas A. Bellinger
0 siblings, 0 replies; 2+ messages in thread
From: Nicholas A. Bellinger @ 2010-11-11 7:52 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-scsi
On Wed, 2010-11-10 at 16:04 -0500, Christoph Hellwig wrote:
> Just because our target supports TP the initiator doesn't have.
> Handle short block limit VPD requests even if TP is supported.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Postel's law +1 for hch. Commited as 462bc6c.
Thanks!
--nab
>
> Index: lio-core-2.6/drivers/target/target_core_cdb.c
> ===================================================================
> --- lio-core-2.6.orig/drivers/target/target_core_cdb.c 2010-11-09 12:12:21.908196346 +0100
> +++ lio-core-2.6/drivers/target/target_core_cdb.c 2010-11-09 12:15:14.691529680 +0100
> @@ -497,20 +497,18 @@ target_emulate_evpd_b0(struct se_cmd *cm
> if (DEV_ATTRIB(dev)->emulate_tpu || DEV_ATTRIB(dev)->emulate_tpws)
> have_tp = 1;
>
> - if (have_tp) {
> - if (cmd->data_length < (0x3c + 4)) {
> - printk(KERN_INFO "Received data_length: %u"
> - " too small for TPE=1 EVPD 0xb0\n",
> - cmd->data_length);
> - return -1;
> - }
> - } else {
> - if (cmd->data_length < (0x10 + 4)) {
> - printk(KERN_INFO "Received data_length: %u"
> - " too small for TPE=1 EVPD 0xb0\n",
> - cmd->data_length);
> - return -1;
> - }
> + if (cmd->data_length < (0x10 + 4)) {
> + printk(KERN_INFO "Received data_length: %u"
> + " too small for EVPD 0xb0\n",
> + cmd->data_length);
> + return -1;
> + }
> +
> + if (have_tp && cmd->data_length < (0x3c + 4)) {
> + printk(KERN_INFO "Received data_length: %u"
> + " too small for TPE=1 EVPD 0xb0\n",
> + cmd->data_length);
> + have_tp = 0;
> }
>
> buf[0] = dev->transport->get_device_type(dev);
> @@ -532,7 +530,11 @@ target_emulate_evpd_b0(struct se_cmd *cm
> */
> put_unaligned_be32(DEV_ATTRIB(dev)->optimal_sectors, &buf[12]);
>
> - if (!have_tp)
> + /*
> + * Exit now if we don't support TP or the initiator sent a too
> + * short buffer.
> + */
> + if (!have_tp || cmd->data_length < (0x3c + 4))
> return 0;
>
> /*
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-11-11 7:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-10 21:04 [PATCH,RFC] target: fix block limits VPD emulation Christoph Hellwig
2010-11-11 7:52 ` Nicholas A. Bellinger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox