Re: [PATCH-v2 1/6] virtio-scsi.h: Add virtio_scsi_cmd_req_pi + VIRTIO_SCSI_F_T10_PI bits

2014-05-22 Thread Michael S. Tsirkin
On Thu, May 22, 2014 at 02:26:17AM +, Nicholas A. Bellinger wrote:
 From: Nicholas Bellinger n...@linux-iscsi.org
 
 This patch adds a virtio_scsi_cmd_req_pi header as recommened by
 Paolo that contains do_pi_niov + di_pi_niov elements used for
 signaling when protection information buffers are expected to
 preceed the data buffers.

Cc rusty.
Rusty could you please Ack merging this through Nicholas' tree
together with the vhost changes?


 Also add new VIRTIO_SCSI_F_T10_PI feature bit to be used to signal
 host support.
 
 v4 changes:

v2? Proably best to drop versioning info from commit log,
move it out to notes (after ---)

- Use pi_bytesout + pi_bytesin instead of niovs (mst + paolo)

Right, so maybe update the commit log above to match?
It gave me pause.

 Cc: Paolo Bonzini pbonz...@redhat.com
 Cc: Michael S. Tsirkin m...@redhat.com
 Cc: Martin K. Petersen martin.peter...@oracle.com
 Cc: Christoph Hellwig h...@lst.de
 Cc: Hannes Reinecke h...@suse.de
 Cc: Sagi Grimberg sa...@dev.mellanox.co.il
 Cc: H. Peter Anvin h...@zytor.com
 Signed-off-by: Nicholas Bellinger n...@linux-iscsi.org
 ---
  include/linux/virtio_scsi.h |   15 ++-
  1 file changed, 14 insertions(+), 1 deletion(-)
 
 diff --git a/include/linux/virtio_scsi.h b/include/linux/virtio_scsi.h
 index 4195b97..7344906 100644
 --- a/include/linux/virtio_scsi.h
 +++ b/include/linux/virtio_scsi.h
 @@ -35,11 +35,23 @@ struct virtio_scsi_cmd_req {
   u8 lun[8];  /* Logical Unit Number */
   u64 tag;/* Command identifier */
   u8 task_attr;   /* Task attribute */
 - u8 prio;
 + u8 prio;/* SAM command priority field */
   u8 crn;
   u8 cdb[VIRTIO_SCSI_CDB_SIZE];
  } __packed;
  
 +/* SCSI command request, followed by protection information */
 +struct virtio_scsi_cmd_req_pi {
 + u8 lun[8];  /* Logical Unit Number */
 + u64 tag;/* Command identifier */
 + u8 task_attr;   /* Task attribute */
 + u8 prio;/* SAM command priority field */
 + u8 crn;
 + u32 pi_bytesout;/* DataOUT PI Number of bytes */
 + u32 pi_bytesin; /* DataIN PI Number of bytes */
 + u8 cdb[VIRTIO_SCSI_CDB_SIZE];
 +} __packed;
 +
  /* Response, followed by sense data and data-in */
  struct virtio_scsi_cmd_resp {
   u32 sense_len;  /* Sense data length */
 @@ -97,6 +109,7 @@ struct virtio_scsi_config {
  #define VIRTIO_SCSI_F_INOUT0
  #define VIRTIO_SCSI_F_HOTPLUG  1
  #define VIRTIO_SCSI_F_CHANGE   2
 +#define VIRTIO_SCSI_F_T10_PI3

Could you pad this with spaces and not tabs so it aligns nicely
with stuff above it?

  
  /* Response codes */
  #define VIRTIO_SCSI_S_OK   0
 -- 
 1.7.10.4
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Bug 76681] Adaptec 7805H SAS HBA (pm80xx) cannot survive ACPI S3 or ACPI S4

2014-05-22 Thread bugzilla-daemon
https://bugzilla.kernel.org/show_bug.cgi?id=76681

Jack Wang xjtu...@gmail.com changed:

   What|Removed |Added

 CC||xjtu...@gmail.com

--- Comment #1 from Jack Wang xjtu...@gmail.com ---
Sorry, I don't have hardware to test, could you try patch below:
diff --git a/drivers/scsi/pm8001/pm8001_init.c
b/drivers/scsi/pm8001/pm8001_init.c
index f7c1896..083a030 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -916,6 +916,7 @@ static int pm8001_pci_suspend(struct pci_dev *pdev,
pm_message_t state)
int i;
u32 device_state;
pm8001_ha = sha-lldd_ha;
+   sas_suspend_ha(sha);
flush_workqueue(pm8001_wq);
scsi_block_requests(pm8001_ha-shost);
if (!pdev-pm_cap) {
@@ -980,7 +981,7 @@ static int pm8001_pci_resume(struct pci_dev *pdev)
rc = pci_go_44(pdev);
if (rc)
goto err_out_disable;
-
+   sas_prep_resume_ha(sha);
/* chip soft rst only for spc */
if (pm8001_ha-chip_id == chip_8001) {
PM8001_CHIP_DISP-chip_soft_rst(pm8001_ha);
@@ -1009,6 +1010,9 @@ static int pm8001_pci_resume(struct pci_dev *pdev)
PM8001_CHIP_DISP-interrupt_enable(pm8001_ha, i);
}
scsi_unblock_requests(pm8001_ha-shost);
+   pm8001_scan_start(pm8001_ha-shost);
+   msleep(100);
+   sas_resume_ha(sha);
return 0;

 err_out_disable:

Jack

-- 
You are receiving this mail because:
You are the assignee for the bug.
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH-v2 6/6] virtio-scsi: Enable DIF/DIX modes in SCSI host LLD

2014-05-22 Thread Paolo Bonzini

Il 22/05/2014 04:26, Nicholas A. Bellinger ha scritto:

From: Nicholas Bellinger n...@linux-iscsi.org

This patch updates virtscsi_probe() to setup necessary Scsi_Host
level protection resources. (currently hardcoded to 1)

It changes virtscsi_add_cmd() to attach outgoing / incoming
protection SGLs preceeding the data payload, and is using the
new virtio_scsi_cmd_req_pi-d[oi],pi_niv field to signal


Wrong field name in the commit message...


to signal to vhost/scsi how many prot_sgs to expect.


s/prot_sgs to expect/bytes to expect for protection data/

Apart from this, which can be fixed in the pull request,

Acked-by: Paolo Bonzini pbonz...@redhat.com

for getting this in via the target tree.

Paolo


v4 changes:
  - Convert virtio_scsi_init_hdr_pi to use pi_bytesout + pi_bytesin
(mst + paolo + nab)
  - Use blk_integrity-tuple_size to calculate pi bytes (nab)

v3 changes:
  - Use VIRTIO_SCSI_F_T10_PI to determine PI or non PI header (Paolo)

v2 changes:
  - Make protection buffer come before data buffer (Paolo)
  - Enable virtio_scsi_cmd_req_pi usage (Paolo)

Cc: Paolo Bonzini pbonz...@redhat.com
Cc: Michael S. Tsirkin m...@redhat.com
Cc: Martin K. Petersen martin.peter...@oracle.com
Cc: Christoph Hellwig h...@lst.de
Cc: Hannes Reinecke h...@suse.de
Cc: Sagi Grimberg sa...@dev.mellanox.co.il
Cc: H. Peter Anvin h...@zytor.com
Signed-off-by: Nicholas Bellinger n...@linux-iscsi.org
---
 drivers/scsi/virtio_scsi.c |   86 ++--
 1 file changed, 68 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 16bfd50..cc634b0 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -37,6 +37,7 @@ struct virtio_scsi_cmd {
struct completion *comp;
union {
struct virtio_scsi_cmd_req   cmd;
+   struct virtio_scsi_cmd_req_picmd_pi;
struct virtio_scsi_ctrl_tmf_req  tmf;
struct virtio_scsi_ctrl_an_req   an;
} req;
@@ -440,7 +441,7 @@ static int virtscsi_add_cmd(struct virtqueue *vq,
size_t req_size, size_t resp_size, gfp_t gfp)
 {
struct scsi_cmnd *sc = cmd-sc;
-   struct scatterlist *sgs[4], req, resp;
+   struct scatterlist *sgs[6], req, resp;
struct sg_table *out, *in;
unsigned out_num = 0, in_num = 0;

@@ -458,16 +459,24 @@ static int virtscsi_add_cmd(struct virtqueue *vq,
sgs[out_num++] = req;

/* Data-out buffer.  */
-   if (out)
+   if (out) {
+   /* Place WRITE protection SGLs before Data OUT payload */
+   if (scsi_prot_sg_count(sc))
+   sgs[out_num++] = scsi_prot_sglist(sc);
sgs[out_num++] = out-sgl;
+   }

/* Response header.  */
sg_init_one(resp, cmd-resp, resp_size);
sgs[out_num + in_num++] = resp;

/* Data-in buffer */
-   if (in)
+   if (in) {
+   /* Place READ protection SGLs before Data IN payload */
+   if (scsi_prot_sg_count(sc))
+   sgs[out_num + in_num++] = scsi_prot_sglist(sc);
sgs[out_num + in_num++] = in-sgl;
+   }

return virtqueue_add_sgs(vq, sgs, out_num, in_num, cmd, gfp);
 }
@@ -492,12 +501,44 @@ static int virtscsi_kick_cmd(struct virtio_scsi_vq *vq,
return err;
 }

+static void virtio_scsi_init_hdr(struct virtio_scsi_cmd_req *cmd,
+struct scsi_cmnd *sc)
+{
+   cmd-lun[0] = 1;
+   cmd-lun[1] = sc-device-id;
+   cmd-lun[2] = (sc-device-lun  8) | 0x40;
+   cmd-lun[3] = sc-device-lun  0xff;
+   cmd-tag = (unsigned long)sc;
+   cmd-task_attr = VIRTIO_SCSI_S_SIMPLE;
+   cmd-prio = 0;
+   cmd-crn = 0;
+}
+
+static void virtio_scsi_init_hdr_pi(struct virtio_scsi_cmd_req_pi *cmd_pi,
+   struct scsi_cmnd *sc)
+{
+   struct request *rq = sc-request;
+   struct blk_integrity *bi;
+
+   virtio_scsi_init_hdr((struct virtio_scsi_cmd_req *)cmd_pi, sc);
+
+   if (!rq || !scsi_prot_sg_count(sc))
+   return;
+
+   bi = blk_get_integrity(rq-rq_disk);
+
+   if (sc-sc_data_direction == DMA_TO_DEVICE)
+   cmd_pi-pi_bytesout = blk_rq_sectors(rq) * bi-tuple_size;
+   else if (sc-sc_data_direction == DMA_FROM_DEVICE)
+   cmd_pi-pi_bytesin = blk_rq_sectors(rq) * bi-tuple_size;
+}
+
 static int virtscsi_queuecommand(struct virtio_scsi *vscsi,
 struct virtio_scsi_vq *req_vq,
 struct scsi_cmnd *sc)
 {
struct virtio_scsi_cmd *cmd;
-   int ret;
+   int ret, req_size;

struct Scsi_Host *shost = virtio_scsi_host(vscsi-vdev);
BUG_ON(scsi_sg_count(sc)  shost-sg_tablesize);
@@ -515,22 +556,20 @@ static int virtscsi_queuecommand(struct virtio_scsi 
*vscsi,

memset(cmd, 0, sizeof(*cmd));
cmd-sc = 

Re: [PATCH-v2 0/6] vhost/scsi: Add T10 PI SGL passthrough support

2014-05-22 Thread Paolo Bonzini

Il 22/05/2014 04:26, Nicholas A. Bellinger ha scritto:

From: Nicholas Bellinger n...@linux-iscsi.org

Hi MST, MKP, Paolo  Co,

Here is the v2 patch series for adding T1O protection information (PI)
SGL passthrough support between virtio-scsi LLD + vhost-scsi fabric
endpoints.

Following MST's recommendation, it includes the changes for using
bytes intead of number of iovecs in virtio_scsi_cmd_req_pi along with
the associated changes to virtio-scsi + vhost/scsi code.

For vhost/scsi, this includes walking the leading iovec's length(s)
to determine where protection payload ends, and real data payload
starts.  For virtio-scsi LLD code, this includes locating struct
blk_integrity for using blk_rq_sectors + -tuple_size to calculate
the total bytes for outgoing cmd_pi-pi_bytes[out,in] values.

The full list of changes from last series include:

  - Use pi_bytesout + pi_bytesin instead of niovs in virtio-scsi PI
header (mst + paolo)
  - Add prot_pto=1 in tcm_vhost_submission_work() when no PI buffer
exists (nab)
  - Get rid of req + cdb pointer casts in vhost_scsi_handle_vq (mst)
  - Ensure that virtio_scsi_cmd_req_pi processing happens regardless
of data_num in vhost_scsi_handle_vq (nab)
  - Pass TARGET_PROT_ALL into transport_init_session_tags() (nab)
  - Convert vhost_scsi_handle_vq to use memcpy_fromiovecend() (mst)
  - Convert vhost_scsi_handle_vq to use pi_bytesout + pi_bytesin (nab)
  - Convert virtio_scsi_init_hdr_pi() to use pi_bytesout + pi_bytesin
(mst + paolo + nab)
  - Use blk_integrity-tuple_size to calculate pi bytes (nab)

Please review for v3.16-rc1 code.

Thanks!

--nab

Nicholas Bellinger (6):
  virtio-scsi.h: Add virtio_scsi_cmd_req_pi + VIRTIO_SCSI_F_T10_PI bits
  vhost/scsi: Move sanity check into vhost_scsi_map_iov_to_sgl
  vhost/scsi: Add preallocation of protection SGLs
  vhost/scsi: Add T10 PI IOV - SGL memory mapping logic
  vhost/scsi: Enable T10 PI IOV - SGL memory mapping
  virtio-scsi: Enable DIF/DIX modes in SCSI host LLD

 drivers/scsi/virtio_scsi.c  |   86 +---
 drivers/vhost/scsi.c|  305 +--
 include/linux/virtio_scsi.h |   15 ++-
 3 files changed, 292 insertions(+), 114 deletions(-)



Looks good, thanks!

Paolo
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH RESEND] scsi: Output error messages using structured printk in single line

2014-05-22 Thread Christoph Hellwig
On Wed, May 21, 2014 at 08:30:58AM +0200, Hannes Reinecke wrote:
 While this works reasonably well for most things, printing out
 decoded sense with just one line (and not end up in massive switch()
 statements) is near impossible.
 
 Plus you'll end up having to use a static buffer at one point, which
 again increases the stack size.
 
 The alternative approach as discussed at LSF is to move scsi_logging
 over to tracing. There is already some coding for scsi tracing, but
 in most cases it just duplicates existing logging statements.
 So if we were to replace the entire scsi_logging infrastructure
 with scsi tracing most of the issues (like chopped-up CDBs) would
 be gone.
 Plus we would have a far better control about _what_ is being printed.
 
 And yes, I do have some patches for that :-)

I think any detailed logging of sense codes, cdbs and co should move
to tracing.  In fact generally any non-defauly logging probably is
better off in the tracing subsystems, but there might be a few
exceptions.

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/5] scsi: Remove CONFIG_SCSI_MULTI_LUN

2014-05-22 Thread Christoph Hellwig
On Tue, May 20, 2014 at 01:03:07PM +0200, Hannes Reinecke wrote:
 Obsolete; either use 'max_lun' if the host supports only a
 limited number of LUNs or BLIST_NOLUN if the target has
 problems addressing more than one LUN.
 
 Signed-off-by: Hannes Reinecke h...@suse.de

Looks good,

Reviewed-by: Christoph Hellwig h...@lst.de

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/5] scsi_scan: Restrict sequential scan to 256 LUNs

2014-05-22 Thread Christoph Hellwig
On Tue, May 20, 2014 at 01:03:08PM +0200, Hannes Reinecke wrote:
 Sequential scan for more than 256 LUNs is very fragile as
 LUNs might not be numbered sequentially after that point.
 
 SAM revisions later than SCSI-3 impose a structure on
 LUNs larger than 256, making LUN numbers between 256
 and 16384 illegal.
 SCSI-3, however allows for plain 64-bit numbers with
 no internal structure.
 
 So restrict sequential LUN scan to 256 LUNs and add a
 new blacklist flag 'BLIST_SCSI3LUN' to scan up to
 max_lun devices.

Looks good,

Reviewed-by: Christoph Hellwig h...@lst.de

Do you know any common devices reporting SCSI-2?  I've only really seen 
SCSI-2 and never SBC levels in practical use.
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/5] qla2xxx: Restrict max_lun to 16-bit for older HBAs

