int zfs_share_iscsi(zfs_handle_t *zhp) { char shareopts[ZFS_MAXPROPLEN]; const char *dataset = zhp->zfs_name; libzfs_handle_t *hdl = zhp->zfs_hdl; /* * Return success if there are no share options. */ if (zfs_prop_get(zhp, ZFS_PROP_SHAREISCSI, shareopts, sizeof (shareopts), NULL, NULL, 0, B_FALSE) != 0 || strcmp(shareopts, "off") == 0) return (0); if (iscsitgt_zfs_share == NULL || iscsitgt_zfs_share(dataset) != 0) { int error = EZFS_SHAREISCSIFAILED; /* * If service isn't availabele and EPERM was * returned then use special error. */ if (iscsitgt_svc_online && errno == EPERM && (iscsitgt_svc_online() != 0)) error = EZFS_ISCSISVCUNAVAIL; return (zfs_error_fmt(hdl, error, dgettext(TEXT_DOMAIN, "cannot share '%s'"), dataset)); } return (0); }
boolean_t zfs_is_shared_iscsi(zfs_handle_t *zhp) { /* * If iscsi deamon isn't running then we aren't shared */ if (iscsitgt_svc_online && iscsitgt_svc_online() == 1) return (B_FALSE); else return (iscsitgt_zfs_is_shared != NULL && iscsitgt_zfs_is_shared(zhp->zfs_name) != 0); }