Merge commit 'refs/top-bases/linux-zfs-branch' into linux-zfs-branch
This commit is contained in:
commit
a60b52ed41
|
@ -100,7 +100,9 @@ typedef struct nvlist {
|
|||
|
||||
/* nvlist pack encoding */
|
||||
#define NV_ENCODE_NATIVE 0
|
||||
#if defined(HAVE_XDR)
|
||||
#define NV_ENCODE_XDR 1
|
||||
#endif
|
||||
|
||||
/* nvlist persistent unique name flags, stored in nvl_nvflags */
|
||||
#define NV_UNIQUE_NAME 0x1
|
||||
|
|
|
@ -33,7 +33,9 @@
|
|||
#include <sys/nvpair.h>
|
||||
#include <sys/nvpair_impl.h>
|
||||
#include <rpc/types.h>
|
||||
#ifdef HAVE_XDR
|
||||
#include <rpc/xdr.h>
|
||||
#endif /* HAVE_XDR */
|
||||
|
||||
#if defined(_KERNEL) && !defined(_BOOT)
|
||||
#include <sys/varargs.h>
|
||||
|
@ -2191,7 +2193,9 @@ nvs_embedded_nvl_array(nvstream_t *nvs, nvpair_t *nvp, size_t *size)
|
|||
}
|
||||
|
||||
static int nvs_native(nvstream_t *, nvlist_t *, char *, size_t *);
|
||||
#if defined(HAVE_XDR)
|
||||
static int nvs_xdr(nvstream_t *, nvlist_t *, char *, size_t *);
|
||||
#endif /* HAVE_XDR */
|
||||
|
||||
/*
|
||||
* Common routine for nvlist operations:
|
||||
|
@ -2268,9 +2272,11 @@ nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding,
|
|||
return (ENOTSUP);
|
||||
err = nvs_native(&nvs, nvl, buf, buflen);
|
||||
break;
|
||||
#if defined(HAVE_XDR)
|
||||
case NV_ENCODE_XDR:
|
||||
err = nvs_xdr(&nvs, nvl, buf, buflen);
|
||||
break;
|
||||
#endif /* HAVE_XDR */
|
||||
default:
|
||||
err = ENOTSUP;
|
||||
break;
|
||||
|
@ -2758,6 +2764,7 @@ nvs_native(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen)
|
|||
return (err);
|
||||
}
|
||||
|
||||
#if defined(HAVE_XDR)
|
||||
/*
|
||||
* XDR encoding functions
|
||||
*
|
||||
|
@ -3244,6 +3251,7 @@ nvs_xdr(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen)
|
|||
|
||||
return (err);
|
||||
}
|
||||
#endif /* HAVE_XDR */
|
||||
|
||||
#if defined(_KERNEL) && defined(HAVE_SPL)
|
||||
static int __init nvpair_init(void)
|
||||
|
|
|
@ -729,8 +729,13 @@ zfs_send(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap,
|
|||
if (err)
|
||||
return (err);
|
||||
VERIFY(0 == nvlist_add_nvlist(hdrnv, "fss", fss));
|
||||
#if defined(HAVE_XDR)
|
||||
err = nvlist_pack(hdrnv, &packbuf, &buflen,
|
||||
NV_ENCODE_XDR, 0);
|
||||
#else
|
||||
err = nvlist_pack(hdrnv, &packbuf, &buflen,
|
||||
NV_ENCODE_NATIVE, 0);
|
||||
#endif /* HAVE_XDR */
|
||||
nvlist_free(hdrnv);
|
||||
if (err) {
|
||||
fsavl_destroy(fsavl);
|
||||
|
|
|
@ -3669,9 +3669,14 @@ spa_sync_nvlist(spa_t *spa, uint64_t obj, nvlist_t *nv, dmu_tx_t *tx)
|
|||
char *packed = NULL;
|
||||
size_t bufsize;
|
||||
size_t nvsize = 0;
|
||||
int nv_encode = NV_ENCODE_NATIVE;
|
||||
dmu_buf_t *db;
|
||||
|
||||
VERIFY(nvlist_size(nv, &nvsize, NV_ENCODE_XDR) == 0);
|
||||
#if defined(HAVE_XDR)
|
||||
nv_encode = NV_ENCODE_XDR;
|
||||
#endif
|
||||
|
||||
VERIFY(nvlist_size(nv, &nvsize, nv_encode) == 0);
|
||||
|
||||
/*
|
||||
* Write full (SPA_CONFIG_BLOCKSIZE) blocks of configuration
|
||||
|
@ -3681,8 +3686,7 @@ spa_sync_nvlist(spa_t *spa, uint64_t obj, nvlist_t *nv, dmu_tx_t *tx)
|
|||
bufsize = P2ROUNDUP(nvsize, SPA_CONFIG_BLOCKSIZE);
|
||||
packed = kmem_alloc(bufsize, KM_SLEEP);
|
||||
|
||||
VERIFY(nvlist_pack(nv, &packed, &nvsize, NV_ENCODE_XDR,
|
||||
KM_SLEEP) == 0);
|
||||
VERIFY(nvlist_pack(nv, &packed, &nvsize, nv_encode, KM_SLEEP) == 0);
|
||||
bzero(packed + nvsize, bufsize - nvsize);
|
||||
|
||||
dmu_write(spa->spa_meta_objset, obj, 0, bufsize, packed, tx);
|
||||
|
|
|
@ -152,6 +152,7 @@ spa_config_write(spa_config_dirent_t *dp, nvlist_t *nvl)
|
|||
char *buf;
|
||||
vnode_t *vp;
|
||||
int oflags = FWRITE | FTRUNC | FCREAT | FOFFMAX;
|
||||
int nv_encode = NV_ENCODE_NATIVE;
|
||||
char *temp;
|
||||
|
||||
/*
|
||||
|
@ -165,13 +166,15 @@ spa_config_write(spa_config_dirent_t *dp, nvlist_t *nvl)
|
|||
/*
|
||||
* Pack the configuration into a buffer.
|
||||
*/
|
||||
VERIFY(nvlist_size(nvl, &buflen, NV_ENCODE_XDR) == 0);
|
||||
#if defined(HAVE_XDR)
|
||||
nv_encode = NV_ENCODE_XDR;
|
||||
#endif
|
||||
VERIFY(nvlist_size(nvl, &buflen, nv_encode) == 0);
|
||||
|
||||
buf = kmem_alloc(buflen, KM_SLEEP);
|
||||
temp = kmem_zalloc(MAXPATHLEN, KM_SLEEP);
|
||||
|
||||
VERIFY(nvlist_pack(nvl, &buf, &buflen, NV_ENCODE_XDR,
|
||||
KM_SLEEP) == 0);
|
||||
VERIFY(nvlist_pack(nvl, &buf, &buflen, nv_encode, KM_SLEEP) == 0);
|
||||
|
||||
/*
|
||||
* Write the configuration to disk. We need to do the traditional
|
||||
|
|
|
@ -258,11 +258,19 @@ spa_history_log_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
|
|||
history_str) == 0);
|
||||
}
|
||||
|
||||
#if defined(HAVE_XDR)
|
||||
VERIFY(nvlist_size(nvrecord, &reclen, NV_ENCODE_XDR) == 0);
|
||||
record_packed = kmem_alloc(reclen, KM_SLEEP);
|
||||
|
||||
VERIFY(nvlist_pack(nvrecord, &record_packed, &reclen,
|
||||
NV_ENCODE_XDR, KM_SLEEP) == 0);
|
||||
#else
|
||||
VERIFY(nvlist_size(nvrecord, &reclen, NV_ENCODE_NATIVE) == 0);
|
||||
record_packed = kmem_alloc(reclen, KM_SLEEP);
|
||||
|
||||
VERIFY(nvlist_pack(nvrecord, &record_packed, &reclen,
|
||||
NV_ENCODE_NATIVE, KM_SLEEP) == 0);
|
||||
#endif
|
||||
|
||||
mutex_enter(&spa->spa_history_lock);
|
||||
if (hap->ha_log_type == LOG_CMD_POOL_CREATE)
|
||||
|
|
|
@ -626,7 +626,11 @@ vdev_label_init(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason)
|
|||
buf = vp->vp_nvlist;
|
||||
buflen = sizeof (vp->vp_nvlist);
|
||||
|
||||
#ifdef HAVE_XDR
|
||||
error = nvlist_pack(label, &buf, &buflen, NV_ENCODE_XDR, KM_SLEEP);
|
||||
#else
|
||||
error = nvlist_pack(label, &buf, &buflen, NV_ENCODE_NATIVE, KM_SLEEP);
|
||||
#endif
|
||||
if (error != 0) {
|
||||
nvlist_free(label);
|
||||
zio_buf_free(vp, sizeof (vdev_phys_t));
|
||||
|
@ -930,7 +934,11 @@ vdev_label_sync(zio_t *zio, vdev_t *vd, int l, uint64_t txg, int flags)
|
|||
buf = vp->vp_nvlist;
|
||||
buflen = sizeof (vp->vp_nvlist);
|
||||
|
||||
#ifdef HAVE_XDR
|
||||
if (nvlist_pack(label, &buf, &buflen, NV_ENCODE_XDR, KM_SLEEP) == 0) {
|
||||
#else
|
||||
if (nvlist_pack(label, &buf, &buflen, NV_ENCODE_NATIVE, KM_SLEEP) == 0) {
|
||||
#endif
|
||||
for (; l < VDEV_LABELS; l += 2) {
|
||||
vdev_label_write(zio, vd, l, vp,
|
||||
offsetof(vdev_label_t, vl_vdev_phys),
|
||||
|
|
Loading…
Reference in New Issue