2014-05-22 Thread Christoph Hellwig
On Tue, May 20, 2014 at 01:03:09PM +0200, Hannes Reinecke wrote:
 Older HBAs are only capable of supporting 16-bit LUNs,
 so we need to make sure to adjust max_lun accordingly.
 
 Signed-off-by: Hannes Reinecke h...@suse.de
 Acked-by: Chad Dupuis chad.dup...@qlogic.com

Looks good,

Reviewed-by: Christoph Hellwig h...@lst.de

This is probably something we should put in now instead of waiting for
the rest of the series.

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/5] scsi: use 64-bit LUNs

2014-05-22 Thread Christoph Hellwig
On Tue, May 20, 2014 at 01:03:10PM +0200, Hannes Reinecke wrote:
 The SCSI standard defines 64-bit values for LUNs, and large arrays
 employing large or hierarchical LUN numbers become more and more
 common.
 
 So update the linux SCSI stack to use 64-bit LUN numbers.
 
 Signed-off-by: Hannes Reinecke h...@suse.de

Looks good,

Reviewed-by: Christoph Hellwig h...@lst.de

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 5/5] scsi: use 64-bit value for 'max_luns'

2014-05-22 Thread Christoph Hellwig
On Tue, May 20, 2014 at 01:03:11PM +0200, Hannes Reinecke wrote:
 Now that we're using 64-bit LUNs internally we need to increase
 the size of max_luns to 64 bits, too.

