Print this page
NEX-5428 Backout the 5.0 changes
NEX-2937 Continuous write_same starves all other commands
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
NEX-3217 Panic running benchmark at ESX VM
NEX-3204 Panic doing FC rescan from ESXi 5.5u1 with VAAI enabled
        Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
        Reviewed by: Tony Nguyen <tony.nguyen@nexenta.com>
NEX-3023 Panics and hangs when using write_same and compare_and_write
Review by: Bayard Bell <bayard.bell@nexenta.com>
Review by: Rick McNeal <rick.mcneal@nexenta.com>
Review by: Jean McCormack <jean.mccormack@nexenta.com>
Approved by: Jean McCormack <jean.mccormack@nexenta.com>
Related bug: NEX-2723 Kernel panic in xfer_completion code for write_same (0x93) and compare_and_write (0x89)
NEX-2178 Multi-block transfers on memory constrained systems for write_same (0x93) and compare_and_write (0x89) cause memory corruption
NEX-2105 assertion failed: (scmd->flags & SBD_SCSI_CMD_TRANS_DATA) && scmd->trans_data != NULL, file: ../../common/io/comstar/lu/stmf_sbd/sbd_scsi.c, line: 2447
SUP-698  Appliance is regularly crashing with a kernel memory allocator, duplicate free: buffer freed
NEX-2105 assertion failed: (scmd->flags & SBD_SCSI_CMD_TRANS_DATA) && scmd->trans_data != NULL, file:
NEX-1965 Page fault at netbios_first_level_name_decode+0xbb
Support simultaneous compare_and_write operations for VAAI
Bug IDs SUP-505
                SUP-1768
                SUP-1928
Code Reviewers:
        Sarah Jelinek
        Jeffry Molanus
        Albert Lee
        Harold Shaw
OS-69 Open source VAAI
8226 nza-kernel needs to be buildable by itself
Re #6790 backspace should perform delete on console
VAAI (XXX ATS support for COMSTAR, YYY Block-copy support for COMSTAR)
        
@@ -19,11 +19,11 @@
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  *
- * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #ifndef _SBD_IMPL_H
 #define _SBD_IMPL_H
 
@@ -34,10 +34,15 @@
 struct register_lu_cmd;
 struct modify_lu_cmd;
 struct sbd_lu_attr;
 struct sbd_it_data;
 
+#define ATOMIC8_GET(val) (              \
+                        (atomic_add_8_nv(&(val), 0)))
+#define ATOMIC32_GET(val) (             \
+                        (atomic_add_32_nv(&(val), 0)))
+
 /*
  * sms endianess
  */
 #define SMS_BIG_ENDIAN                  0x00
 #define SMS_LITTLE_ENDIAN               0xFF
@@ -204,20 +209,40 @@
         uint32_t        trans_data_len; /* Length of transient data buf */
         uint64_t        addr;           /* current */
         uint32_t        len;            /* len left */
         uint32_t        current_ro;     /* running relative offset */
         uint8_t         *trans_data;    /* Any transient data */
+        ats_state_t     *ats_state;
+        uint32_t        rsvd;
 } sbd_cmd_t;
 
 /*
  * flags for sbd_cmd
+ *
+ * SBD_SCSI_CMD_ACTIVE means that a command is running.  This is the time
+ *      between the function sbd_new_task is called and either the command
+ *      completion is sent (stmf_scsilib_send_status) or an abort is
+ *      issued
+ *
+ * SBD_SCSI_CMD_ABORT_REQUESTED is when a command is being aborted.  It may
+ *      be set prior to the task being dispatched or anywhere in the process
+ *      of the command.
+ *
+ * SBD_SCSI_CMD_XFER_FAIL is set when a command data buffer transfer was
+ *      errored.  Usually it leads to an abort.
+ *
+ * SBD_SCSI_CMD_SYNC_WRITE synchronous write being done.
+ *
+ * SBD_SCSI_CMD_TRANS_DATA means that a buffer has been allocated to
+ *      be used for the transfer of data.
  */
 #define SBD_SCSI_CMD_ACTIVE             0x01
 #define SBD_SCSI_CMD_ABORT_REQUESTED    0x02
 #define SBD_SCSI_CMD_XFER_FAIL          0x04
 #define SBD_SCSI_CMD_SYNC_WRITE         0x08
 #define SBD_SCSI_CMD_TRANS_DATA         0x10
+#define SBD_SCSI_CMD_ATS_RELATED        0x20
 
 /*
  * cmd types
  */
 #define SBD_CMD_SCSI_READ       0x01
@@ -298,14 +323,17 @@
 void sbd_dbuf_xfer_done(struct scsi_task *task, struct stmf_data_buf *dbuf);
 void sbd_send_status_done(struct scsi_task *task);
 void sbd_task_free(struct scsi_task *task);
 stmf_status_t sbd_abort(struct stmf_lu *lu, int abort_cmd, void *arg,
                                                         uint32_t flags);
+void sbd_task_poll(struct scsi_task *task);
 void sbd_dbuf_free(struct scsi_task *task, struct stmf_data_buf *dbuf);
 void sbd_ctl(struct stmf_lu *lu, int cmd, void *arg);
 stmf_status_t sbd_info(uint32_t cmd, stmf_lu_t *lu, void *arg,
                                 uint8_t *buf, uint32_t *bufsizep);
+uint8_t sbd_get_lbasize_shift(stmf_lu_t *lu);
+int sbd_is_valid_lu(stmf_lu_t *lu);
 
 #ifdef  __cplusplus
 }
 #endif