Print this page
NEX-3508 CLONE - Port NEX-2946 Add UNMAP/TRIM functionality to ZFS and illumos
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
Conflicts:
    usr/src/uts/common/io/scsi/targets/sd.c
    usr/src/uts/common/sys/scsi/targets/sddef.h
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-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
re #7936 rb3706 Support for COMSTAR/OEM
re #8002 rb3706 Allow setting iSCSI vendor ID via stmf_sbd.conf
re #11454 rb3750 Fix inconsistent vid/pid in stmf
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)

@@ -16,24 +16,27 @@
  * fields enclosed by brackets "[]" replaced with your own identifying
  * information: Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
  */
+
 /*
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- *
- * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
  */
 
 #ifndef _STMF_SBD_H
 #define _STMF_SBD_H
 
+#include <sys/dkio.h>
+
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
 typedef stmf_status_t   sbd_status_t;
+#include "ats_copy_mgr.h"
 extern char sbd_vendor_id[];
 extern char sbd_product_id[];
 extern char sbd_revision[];
 extern char *sbd_mgmt_url;
 extern uint16_t sbd_mgmt_url_alloc_size;

@@ -52,10 +55,11 @@
 #define SBD_NOT_FOUND           (SBD_FAILURE | STMF_FSC(5))
 #define SBD_ALLOC_FAILURE       (SBD_FAILURE | STMF_FSC(6))
 #define SBD_FILEIO_FAILURE      (SBD_FAILURE | STMF_FSC(7))
 #define SBD_IO_PAST_EOF         (SBD_FAILURE | STMF_FSC(8))
 #define SBD_BUSY                (SBD_FAILURE | STMF_FSC(9))
+#define SBD_COMPARE_FAILED      (SBD_FAILURE | STMF_FSC(10))
 
 #define SHARED_META_DATA_SIZE   65536
 #define SBD_META_OFFSET         4096
 #define SBD_MIN_LU_SIZE         (1024 * 1024)
 

@@ -242,10 +246,11 @@
         uint64_t        sl_max_xfer_len;        /* used for zvols */
 
         struct sbd_it_data      *sl_it_list;
         struct sbd_pgr          *sl_pgr;
         uint64_t        sl_rs_owner_session_id;
+        list_t          sl_ats_io_list;
 } sbd_lu_t;
 
 /*
  * sl_flags
  */

@@ -298,12 +303,17 @@
     uint32_t *bufsizep);
 sbd_status_t sbd_write_lu_info(sbd_lu_t *sl);
 sbd_status_t sbd_flush_data_cache(sbd_lu_t *sl, int fsync_done);
 sbd_status_t sbd_wcd_set(int wcd, sbd_lu_t *sl);
 void sbd_wcd_get(int *wcd, sbd_lu_t *sl);
-int sbd_unmap(sbd_lu_t *, uint64_t, uint64_t);
+int sbd_unmap(sbd_lu_t *sl, dkioc_free_list_t *dfl);
 
+void sbd_handle_short_write_transfers(scsi_task_t *, stmf_data_buf_t *,
+    uint32_t);
+void sbd_handle_short_read_transfers(scsi_task_t *, stmf_data_buf_t *,
+    uint8_t *, uint32_t, uint32_t);
+
 #ifdef  __cplusplus
 }
 #endif
 
 #endif /* _STMF_SBD_H */