Looks good,

Reviewed-by: Christoph Hellwig h...@lst.de
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu

2014-05-22 Thread KY Srinivasan


 -Original Message-
 From: Andy Whitcroft [mailto:a...@canonical.com]
 Sent: Wednesday, May 21, 2014 7:25 AM
 To: Ian Abbott
 Cc: linux-scsi@vger.kernel.org; de...@linuxdriverproject.org; KY Srinivasan;
 Haiyang Zhang; James E.J. Bottomley; Tim Gardner
 Subject: Re: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu
 
 On 16 May 2014 16:39, Ian Abbott abbo...@mev.co.uk wrote:
  These changes to the Microsoft Hyper-V storage driver in Ubuntu
  Saucy's
  3.13 kernel look useful for the mainline kernel, especially as they
  enable 'TRIM' support.
 
  Andy Whitcroft (2):
scsi: hyper-v storvsc switch up to SPC-3
scsi: hyper-v storvsc -- host takes MAINTENANCE_IN commands badly --
  elide them
 
   drivers/scsi/storvsc_drv.c | 10 ++
   1 file changed, 10 insertions(+)
 
 
 The back story here is a little complex.  The main issue is that the Hyper-V
 drives claim to be SPC-2, and yet implement the SPC-3 extensions for TRIM.
 We did attempt to upstream quirks to allow these features to be negotiated
 specifically for the Hyper-V virtual drives (minimum regression potential) but
 these were NAKd, and it was suggested that just overriding the Hyper-V
 drives to SPC-3 unconditionally was more appropriate.  The first of the
 patches here does does this.  This has been sitting in our tree for some time
 as it was not clear that this would be entirely safe, though the SPC-3 bits 
 are
 in theory at least mostly detected.  That said this change has been in Ubuntu
 for a full cycle now and does not seem to have caused any issues.  If KY is
 happy we should likely submit it formally.  The second fix I believed was
 already being submitted to mainline.
 
 KY?

The Windows guys are not currently comfortable claiming conformance to SPC-3, 
as they have not done
the necessary testing. This will change hopefully soon.

