diff options
author | 2015-12-22 22:19:46 +0000 | |
---|---|---|
committer | 2015-12-22 22:19:46 +0000 | |
commit | cedcacc751f15cc660bd1fd4515dbf68c8f75e73 (patch) | |
tree | a54b5d16b77b0e4825f9a3f40541a3289b6e1eb8 | |
parent | Implement a bus_dma(9) abstraction on top of Grant Table API (diff) | |
download | wireguard-openbsd-cedcacc751f15cc660bd1fd4515dbf68c8f75e73.tar.xz wireguard-openbsd-cedcacc751f15cc660bd1fd4515dbf68c8f75e73.zip |
Make xs_setprop a bit more useful by removing property nodes
when NULL or zero length value was specified.
-rw-r--r-- | sys/dev/pv/xenstore.c | 22 | ||||
-rw-r--r-- | sys/dev/pv/xenvar.h | 3 |
2 files changed, 15 insertions, 10 deletions
diff --git a/sys/dev/pv/xenstore.c b/sys/dev/pv/xenstore.c index 45d1664be9d..fa749149f1d 100644 --- a/sys/dev/pv/xenstore.c +++ b/sys/dev/pv/xenstore.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xenstore.c,v 1.10 2015/12/22 22:16:53 mikeb Exp $ */ +/* $OpenBSD: xenstore.c,v 1.11 2015/12/22 22:19:46 mikeb Exp $ */ /* * Copyright (c) 2015 Mike Belopuhov @@ -699,6 +699,7 @@ xs_cmd(struct xs_transaction *xst, int cmd, const char *path, ov_cnt++; break; case XS_TCLOSE: + case XS_RM: case XS_WRITE: mode = WRITE; /* FALLTHROUGH */ @@ -719,7 +720,6 @@ xs_cmd(struct xs_transaction *xst, int cmd, const char *path, ov[ov_cnt].iov_base = (*iov)[i].iov_base; ov[ov_cnt].iov_len = (*iov)[i].iov_len; } - KASSERT(ov_cnt < nitems(ov)); } xsm = xs_get_msg(xs, !(xst->xst_flags & XST_POLL)); @@ -832,12 +832,16 @@ xs_setprop(struct xen_attach_args *xa, const char *property, char *value, if (cold) xst.xst_flags = XST_POLL; - iov.iov_base = value; - iov.iov_len = size; - iov_cnt = 1; + if (value && size > 0) { + iov.iov_base = value; + iov.iov_len = size; + iov_cnt = 1; - snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property); - if ((error = xs_cmd(&xst, XS_WRITE, path, &iovp, &iov_cnt)) != 0) - return (error); - return (0); + snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property); + error = xs_cmd(&xst, XS_WRITE, path, &iovp, &iov_cnt); + } else { + snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property); + error = xs_cmd(&xst, XS_RM, path, NULL, NULL); + } + return (error); } diff --git a/sys/dev/pv/xenvar.h b/sys/dev/pv/xenvar.h index 2d693d5eb07..0689ff6036c 100644 --- a/sys/dev/pv/xenvar.h +++ b/sys/dev/pv/xenvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: xenvar.h,v 1.16 2015/12/22 22:16:53 mikeb Exp $ */ +/* $OpenBSD: xenvar.h,v 1.17 2015/12/22 22:19:46 mikeb Exp $ */ /* * Copyright (c) 2015 Mike Belopuhov @@ -121,6 +121,7 @@ int xen_intr_unmask(xen_intr_handle_t); #define XS_TOPEN 0x06 #define XS_TCLOSE 0x07 #define XS_WRITE 0x0b +#define XS_RM 0x0d #define XS_ERROR 0x10 #define XS_MAX 0x16 |