Changeset View
Changeset View
Standalone View
Standalone View
head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
Show First 20 Lines • Show All 7,229 Lines • ▼ Show 20 Lines | zfs_do_bookmark(int argc, char **argv) | ||||
nvl = fnvlist_alloc(); | nvl = fnvlist_alloc(); | ||||
fnvlist_add_string(nvl, argv[1], snapname); | fnvlist_add_string(nvl, argv[1], snapname); | ||||
ret = lzc_bookmark(nvl, NULL); | ret = lzc_bookmark(nvl, NULL); | ||||
fnvlist_free(nvl); | fnvlist_free(nvl); | ||||
if (ret != 0) { | if (ret != 0) { | ||||
const char *err_msg; | const char *err_msg = NULL; | ||||
char errbuf[1024]; | char errbuf[1024]; | ||||
(void) snprintf(errbuf, sizeof (errbuf), | (void) snprintf(errbuf, sizeof (errbuf), | ||||
dgettext(TEXT_DOMAIN, | dgettext(TEXT_DOMAIN, | ||||
"cannot create bookmark '%s'"), argv[1]); | "cannot create bookmark '%s'"), argv[1]); | ||||
switch (ret) { | switch (ret) { | ||||
case EXDEV: | case EXDEV: | ||||
err_msg = "bookmark is in a different pool"; | err_msg = "bookmark is in a different pool"; | ||||
break; | break; | ||||
case EEXIST: | case EEXIST: | ||||
err_msg = "bookmark exists"; | err_msg = "bookmark exists"; | ||||
break; | break; | ||||
case EINVAL: | case EINVAL: | ||||
err_msg = "invalid argument"; | err_msg = "invalid argument"; | ||||
break; | break; | ||||
case ENOTSUP: | case ENOTSUP: | ||||
err_msg = "bookmark feature not enabled"; | err_msg = "bookmark feature not enabled"; | ||||
break; | break; | ||||
case ENOSPC: | case ENOSPC: | ||||
err_msg = "out of space"; | err_msg = "out of space"; | ||||
break; | break; | ||||
default: | default: | ||||
err_msg = "unknown error"; | (void) zfs_standard_error(g_zfs, ret, errbuf); | ||||
break; | break; | ||||
} | } | ||||
if (err_msg != NULL) { | |||||
(void) fprintf(stderr, "%s: %s\n", errbuf, | (void) fprintf(stderr, "%s: %s\n", errbuf, | ||||
dgettext(TEXT_DOMAIN, err_msg)); | dgettext(TEXT_DOMAIN, err_msg)); | ||||
} | } | ||||
} | |||||
return (ret != 0); | return (ret != 0); | ||||
usage: | usage: | ||||
usage(B_FALSE); | usage(B_FALSE); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
static int | static int | ||||
zfs_do_channel_program(int argc, char **argv) | zfs_do_channel_program(int argc, char **argv) | ||||
{ | { | ||||
int ret, fd; | int ret, fd; | ||||
char c; | char c; | ||||
char *progbuf, *filename, *poolname; | char *progbuf, *filename, *poolname; | ||||
size_t progsize, progread; | size_t progsize, progread; | ||||
nvlist_t *outnvl; | nvlist_t *outnvl = NULL; | ||||
uint64_t instrlimit = ZCP_DEFAULT_INSTRLIMIT; | uint64_t instrlimit = ZCP_DEFAULT_INSTRLIMIT; | ||||
uint64_t memlimit = ZCP_DEFAULT_MEMLIMIT; | uint64_t memlimit = ZCP_DEFAULT_MEMLIMIT; | ||||
boolean_t sync_flag = B_TRUE, json_output = B_FALSE; | boolean_t sync_flag = B_TRUE, json_output = B_FALSE; | ||||
zpool_handle_t *zhp; | zpool_handle_t *zhp; | ||||
/* check options */ | /* check options */ | ||||
while (-1 != | while (-1 != | ||||
(c = getopt(argc, argv, "jnt:(instr-limit)m:(memory-limit)"))) { | (c = getopt(argc, argv, "jnt:(instr-limit)m:(memory-limit)"))) { | ||||
▲ Show 20 Lines • Show All 123 Lines • ▼ Show 20 Lines | zfs_do_channel_program(int argc, char **argv) | ||||
if (ret != 0) { | if (ret != 0) { | ||||
/* | /* | ||||
* On error, report the error message handed back by lua if one | * On error, report the error message handed back by lua if one | ||||
* exists. Otherwise, generate an appropriate error message, | * exists. Otherwise, generate an appropriate error message, | ||||
* falling back on strerror() for an unexpected return code. | * falling back on strerror() for an unexpected return code. | ||||
*/ | */ | ||||
char *errstring = NULL; | char *errstring = NULL; | ||||
if (nvlist_exists(outnvl, ZCP_RET_ERROR)) { | const char *msg = gettext("Channel program execution failed"); | ||||
if (outnvl != NULL && nvlist_exists(outnvl, ZCP_RET_ERROR)) { | |||||
(void) nvlist_lookup_string(outnvl, | (void) nvlist_lookup_string(outnvl, | ||||
ZCP_RET_ERROR, &errstring); | ZCP_RET_ERROR, &errstring); | ||||
if (errstring == NULL) | if (errstring == NULL) | ||||
errstring = strerror(ret); | errstring = strerror(ret); | ||||
} else { | } else { | ||||
switch (ret) { | switch (ret) { | ||||
case EINVAL: | case EINVAL: | ||||
errstring = | errstring = | ||||
Show All 12 Lines | |||||
#endif | #endif | ||||
errstring = "Timed out."; | errstring = "Timed out."; | ||||
break; | break; | ||||
case EPERM: | case EPERM: | ||||
errstring = "Permission denied. Channel " | errstring = "Permission denied. Channel " | ||||
"programs must be run as root."; | "programs must be run as root."; | ||||
break; | break; | ||||
default: | default: | ||||
errstring = strerror(ret); | (void) zfs_standard_error(g_zfs, ret, msg); | ||||
} | } | ||||
} | } | ||||
(void) fprintf(stderr, | if (errstring != NULL) | ||||
gettext("Channel program execution failed:\n%s\n"), | (void) fprintf(stderr, "%s:\n%s\n", msg, errstring); | ||||
errstring); | |||||
} else { | } else { | ||||
if (json_output) { | if (json_output) { | ||||
(void) nvlist_print_json(stdout, outnvl); | (void) nvlist_print_json(stdout, outnvl); | ||||
} else if (nvlist_empty(outnvl)) { | } else if (nvlist_empty(outnvl)) { | ||||
(void) fprintf(stdout, gettext("Channel program fully " | (void) fprintf(stdout, gettext("Channel program fully " | ||||
"executed and did not produce output.\n")); | "executed and did not produce output.\n")); | ||||
} else { | } else { | ||||
(void) fprintf(stdout, gettext("Channel program fully " | (void) fprintf(stdout, gettext("Channel program fully " | ||||
▲ Show 20 Lines • Show All 125 Lines • Show Last 20 Lines |