K. Y
 
 -apw
N�r��yb�X��ǧv�^�)޺{.n�+{{ay�ʇڙ�,j��f���h���z��w���
���j:+v���w�j�mzZ+�ݢj��!�i

Re: [PATCH-v2 1/6] virtio-scsi.h: Add virtio_scsi_cmd_req_pi + VIRTIO_SCSI_F_T10_PI bits

2014-05-22 Thread Rusty Russell
Michael S. Tsirkin m...@redhat.com writes:
 On Thu, May 22, 2014 at 02:26:17AM +, Nicholas A. Bellinger wrote:
 From: Nicholas Bellinger n...@linux-iscsi.org
 
 This patch adds a virtio_scsi_cmd_req_pi header as recommened by
 Paolo that contains do_pi_niov + di_pi_niov elements used for
 signaling when protection information buffers are expected to
 preceed the data buffers.

 Cc rusty.
 Rusty could you please Ack merging this through Nicholas' tree
 together with the vhost changes?

Acked-by: Rusty Russell ru...@rustcorp.com.au

Thanks,
Rusty.
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu

2014-05-22 Thread James Bottomley
On Thu, 2014-05-22 at 10:49 +, KY Srinivasan wrote:
 
 
  -Original Message-
  From: Andy Whitcroft [mailto:a...@canonical.com]
  Sent: Wednesday, May 21, 2014 7:25 AM
  To: Ian Abbott
  Cc: linux-scsi@vger.kernel.org; de...@linuxdriverproject.org; KY Srinivasan;
  Haiyang Zhang; James E.J. Bottomley; Tim Gardner
  Subject: Re: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu
  
  On 16 May 2014 16:39, Ian Abbott abbo...@mev.co.uk wrote:
   These changes to the Microsoft Hyper-V storage driver in Ubuntu
   Saucy's
   3.13 kernel look useful for the mainline kernel, especially as they
   enable 'TRIM' support.
  
   Andy Whitcroft (2):
 scsi: hyper-v storvsc switch up to SPC-3
 scsi: hyper-v storvsc -- host takes MAINTENANCE_IN commands badly --
   elide them
  
drivers/scsi/storvsc_drv.c | 10 ++
1 file changed, 10 insertions(+)
  
  
  The back story here is a little complex.  The main issue is that the Hyper-V
  drives claim to be SPC-2, and yet implement the SPC-3 extensions for TRIM.
  We did attempt to upstream quirks to allow these features to be negotiated
  specifically for the Hyper-V virtual drives (minimum regression potential) 
  but
  these were NAKd, and it was suggested that just overriding the Hyper-V
  drives to SPC-3 unconditionally was more appropriate.  The first of the
  patches here does does this.  This has been sitting in our tree for some 
  time
  as it was not clear that this would be entirely safe, though the SPC-3 bits 
  are
  in theory at least mostly detected.  That said this change has been in 
  Ubuntu
  for a full cycle now and does not seem to have caused any issues.  If KY is
  happy we should likely submit it formally.  The second fix I believed was
  already being submitted to mainline.
  
  KY?
 
 The Windows guys are not currently comfortable claiming conformance to
 SPC-3, as they have not done
 the necessary testing. This will change hopefully soon.

Any bounds on the value of soon are we talking weeks or months?  I
think trim is a feature, which means no huge rush to get this in, but it
is nice to respond in a timely fashion to a request from a distribution
to enable a useful feature.

James


--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH RFC] Remove the cancel_delayed_work() call from scsi_put_command()

2014-05-22 Thread Paolo Bonzini

Il 21/05/2014 15:30, Bart Van Assche ha scritto:

+static bool scmd_being_handled_in_other_context(struct scsi_cmnd *scmd)
+{
+   struct Scsi_Host *shost = scmd-device-host;
+   struct scsi_cmnd *c;
+   unsigned long flags;
+   bool ret = false;
+
+   if (!blk_rq_completed(scmd-request))
+   return true;
+
+   spin_lock_irqsave(shost-host_lock, flags);
+   list_for_each_entry(c, shost-eh_cmd_q, eh_entry) {
+   if (c == scmd) {
+   ret = true;
+   break;
+   }
+   }
+   spin_unlock_irqrestore(shost-host_lock, flags);
+
+   return ret;
+}
+
 /**
  * scmd_eh_abort_handler - Handle command aborts
  * @work:  command to be aborted.
@@ -120,6 +142,8 @@ scmd_eh_abort_handler(struct work_struct *work)
struct scsi_device *sdev = scmd-device;
int rtn;

+   WARN_ON_ONCE(scmd_being_handled_in_other_context(scmd));


What about a simpler, though less accuracte

WARN_ON(!blk_rq_completed(scmd-request));

that doesn't need the host_lock?

Paolo
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH RFC] Remove the cancel_delayed_work() call from scsi_put_command()

2014-05-22 Thread Bart Van Assche
On 05/22/14 18:22, Paolo Bonzini wrote:
 Il 21/05/2014 15:30, Bart Van Assche ha scritto:
 +static bool scmd_being_handled_in_other_context(struct scsi_cmnd *scmd)
 +{
 +struct Scsi_Host *shost = scmd-device-host;
 +struct scsi_cmnd *c;
 +unsigned long flags;
 +bool ret = false;
 +
 +if (!blk_rq_completed(scmd-request))
 +return true;
 +
 +spin_lock_irqsave(shost-host_lock, flags);
 +list_for_each_entry(c, shost-eh_cmd_q, eh_entry) {
 +if (c == scmd) {
 +ret = true;
 +break;
 +}
 +}
 +spin_unlock_irqrestore(shost-host_lock, flags);
 +
 +return ret;
 +}
 +
  /**
   * scmd_eh_abort_handler - Handle command aborts
   * @work:command to be aborted.
 @@ -120,6 +142,8 @@ scmd_eh_abort_handler(struct work_struct *work)
  struct scsi_device *sdev = scmd-device;
  int rtn;

 +WARN_ON_ONCE(scmd_being_handled_in_other_context(scmd));
 
 What about a simpler, though less accuracte
 
 WARN_ON(!blk_rq_completed(scmd-request));
 
 that doesn't need the host_lock?

One reason why I posted this patch as an RFC was to invite feedback. I'm
fine with leaving out the loop over the eh_cmd_q list although I do not
expect that will make a significant performance difference. None of the
functions in which a check was added are in the hot path.

Bart.

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] [SCSI] mptfusion: remove check for CONFIG_FUSION_MAX_FC_SGE

2014-05-22 Thread Paul Bolle
A check for CONFIG_FUSION_MAX_FC_SGE was added in v2.6.31. But the
related Kconfig symbol was never added to the tree. Remove this check,
as it always evaluates to false.

Signed-off-by: Paul Bolle pebo...@tiscali.nl
---
Compile tested only.

 drivers/message/fusion/mptbase.h | 10 --
 1 file changed, 10 deletions(-)

diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index 76c05bc24cb7..43695ec7ac83 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -177,17 +177,7 @@
 #define MPT_SCSI_SG_DEPTH  40
 #endif
 
-#ifdef CONFIG_FUSION_MAX_FC_SGE
-#if CONFIG_FUSION_MAX_FC_SGE   16
-#define MPT_SCSI_FC_SG_DEPTH   16
-#elif CONFIG_FUSION_MAX_FC_SGE   256
-#define MPT_SCSI_FC_SG_DEPTH   256
-#else
-#define MPT_SCSI_FC_SG_DEPTH   CONFIG_FUSION_MAX_FC_SGE
-#endif
-#else
 #define MPT_SCSI_FC_SG_DEPTH   40
-#endif
 
 /* debug print string length used for events and iocstatus */
 # define EVENT_DESCR_STR_SZ 100
-- 
1.9.0

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] [SCSI] mptfusion: remove check for CONFIG_FUSION_MAX_FC_SGE

2014-05-22 Thread Paul Bolle
On Thu, 2014-05-22 at 19:58 +, Address Change LSI wrote:
 The person you are trying to email is no longer receiving email @lsi.com. 
 Please try sending to them at
 Avago Technologies using firstname.lastn...@avagotech.com.
 
 Please Note: Your original message has been forwarded to this recipient’s new 
 Avago email account.

It seems lsi.com addresses in MAINTAINERS should be be updated.


Paul Bolle

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH-v2 1/6] virtio-scsi.h: Add virtio_scsi_cmd_req_pi + VIRTIO_SCSI_F_T10_PI bits

