Print this page
NEX-3672 IDM module panics target when PDU has AHS length between 17 and 49
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>

*** 20,30 **** */ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright 2014 Nexenta Systems, Inc. All rights reserved. */ #ifndef _IDM_IMPL_H_ #define _IDM_IMPL_H_ --- 20,30 ---- */ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright 2014-2015 Nexenta Systems, Inc. All rights reserved. */ #ifndef _IDM_IMPL_H_ #define _IDM_IMPL_H_
*** 407,419 **** #define IDM_PDU_SET_STATSN 0x00000010 #define IDM_PDU_ADVANCE_STATSN 0x00000020 #define OSD_EXT_CDB_AHSLEN (200 - 15) #define BIDI_AHS_LENGTH 5 #define IDM_SORX_CACHE_AHSLEN \ ! (((OSD_EXT_CDB_AHSLEN + 3) + \ ! (BIDI_AHS_LENGTH + 3)) / sizeof (uint32_t)) #define IDM_SORX_CACHE_HDRLEN (sizeof (iscsi_hdr_t) + IDM_SORX_CACHE_AHSLEN) /* * ID pool */ --- 407,429 ---- #define IDM_PDU_SET_STATSN 0x00000010 #define IDM_PDU_ADVANCE_STATSN 0x00000020 #define OSD_EXT_CDB_AHSLEN (200 - 15) #define BIDI_AHS_LENGTH 5 + /* + * Additional Header Segment (AHS) + * AHS is only valid for SCSI Requests and contains SCSI CDB information + * which doesn't fit in the standard 16 byte area of the PDU. Commonly + * this only holds true for OSD device commands. + * + * IDM_SORX_CACHE_ASHLEN is the amount of memory which is preallocated in bytes. + * When used in the header the AHS length is stored as the number of 4-byte + * words; so IDM_SORX_WIRE_ASHLEN is IDM_SORX_CACHE_ASHLEN in words. + */ #define IDM_SORX_CACHE_AHSLEN \ ! ((OSD_EXT_CDB_AHSLEN + 3) + (BIDI_AHS_LENGTH + 3)) ! #define IDM_SORX_WIRE_AHSLEN (IDM_SORX_CACHE_AHSLEN / sizeof (uint32_t)) #define IDM_SORX_CACHE_HDRLEN (sizeof (iscsi_hdr_t) + IDM_SORX_CACHE_AHSLEN) /* * ID pool */