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

*** 20,37 **** */ /* * Copyright (c) 1982, 2010, Oracle and/or its affiliates. All rights reserved. * ! * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright 2012 DEY Storage Systems, Inc. All rights reserved. */ #ifndef _SYS_DKIO_H #define _SYS_DKIO_H #include <sys/dklabel.h> /* Needed for NDKMAP define */ #ifdef __cplusplus extern "C" { #endif --- 20,38 ---- */ /* * Copyright (c) 1982, 2010, Oracle and/or its affiliates. All rights reserved. * ! * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright 2012 DEY Storage Systems, Inc. All rights reserved. */ #ifndef _SYS_DKIO_H #define _SYS_DKIO_H #include <sys/dklabel.h> /* Needed for NDKMAP define */ + #include <sys/int_limits.h> /* Needed for UINT16_MAX */ #ifdef __cplusplus extern "C" { #endif
*** 521,542 **** #define FW_TYPE_TEMP 0x0 /* temporary use */ #define FW_TYPE_PERM 0x1 /* permanent use */ /* * ioctl to free space (e.g. SCSI UNMAP) off a disk. */ #define DKIOCFREE (DKIOC|50) - typedef struct dkioc_free_s { - uint32_t df_flags; - uint32_t df_reserved; /* For easy 64-bit alignment below... */ - diskaddr_t df_start; - diskaddr_t df_length; - } dkioc_free_t; - #define DF_WAIT_SYNC 0x00000001 /* Wait for full write-out of free. */ #ifdef __cplusplus } #endif #endif /* _SYS_DKIO_H */ --- 522,558 ---- #define FW_TYPE_TEMP 0x0 /* temporary use */ #define FW_TYPE_PERM 0x1 /* permanent use */ /* * ioctl to free space (e.g. SCSI UNMAP) off a disk. + * Pass a dkioc_free_list_t containing a list of extents to be freed. */ #define DKIOCFREE (DKIOC|50) #define DF_WAIT_SYNC 0x00000001 /* Wait for full write-out of free. */ + typedef struct dkioc_free_list_ext_s { + uint64_t dfle_start; + uint64_t dfle_length; + } dkioc_free_list_ext_t; + typedef struct dkioc_free_list_s { + uint64_t dfl_flags; + uint64_t dfl_num_exts; + int64_t dfl_offset; + + /* + * N.B. this is only an internal debugging API! This is only called + * from debug builds of sd for pre-release checking. Remove before GA! + */ + void (*dfl_ck_func)(uint64_t, uint64_t, void *); + void *dfl_ck_arg; + + dkioc_free_list_ext_t dfl_exts[1]; + } dkioc_free_list_t; + #define DFL_SZ(num_exts) \ + (sizeof (dkioc_free_list_t) + (num_exts - 1) * 16) + #ifdef __cplusplus } #endif #endif /* _SYS_DKIO_H */