2014-05-22 Thread Nicholas A. Bellinger
On Thu, 2014-05-22 at 09:57 +0300, Michael S. Tsirkin wrote:
 On Thu, May 22, 2014 at 02:26:17AM +, Nicholas A. Bellinger wrote:
  From: Nicholas Bellinger n...@linux-iscsi.org
  
  This patch adds a virtio_scsi_cmd_req_pi header as recommened by
  Paolo that contains do_pi_niov + di_pi_niov elements used for
  signaling when protection information buffers are expected to
  preceed the data buffers.
 
 Cc rusty.
 Rusty could you please Ack merging this through Nicholas' tree
 together with the vhost changes?
 
 
  Also add new VIRTIO_SCSI_F_T10_PI feature bit to be used to signal
  host support.
  
  v4 changes:
 
 v2? Proably best to drop versioning info from commit log,
 move it out to notes (after ---)

Dropped

 
 - Use pi_bytesout + pi_bytesin instead of niovs (mst + paolo)
 
 Right, so maybe update the commit log above to match?
 It gave me pause.

Fixed

 
  Cc: Paolo Bonzini pbonz...@redhat.com
  Cc: Michael S. Tsirkin m...@redhat.com
  Cc: Martin K. Petersen martin.peter...@oracle.com
  Cc: Christoph Hellwig h...@lst.de
  Cc: Hannes Reinecke h...@suse.de
  Cc: Sagi Grimberg sa...@dev.mellanox.co.il
  Cc: H. Peter Anvin h...@zytor.com
  Signed-off-by: Nicholas Bellinger n...@linux-iscsi.org
  ---
   include/linux/virtio_scsi.h |   15 ++-
   1 file changed, 14 insertions(+), 1 deletion(-)
  
  diff --git a/include/linux/virtio_scsi.h b/include/linux/virtio_scsi.h
  index 4195b97..7344906 100644
  --- a/include/linux/virtio_scsi.h
  +++ b/include/linux/virtio_scsi.h
  @@ -35,11 +35,23 @@ struct virtio_scsi_cmd_req {
  u8 lun[8];  /* Logical Unit Number */
  u64 tag;/* Command identifier */
  u8 task_attr;   /* Task attribute */
  -   u8 prio;
  +   u8 prio;/* SAM command priority field */
  u8 crn;
  u8 cdb[VIRTIO_SCSI_CDB_SIZE];
   } __packed;
   
  +/* SCSI command request, followed by protection information */
  +struct virtio_scsi_cmd_req_pi {
  +   u8 lun[8];  /* Logical Unit Number */
  +   u64 tag;/* Command identifier */
  +   u8 task_attr;   /* Task attribute */
  +   u8 prio;/* SAM command priority field */
  +   u8 crn;
  +   u32 pi_bytesout;/* DataOUT PI Number of bytes */
  +   u32 pi_bytesin; /* DataIN PI Number of bytes */
  +   u8 cdb[VIRTIO_SCSI_CDB_SIZE];
  +} __packed;
  +
   /* Response, followed by sense data and data-in */
   struct virtio_scsi_cmd_resp {
  u32 sense_len;  /* Sense data length */
  @@ -97,6 +109,7 @@ struct virtio_scsi_config {
   #define VIRTIO_SCSI_F_INOUT0
   #define VIRTIO_SCSI_F_HOTPLUG  1
   #define VIRTIO_SCSI_F_CHANGE   2
  +#define VIRTIO_SCSI_F_T10_PI  3
 
 Could you pad this with spaces and not tabs so it aligns nicely
 with stuff above it?

Fixed

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH-v2 6/6] virtio-scsi: Enable DIF/DIX modes in SCSI host LLD

2014-05-22 Thread Nicholas A. Bellinger
On Thu, 2014-05-22 at 10:37 +0200, Paolo Bonzini wrote:
 Il 22/05/2014 04:26, Nicholas A. Bellinger ha scritto:
  From: Nicholas Bellinger n...@linux-iscsi.org
 
  This patch updates virtscsi_probe() to setup necessary Scsi_Host
  level protection resources. (currently hardcoded to 1)
 
  It changes virtscsi_add_cmd() to attach outgoing / incoming
  protection SGLs preceeding the data payload, and is using the
  new virtio_scsi_cmd_req_pi-d[oi],pi_niv field to signal
 
 Wrong field name in the commit message...
 

Fixed

  to signal to vhost/scsi how many prot_sgs to expect.
 
 s/prot_sgs to expect/bytes to expect for protection data/
 

Fixed.

 Apart from this, which can be fixed in the pull request,
 
 Acked-by: Paolo Bonzini pbonz...@redhat.com
 
 for getting this in via the target tree.
 

Thanks Paolo!

--nab

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [target:for-next 20/20] drivers/scsi/virtio_scsi.c:531:48: error: dereferencing pointer to incomplete type

2014-05-22 Thread Nicholas A. Bellinger
Hi Fengguang,

On Thu, 2014-05-22 at 11:13 +0800, kbuild test robot wrote:
 tree:   git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git 
 for-next
 head:   4baaa7d589e24bfe87dfd6c7a1229108be404a28
 commit: 4baaa7d589e24bfe87dfd6c7a1229108be404a28 [20/20] virtio-scsi: Enable 
 DIF/DIX modes in SCSI host LLD
 config: x86_64-randconfig-x000 (attached as .config)
 
 All error/warnings:
 
drivers/scsi/virtio_scsi.c: In function 'virtio_scsi_init_hdr_pi':
  drivers/scsi/virtio_scsi.c:531:48: error: dereferencing pointer to 
  incomplete type
   cmd_pi-pi_bytesout = blk_rq_sectors(rq) * bi-tuple_size;
^
  drivers/scsi/virtio_scsi.c:533:47: error: dereferencing pointer to 
  incomplete type
   cmd_pi-pi_bytesin = blk_rq_sectors(rq) * bi-tuple_size;
   ^
 
 vim +531 drivers/scsi/virtio_scsi.c
 
525if (!rq || !scsi_prot_sg_count(sc))
526return;
527
528bi = blk_get_integrity(rq-rq_disk);
529
530if (sc-sc_data_direction == DMA_TO_DEVICE)
   531cmd_pi-pi_bytesout = blk_rq_sectors(rq) * 
 bi-tuple_size;
532else if (sc-sc_data_direction == DMA_FROM_DEVICE)
   533cmd_pi-pi_bytesin = blk_rq_sectors(rq) * 
 bi-tuple_size;
534}
535
536static int virtscsi_queuecommand(struct virtio_scsi *vscsi,
 

Squashing the following into the original commit to enable blk-integrity
for virtio-scsi to address the randconfig build failure above.

Thanks!

--nab

diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 02832d6..baca589 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -1773,6 +1773,7 @@ config SCSI_BFA_FC
 config SCSI_VIRTIO
tristate virtio-scsi support
depends on VIRTIO
+   select BLK_DEV_INTEGRITY
help
   This is the virtual HBA driver for virtio.  If the kernel will
   be used in a virtual machine, say Y or M.


--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] scsi_transport_sas: move bsg destructor into sas_rphy_remove

