From 3d398a481d962dd3a54c1bfbd0cc51d406da6cd8 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 5 Dec 2008 12:32:24 -0800 Subject: [PATCH] Refresh linux-have-xdr --- .topdeps | 2 +- .topmsg | 9 ++------- zfs/lib/libnvpair/include/sys/nvpair.h | 2 ++ zfs/lib/libnvpair/nvpair.c | 8 ++++++++ zfs/lib/libzfs/libzfs_sendrecv.c | 5 +++++ zfs/lib/libzpool/spa.c | 10 +++++++--- zfs/lib/libzpool/spa_config.c | 9 ++++++--- zfs/lib/libzpool/spa_history.c | 8 ++++++++ zfs/lib/libzpool/vdev_label.c | 8 ++++++++ 9 files changed, 47 insertions(+), 14 deletions(-) diff --git a/.topdeps b/.topdeps index 7f16cbcdd5..736703fbec 100644 --- a/.topdeps +++ b/.topdeps @@ -1 +1 @@ -zfs-branch +linux-kernel-module diff --git a/.topmsg b/.topmsg index 82610d817e..cf23beb572 100644 --- a/.topmsg +++ b/.topmsg @@ -1,11 +1,6 @@ From: Brian Behlendorf -Subject: [PATCH] linux kernel module +Subject: [PATCH] linux have xdr -Setup linux kernel module support, this includes: -- zfs context for kernel/user -- kernel module build system integration -- kernel module macros -- kernel module symbol export -- kernel module options +Use XDR if HAVE_XDR defined Signed-off-by: Brian Behlendorf diff --git a/zfs/lib/libnvpair/include/sys/nvpair.h b/zfs/lib/libnvpair/include/sys/nvpair.h index 9e768541f2..bc7e0c3d9f 100644 --- a/zfs/lib/libnvpair/include/sys/nvpair.h +++ b/zfs/lib/libnvpair/include/sys/nvpair.h @@ -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 diff --git a/zfs/lib/libnvpair/nvpair.c b/zfs/lib/libnvpair/nvpair.c index 34d9259eea..d29112a4bd 100644 --- a/zfs/lib/libnvpair/nvpair.c +++ b/zfs/lib/libnvpair/nvpair.c @@ -33,7 +33,9 @@ #include #include #include +#ifdef HAVE_XDR #include +#endif /* HAVE_XDR */ #if defined(_KERNEL) && !defined(_BOOT) #include @@ -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) diff --git a/zfs/lib/libzfs/libzfs_sendrecv.c b/zfs/lib/libzfs/libzfs_sendrecv.c index 0e8efa0765..4043f7b682 100644 --- a/zfs/lib/libzfs/libzfs_sendrecv.c +++ b/zfs/lib/libzfs/libzfs_sendrecv.c @@ -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); diff --git a/zfs/lib/libzpool/spa.c b/zfs/lib/libzpool/spa.c index 942f967696..65e57104be 100644 --- a/zfs/lib/libzpool/spa.c +++ b/zfs/lib/libzpool/spa.c @@ -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); diff --git a/zfs/lib/libzpool/spa_config.c b/zfs/lib/libzpool/spa_config.c index 58e88f1efd..0881f57106 100644 --- a/zfs/lib/libzpool/spa_config.c +++ b/zfs/lib/libzpool/spa_config.c @@ -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 diff --git a/zfs/lib/libzpool/spa_history.c b/zfs/lib/libzpool/spa_history.c index f525edbbbf..db1441cebf 100644 --- a/zfs/lib/libzpool/spa_history.c +++ b/zfs/lib/libzpool/spa_history.c @@ -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) diff --git a/zfs/lib/libzpool/vdev_label.c b/zfs/lib/libzpool/vdev_label.c index 640ab79579..830114efb7 100644 --- a/zfs/lib/libzpool/vdev_label.c +++ b/zfs/lib/libzpool/vdev_label.c @@ -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),