Print this page
NEX-9755 Race in libshare can cause zfs set sharenfs to fail
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>


  68         char   *(*sa_legacy_format)(sa_group_t, int);
  69         int     (*sa_set_proto_prop)(sa_property_t);    /* set a property */
  70         sa_protocol_properties_t (*sa_get_proto_set)(); /* get properties */
  71         char   *(*sa_get_proto_status)();
  72         char   *(*sa_space_alias)(char *);
  73         int     (*sa_update_legacy)(sa_share_t);
  74         int     (*sa_delete_legacy)(sa_share_t);
  75         int     (*sa_change_notify)(sa_share_t);
  76         int     (*sa_enable_resource)(sa_resource_t);
  77         int     (*sa_disable_resource)(sa_resource_t);
  78         uint64_t (*sa_features)(void);
  79         int     (*sa_get_transient_shares)(sa_handle_t); /* add transients */
  80         int     (*sa_notify_resource)(sa_resource_t);
  81         int     (*sa_rename_resource)(sa_handle_t, sa_resource_t, char *);
  82         int     (*sa_run_command)(int, int, char **); /* proto specific */
  83         int     (*sa_command_help)();
  84         int     (*sa_delete_proto_section)(char *);
  85 };
  86 
  87 struct sa_proto_handle {

  88         int                     sa_num_proto;
  89         char                    **sa_proto;
  90         struct sa_plugin_ops    **sa_ops;
  91 };
  92 
  93 typedef struct propertylist {
  94         struct propertylist     *pl_next;
  95         int                     pl_type;
  96         union propval {
  97             sa_optionset_t      pl_optionset;
  98             sa_security_t       pl_security;
  99             void                *pl_void;
 100         }                       pl_value;
 101 } property_list_t;
 102 
 103 /* internal version of sa_handle_t */
 104 typedef struct sa_handle_impl {
 105         uint64_t        flags;
 106         scfutilhandle_t *scfhandle;
 107         libzfs_handle_t *zfs_libhandle;




  68         char   *(*sa_legacy_format)(sa_group_t, int);
  69         int     (*sa_set_proto_prop)(sa_property_t);    /* set a property */
  70         sa_protocol_properties_t (*sa_get_proto_set)(); /* get properties */
  71         char   *(*sa_get_proto_status)();
  72         char   *(*sa_space_alias)(char *);
  73         int     (*sa_update_legacy)(sa_share_t);
  74         int     (*sa_delete_legacy)(sa_share_t);
  75         int     (*sa_change_notify)(sa_share_t);
  76         int     (*sa_enable_resource)(sa_resource_t);
  77         int     (*sa_disable_resource)(sa_resource_t);
  78         uint64_t (*sa_features)(void);
  79         int     (*sa_get_transient_shares)(sa_handle_t); /* add transients */
  80         int     (*sa_notify_resource)(sa_resource_t);
  81         int     (*sa_rename_resource)(sa_handle_t, sa_resource_t, char *);
  82         int     (*sa_run_command)(int, int, char **); /* proto specific */
  83         int     (*sa_command_help)();
  84         int     (*sa_delete_proto_section)(char *);
  85 };
  86 
  87 struct sa_proto_handle {
  88         int                     sa_ref_count;
  89         int                     sa_num_proto;
  90         char                    **sa_proto;
  91         struct sa_plugin_ops    **sa_ops;
  92 };
  93 
  94 typedef struct propertylist {
  95         struct propertylist     *pl_next;
  96         int                     pl_type;
  97         union propval {
  98             sa_optionset_t      pl_optionset;
  99             sa_security_t       pl_security;
 100             void                *pl_void;
 101         }                       pl_value;
 102 } property_list_t;
 103 
 104 /* internal version of sa_handle_t */
 105 typedef struct sa_handle_impl {
 106         uint64_t        flags;
 107         scfutilhandle_t *scfhandle;
 108         libzfs_handle_t *zfs_libhandle;