2014-05-22 Thread Joe Lawrence
The recent change in sysfs, bcdde7e221a8750f9b62b6d0bd31b72ea4ad9309
sysfs: make __sysfs_remove_dir() recursive revealed an asymmetric
rphy device creation/deletion sequence in scsi_transport_sas:

  modprobe mpt2sas
sas_rphy_add
  device_add A   rphy-dev
  device_add B   sas_device transport class
  device_add C   sas_end_device transport class
  device_add D   bsg class

  rmmod mpt2sas
sas_rphy_delete
  sas_rphy_remove
device_del B
device_del C
device_del A
  sysfs_remove_group recursive sysfs dir removal
  sas_rphy_free
device_del D warning

  where device A is the parent of B, C, and D.

When sas_rphy_free tries to unregister the bsg request queue (device D
above), the ensuing sysfs cleanup discovers that its sysfs group has
already been removed and emits a warning, sysfs group... not found for
kobject 'end_device-X:0'.

Since bsg creation is a side effect of sas_rphy_add, move its
complementary removal call into sas_rphy_remove. This imposes the
following tear-down order for the devices above: D, B, C, A.

Note the sas_device and sas_end_device transport class devices (B and C
above) are created and destroyed both via the list match traversal in
attribute_container_device_trigger, so the order in which they are
handled is fixed. This is fine as long as they are deleted before their
parent device.

Signed-off-by: Joe Lawrence joe.lawre...@stratus.com
Cc: James E.J. Bottomley jbottom...@parallels.com
Cc: Christoph Hellwig h...@infradead.org
Acked-by: Dan Williams dan.j.willi...@intel.com
---
 drivers/scsi/scsi_transport_sas.c |3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/scsi/scsi_transport_sas.c 
b/drivers/scsi/scsi_transport_sas.c
index 1b68142..c341f85 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -1621,8 +1621,6 @@ void sas_rphy_free(struct sas_rphy *rphy)
list_del(rphy-list);
mutex_unlock(sas_host-lock);
 
-   sas_bsg_remove(shost, rphy);
-
transport_destroy_device(dev);
 
put_device(dev);
@@ -1681,6 +1679,7 @@ sas_rphy_remove(struct sas_rphy *rphy)
}
 
sas_rphy_unlink(rphy);
+   sas_bsg_remove(NULL, rphy);
transport_remove_device(dev);
device_del(dev);
 }
-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu

2014-05-22 Thread KY Srinivasan


 -Original Message-
 From: James Bottomley [mailto:james.bottom...@hansenpartnership.com]
 Sent: Thursday, May 22, 2014 7:38 AM
 To: KY Srinivasan
 Cc: Andy Whitcroft; Ian Abbott; linux-scsi@vger.kernel.org;
 de...@linuxdriverproject.org; Haiyang Zhang; Tim Gardner
 Subject: Re: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu
 
 On Thu, 2014-05-22 at 10:49 +, KY Srinivasan wrote:
 
 
   -Original Message-
   From: Andy Whitcroft [mailto:a...@canonical.com]
   Sent: Wednesday, May 21, 2014 7:25 AM
   To: Ian Abbott
   Cc: linux-scsi@vger.kernel.org; de...@linuxdriverproject.org; KY
   Srinivasan; Haiyang Zhang; James E.J. Bottomley; Tim Gardner
   Subject: Re: [PATCH 0/2] scsi: hyper-v storvsc changes by Ubuntu
  
   On 16 May 2014 16:39, Ian Abbott abbo...@mev.co.uk wrote:
These changes to the Microsoft Hyper-V storage driver in Ubuntu
Saucy's
3.13 kernel look useful for the mainline kernel, especially as
they enable 'TRIM' support.
   
Andy Whitcroft (2):
  scsi: hyper-v storvsc switch up to SPC-3
  scsi: hyper-v storvsc -- host takes MAINTENANCE_IN commands badly
 --
elide them
   
 drivers/scsi/storvsc_drv.c | 10 ++
 1 file changed, 10 insertions(+)
  
  
   The back story here is a little complex.  The main issue is that the
   Hyper-V drives claim to be SPC-2, and yet implement the SPC-3
 extensions for TRIM.
   We did attempt to upstream quirks to allow these features to be
   negotiated specifically for the Hyper-V virtual drives (minimum
   regression potential) but these were NAKd, and it was suggested that
   just overriding the Hyper-V drives to SPC-3 unconditionally was more
   appropriate.  The first of the patches here does does this.  This
   has been sitting in our tree for some time as it was not clear that
   this would be entirely safe, though the SPC-3 bits are in theory at
   least mostly detected.  That said this change has been in Ubuntu for
   a full cycle now and does not seem to have caused any issues.  If KY
   is happy we should likely submit it formally.  The second fix I believed 
   was
 already being submitted to mainline.
  
   KY?
 
  The Windows guys are not currently comfortable claiming conformance to
  SPC-3, as they have not done the necessary testing. This will change
  hopefully soon.
 
 Any bounds on the value of soon are we talking weeks or months?  I think
 trim is a feature, which means no huge rush to get this in, but it is nice to
 respond in a timely fashion to a request from a distribution to enable a 
 useful
 feature.

