]> granicus.if.org Git - zfs/commitdiff
Register correct handlers for nvlist_{dup,pack,unpack}
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 19 Dec 2013 22:30:11 +0000 (14:30 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 20 Dec 2013 21:52:28 +0000 (13:52 -0800)
This change is related to commit 81eaf15 which ensured the correct
allocation handlers were installed for nvlist_alloc().  The nvlist
functions nvlist_dup(), nvlist_pack(), and nvlist_unpack() suffer
from the same issue and have been updated accordingly.

Signed-off-by: Ned Bass <bass6@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #1937

module/nvpair/nvpair.c

index ff85d0251487b8b00b77875f6e0bef5aa430918f..550356c58d7205ddd66583e0f2b407b4dd229cf9 100644 (file)
@@ -262,32 +262,30 @@ nvlist_nvflag(nvlist_t *nvl)
        return (nvl->nvl_nvflag);
 }
 
-/*
- * nvlist_alloc - Allocate nvlist.
- */
-/*ARGSUSED1*/
-int
-nvlist_alloc(nvlist_t **nvlp, uint_t nvflag, int kmflag)
+static nv_alloc_t *
+nvlist_nv_alloc(int kmflag)
 {
-       nv_alloc_t *nva = nv_alloc_nosleep;
-
 #if defined(_KERNEL) && !defined(_BOOT)
        switch (kmflag) {
        case KM_SLEEP:
-               nva = nv_alloc_sleep;
-               break;
+               return (nv_alloc_sleep);
        case KM_PUSHPAGE:
-               nva = nv_alloc_pushpage;
-               break;
-       case KM_NOSLEEP:
-               nva = nv_alloc_nosleep;
-               break;
+               return (nv_alloc_pushpage);
        default:
-               return (EINVAL);
+               return (nv_alloc_nosleep);
        }
-#endif
+#else
+       return (nv_alloc_nosleep);
+#endif /* _KERNEL && !_BOOT */
+}
 
-       return (nvlist_xalloc(nvlp, nvflag, nva));
+/*
+ * nvlist_alloc - Allocate nvlist.
+ */
+int
+nvlist_alloc(nvlist_t **nvlp, uint_t nvflag, int kmflag)
+{
+       return (nvlist_xalloc(nvlp, nvflag, nvlist_nv_alloc(kmflag)));
 }
 
 int
@@ -614,16 +612,10 @@ nvlist_contains_nvp(nvlist_t *nvl, nvpair_t *nvp)
 /*
  * Make a copy of nvlist
  */
-/*ARGSUSED1*/
 int
 nvlist_dup(nvlist_t *nvl, nvlist_t **nvlp, int kmflag)
 {
-#if defined(_KERNEL) && !defined(_BOOT)
-       return (nvlist_xdup(nvl, nvlp,
-           (kmflag == KM_SLEEP ? nv_alloc_sleep : nv_alloc_nosleep)));
-#else
-       return (nvlist_xdup(nvl, nvlp, nv_alloc_nosleep));
-#endif
+       return (nvlist_xdup(nvl, nvlp, nvlist_nv_alloc(kmflag)));
 }
 
 int
@@ -2352,17 +2344,12 @@ nvlist_size(nvlist_t *nvl, size_t *size, int encoding)
 /*
  * Pack nvlist into contiguous memory
  */
-/*ARGSUSED1*/
 int
 nvlist_pack(nvlist_t *nvl, char **bufp, size_t *buflen, int encoding,
     int kmflag)
 {
-#if defined(_KERNEL) && !defined(_BOOT)
        return (nvlist_xpack(nvl, bufp, buflen, encoding,
-           (kmflag == KM_SLEEP ? nv_alloc_sleep : nv_alloc_nosleep)));
-#else
-       return (nvlist_xpack(nvl, bufp, buflen, encoding, nv_alloc_nosleep));
-#endif
+           nvlist_nv_alloc(kmflag)));
 }
 
 int
@@ -2415,16 +2402,10 @@ nvlist_xpack(nvlist_t *nvl, char **bufp, size_t *buflen, int encoding,
 /*
  * Unpack buf into an nvlist_t
  */
-/*ARGSUSED1*/
 int
 nvlist_unpack(char *buf, size_t buflen, nvlist_t **nvlp, int kmflag)
 {
-#if defined(_KERNEL) && !defined(_BOOT)
-       return (nvlist_xunpack(buf, buflen, nvlp,
-           (kmflag == KM_SLEEP ? nv_alloc_sleep : nv_alloc_nosleep)));
-#else
-       return (nvlist_xunpack(buf, buflen, nvlp, nv_alloc_nosleep));
-#endif
+       return (nvlist_xunpack(buf, buflen, nvlp, nvlist_nv_alloc(kmflag)));
 }
 
 int