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,29 ****
* CDDL HEADER END
*/
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*
! * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
#ifndef _SBD_IMPL_H
#define _SBD_IMPL_H
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*
! * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
#ifndef _SBD_IMPL_H
#define _SBD_IMPL_H
*** 34,43 ****
--- 34,48 ----
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,223 ****
--- 209,248 ----
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,311 ****
--- 323,339 ----
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