James,

I know they have been testing for SPC-3 compliance. I have pinged them to see 
when they may give me
the go ahead. I will keep you posted.

Thanks,

K. Y
--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: dangling pointers and/or reentrancy in scmd_eh_abort_handler?

2014-05-22 Thread Elliott, Robert (Server Storage)


 -Original Message-
 From: linux-scsi-ow...@vger.kernel.org [mailto:linux-scsi-
 ow...@vger.kernel.org] On Behalf Of Paolo Bonzini
 Sent: Wednesday, 21 May, 2014 3:34 PM
 To: Mark Wu; linux-scsi@vger.kernel.org
 Subject: Re: dangling pointers and/or reentrancy in
 scmd_eh_abort_handler?
 
 Il 21/05/2014 16:16, Mark Wu ha scritto:
  Is it possible that when scsi_done is invoked, the scsi command or the
  request has been freed and then reallocated for a new I/O request?
 Because
  of this the bit flag REQ_ATOM_COMPLETE becomes unreliable.  Thanks!
 
 It is up to the driver to ensure that the interrupt handler will not
 process the Scsi_Cmnd* after returning from the eh_abort_handler.  If
 you do this, what you say cannot happen.  Otherwise you'll get a variety
 of failures, the most common of which for me are OOPSes and a BUG in
 blk_finish_request.
 
 Paolo

Aborts don't always work; scsi_eh_abort_handler cannot promise that 
it aborted the command (unless it escalated to sending resets.)
When the abort fails, scmd_eh_abort_handler just leaves it
outstanding, and the error handler thread (scsi_error_handler
function) must deal with it.

If the abort succeeds, then scmd_eh_abort_handler calls
scsi_finish_command.

In SCSI terms, FUNCTION COMPLETE for ABORT TASK doesn't mean the 
command was present and aborted and won't be sending back status; 
if the device server already sent status for the command, the 
task manager also sends FUNCTION COMPLETE.

Depending on the transport, there may be a race condition between 
the command status and the ABORT TASK response; the ABORT TASK 
response might get back first.  I think that means 
scsi_eh_abort_handler's call to scsi_finish_command could
happen during or after scsi_softirq_done has called
scsi_finish_command.

---
Rob ElliottHP Server Storage






--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/1] Drivers: scsi: storvsc: Change the limits to reflect the values on the host

2014-05-22 Thread K. Y. Srinivasan
Hyper-V hosts can support multiple targets and multiple channels and larger 
number of
LUNs per target. Update the code to reflect this. With this patch we can 
correctly
enumerate all the paths in a multi-path storage environment.

MS-TFS: 173725

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Cc: sta...@vger.kernel.org
---
 drivers/scsi/storvsc_drv.c |   36 ++--
 1 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 9969fa1..5a63772 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -331,16 +331,15 @@ static int storvsc_timeout = 180;
 static void storvsc_on_channel_callback(void *context);
 
 /*
- * In Hyper-V, each port/path/target maps to 1 scsi host adapter.  In
- * reality, the path/target is not used (ie always set to 0) so our
- * scsi host adapter essentially has 1 bus with 1 target that contains
- * up to 256 luns.
+ * In Hyper-V, each port/path/target maps to 1 scsi host adapter.
  */
-#define STORVSC_MAX_LUNS_PER_TARGET64
-#define STORVSC_MAX_TARGETS1
-#define STORVSC_MAX_CHANNELS   1
-
+#define STORVSC_MAX_LUNS_PER_TARGET255
+#define STORVSC_MAX_TARGETS2
+#define STORVSC_MAX_CHANNELS   8
 
