Print this page
NEX-4592 race condition allows FC initiator LUN offline hotplug handler deadlocks with FMA faulting leaf vdev between LDI and ZFS
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>


  45  * Applications and drivers using these interfaces will fail
  46  * to run on future releases.
  47  */
  48 
  49 /*
  50  * LDI hash definitions
  51  */
  52 #define LH_HASH_SZ      32
  53 #define LI_HASH_SZ      32
  54 
  55 /*
  56  * Obsolete LDI event interfaces are available for now but are deprecated and a
  57  * warning will be issued to consumers.
  58  */
  59 #define LDI_OBSOLETE_EVENT      1
  60 
  61 /*
  62  * Flag for LDI handle's lh_flags field
  63  */
  64 #define LH_FLAGS_NOTIFY 0x0001          /* invoked in context of a notify */


  65 
  66 /*
  67  * LDI initialization function
  68  */
  69 void ldi_init(void);
  70 
  71 /*
  72  * LDI streams linking interfaces
  73  */
  74 extern int ldi_mlink_lh(vnode_t *, int, intptr_t, cred_t *, int *);
  75 extern void ldi_mlink_fp(struct stdata *, struct file *, int, int);
  76 extern void ldi_munlink_fp(struct stdata *, struct file *, int);
  77 
  78 /*
  79  * LDI module identifier
  80  */
  81 struct ldi_ident {
  82         /* protected by ldi_ident_hash_lock */
  83         struct ldi_ident                *li_next;
  84         uint_t                          li_ref;




  45  * Applications and drivers using these interfaces will fail
  46  * to run on future releases.
  47  */
  48 
  49 /*
  50  * LDI hash definitions
  51  */
  52 #define LH_HASH_SZ      32
  53 #define LI_HASH_SZ      32
  54 
  55 /*
  56  * Obsolete LDI event interfaces are available for now but are deprecated and a
  57  * warning will be issued to consumers.
  58  */
  59 #define LDI_OBSOLETE_EVENT      1
  60 
  61 /*
  62  * Flag for LDI handle's lh_flags field
  63  */
  64 #define LH_FLAGS_NOTIFY 0x0001          /* invoked in context of a notify */
  65 #define LH_FLAGS_NOTIFY_NOTIFY 0x0002   /* processed once in notify loop */
  66 #define LH_FLAGS_NOTIFY_FINALIZE 0x0004 /* processed once in finalize loop */
  67 
  68 /*
  69  * LDI initialization function
  70  */
  71 void ldi_init(void);
  72 
  73 /*
  74  * LDI streams linking interfaces
  75  */
  76 extern int ldi_mlink_lh(vnode_t *, int, intptr_t, cred_t *, int *);
  77 extern void ldi_mlink_fp(struct stdata *, struct file *, int, int);
  78 extern void ldi_munlink_fp(struct stdata *, struct file *, int);
  79 
  80 /*
  81  * LDI module identifier
  82  */
  83 struct ldi_ident {
  84         /* protected by ldi_ident_hash_lock */
  85         struct ldi_ident                *li_next;
  86         uint_t                          li_ref;