+#define STORVSC_FC_MAX_LUNS_PER_TARGET 255
+#define STORVSC_FC_MAX_TARGETS 128
+#define STORVSC_FC_MAX_CHANNELS8
 
 struct storvsc_cmd_request {
struct list_head entry;
@@ -1789,12 +1788,21 @@ static int storvsc_probe(struct hv_device *device,
host_dev-path = stor_device-path_id;
host_dev-target = stor_device-target_id;
 
-   /* max # of devices per target */
-   host-max_lun = STORVSC_MAX_LUNS_PER_TARGET;
-   /* max # of targets per channel */
-   host-max_id = STORVSC_MAX_TARGETS;
-   /* max # of channels */
-   host-max_channel = STORVSC_MAX_CHANNELS - 1;
+   if (dev_id-driver_data == SFC_GUID) {
+   /* max # of devices per target */
+   host-max_lun = STORVSC_FC_MAX_LUNS_PER_TARGET;
+   /* max # of targets per channel */
+   host-max_id = STORVSC_FC_MAX_TARGETS;
+   /* max # of channels */
+   host-max_channel = STORVSC_FC_MAX_CHANNELS - 1;
+   } else {
+   /* max # of devices per target */
+   host-max_lun = STORVSC_MAX_LUNS_PER_TARGET;
+   /* max # of targets per channel */
+   host-max_id = STORVSC_MAX_TARGETS;
+   /* max # of channels */
+   host-max_channel = STORVSC_MAX_CHANNELS - 1;
+   }
/* max cmd length */
host-max_cmd_len = STORVSC_MAX_CMD_LEN;
 
-- 
1.7.4.1

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH-scsi-for-next] tcm_qla2xxx: Set correct protection flags when DIF/DIX is enabled

2014-05-22 Thread Nicholas A. Bellinger
From: Nicholas Bellinger n...@linux-iscsi.org

With the advent of per session protection flags in v3.15-rc1 code,
a target fabric driver supporting T10 PI needs to declare it's own
protection capabilities at transport_init_session() time.

This patch updates tcm_qla2xxx_check_initiator_node_acl() to extract
the T10 PI capabilities using scsi_qla_host_t-flags.difdix_supported,
and sets TARGET_PROT_ALL (all forms of PASS + INSERT + STRIP operations
supported by HW fabric offloads) when available.

Cc: Quinn Tran quinn.t...@qlogic.com
Cc: Giridhar Malavali giridhar.malav...@qlogic.com
Cc: Saurav Kashyap saurav.kash...@qlogic.com
Cc: Christoph Hellwig h...@lst.de
Cc: James Bottomley jbottom...@parallels.com
Signed-off-by: Nicholas Bellinger n...@linux-iscsi.org
---
 drivers/scsi/qla2xxx/tcm_qla2xxx.c |5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c 
b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index 896cb23..8c10438 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -1501,7 +1501,8 @@ static int tcm_qla2xxx_check_initiator_node_acl(
struct qla_tgt_sess *sess = qla_tgt_sess;
unsigned char port_name[36];
unsigned long flags;
-
+   int prot_flags = (vha-flags.difdix_supported) ? TARGET_PROT_ALL :
+TARGET_PROT_NORMAL;
lport = vha-vha_tgt.target_lport_ptr;
if (!lport) {
pr_err(Unable to locate struct tcm_qla2xxx_lport\n);
@@ -1518,7 +1519,7 @@ static int tcm_qla2xxx_check_initiator_node_acl(
}
se_tpg = tpg-se_tpg;
 
-   se_sess = transport_init_session(TARGET_PROT_NORMAL);
+   se_sess = transport_init_session(prot_flags);
if (IS_ERR(se_sess)) {
pr_err(Unable to initialize struct se_session\n);
return PTR_ERR(se_sess);
-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-scsi in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 39/42] qla2xxx: ABTS cause double free of qla_tgt_cmd +.

2014-05-22 Thread Nicholas A. Bellinger
Hi Saurav + Quinn,

Just curious if this fix needs to be CC'ed to stable as well, or if it's
something that is only triggered with the preceding T10 DIF support
patch in place..?

--nab

On Fri, 2014-04-11 at 16:54 -0400, Saurav Kashyap wrote:
 From: Quinn Tran quinn.t...@qlogic.com
 
 Fix double free problem within qla2xxx driver where
 current code prematurely free qla_tgt_cmd while firmware
 still has the command.  When firmware release the command
 after abort, the code attempt a second free as part of
 command completion processing.
 
 When TCM start the free process, NULL pointer was hit.
 
 --
 WARNING: CPU: 8 PID: 43613 at lib/list_debug.c:62 __list_del_entry+0x82/0xd0()
 list_del corruption. next-prev should be 88082b5cfb08, but was 
 6b6b6b6b6b6b6b6b
 CPU: 8 PID: 43613 Comm: kworker/8:0 Tainted: GF   W  O 
 3.13.0-rc3-nab_t10dif+ #6
 Hardware name: HP ProLiant DL380p Gen8, BIOS P70 08/20/2012
 Workqueue: events cache_reap
 003e 88081b2e3c78 815a051f 003e
 88081b2e3cc8 88081b2e3cb8 8104fc2c 
 88082b5cfb00 88081c788d00 88082b5d7200 88082b5d3080
 Call Trace:
 [815a051f] dump_stack+0x49/0x62
 [8104fc2c] warn_slowpath_common+0x8c/0xc0
 [8104fd16] warn_slowpath_fmt+0x46/0x50
 [812b6592] __list_del_entry+0x82/0xd0
 [8106d48c] process_one_work+0x12c/0x510
 [8106d4d3] ? process_one_work+0x173/0x510
 [8106ebdf] worker_thread+0x11f/0x3a0
 [8106eac0] ? manage_workers+0x170/0x170
 [81074f26] kthread+0xf6/0x120
 [8109f103] ? __lock_release+0x133/0x1b0
 [81074e30] ? __init_kthread_worker+0x70/0x70
 [815aec2c] ret_from_fork+0x7c/0xb0
 [81074e30] ? __init_kthread_worker+0x70/0x70
 ---[ end trace dfc05c3f7caf8ebe ]---
 BUG: unable to handle kernel NULL pointer dereference at 0008
 IP: [8106d391] process_one_work+0x31/0x510
 ---
 
 Signed-off-by: Quinn Tran quinn.t...@qlogic.com
 Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com
 Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com
 ---
  drivers/scsi/qla2xxx/qla_target.c |   29 ++---
  1 files changed, 26 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/scsi/qla2xxx/qla_target.c 
 b/drivers/scsi/qla2xxx/qla_target.c
 index f24d44c..b1d10f9 100644
 --- a/drivers/scsi/qla2xxx/qla_target.c
 +++ b/drivers/scsi/qla2xxx/qla_target.c
 @@ -2681,7 +2681,18 @@ static void qlt_send_term_exchange(struct 
 scsi_qla_host *vha,
   rc = __qlt_send_term_exchange(vha, cmd, atio);
   spin_unlock_irqrestore(vha-hw-hardware_lock, flags);
  done:
 - if (rc == 1) {
 + /*
 +  * Terminate exchange will tell fw to release any active CTIO
 +  * that's in FW posession and cleanup the exchange.
 +  *
 +  * cmd-state == QLA_TGT_STATE_ABORTED means CTIO is still
 +  * down at FW.  Free the cmd later when CTIO comes back later
 +  * w/aborted(0x2) status.
 +  *
 +  * cmd-state != QLA_TGT_STATE_ABORTED means CTIO is already
 +  * back w/some err.  Free the cmd now.
 +  */
 + if ((rc == 1)  (cmd-state != QLA_TGT_STATE_ABORTED)) {
   if (!ha_locked  !in_interrupt())
   msleep(250); /* just in case */
  
 @@ -2689,6 +2700,7 @@ done:
   qlt_unmap_sg(vha, cmd);
   vha-hw-tgt.tgt_ops-free_cmd(cmd);
   }
 + return;
  }
  
  void qlt_free_cmd(struct qla_tgt_cmd *cmd)
 @@ -2906,6 +2918,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host 
 *vha, uint32_t handle,
   case CTIO_LIP_RESET:
   case CTIO_TARGET_RESET:
   case CTIO_ABORTED:
 + /* driver request abort via Terminate exchange */
   case CTIO_TIMEOUT:
   case CTIO_INVALID_RX_ID:
   /* They are OK */
 @@ -2974,9 +2987,18 @@ static void qlt_do_ctio_completion(struct 
 scsi_qla_host *vha, uint32_t handle,
   break;
   }
  
 - if (cmd-state != QLA_TGT_STATE_NEED_DATA)
 +
 + /* cmd-state == QLA_TGT_STATE_ABORTED means
 +  * cmd is already aborted/terminated, we don't
 +  * need to terminate again.  The exchange is already
 +  * cleaned up/freed at FW level.  Just cleanup at driver
 +  * level.
 +  */
 + if ((cmd-state != QLA_TGT_STATE_NEED_DATA) 
 + (cmd-state != QLA_TGT_STATE_ABORTED)) {
   if (qlt_term_ctio_exchange(vha, ctio, cmd, status))
   return;
 + }
   }
  skip_term:
  
 @@ -3007,7 +3029,8 @@ skip_term:
   not return a CTIO complete\n, vha-vp_idx, cmd-state);
   }
  
 - if (unlikely(status != CTIO_SUCCESS)) {
 + if (unlikely(status != CTIO_SUCCESS) 
 + (cmd-state != QLA_TGT_STATE_ABORTED)) {