git: ab8d25880ebc - main - libnv: Allow use in non-sleepable contexts

Kristof Provost kp at FreeBSD.org
Wed Apr 7 15:03:35 UTC 2021


The branch main has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=ab8d25880ebc9ddca1ae6af938680036349edf3f

commit ab8d25880ebc9ddca1ae6af938680036349edf3f
Author:     Kristof Provost <kp at FreeBSD.org>
AuthorDate: 2021-03-25 12:59:14 +0000
Commit:     Kristof Provost <kp at FreeBSD.org>
CommitDate: 2021-04-07 13:54:10 +0000

    libnv: Allow use in non-sleepable contexts
    
    44c125c4cebc2fd87c6260b90eddae11201f5232 switched the nvlist allocations
    to be M_WAITOK, but this precludes the use in non-sleepable contexts.
    (E.g. with a nonsleepable lock held).
    
    All callers for these allocation functions already cope with memory
    alloation failures, so there's no reason to allow sleeping during
    allocations.
    
    Reviewed by:    melifaro, oshogbo
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29556
---
 sys/contrib/libnv/nv_impl.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/sys/contrib/libnv/nv_impl.h b/sys/contrib/libnv/nv_impl.h
index 14f2fb8f2c11..1875c739beee 100644
--- a/sys/contrib/libnv/nv_impl.h
+++ b/sys/contrib/libnv/nv_impl.h
@@ -52,13 +52,13 @@ typedef struct nvpair nvpair_t;
 #define	NV_FLAG_IN_ARRAY		0x100
 
 #ifdef _KERNEL
-#define	nv_malloc(size)			malloc((size), M_NVLIST, M_WAITOK)
+#define	nv_malloc(size)			malloc((size), M_NVLIST, M_NOWAIT)
 #define	nv_calloc(n, size)		mallocarray((n), (size), M_NVLIST, \
-					    M_WAITOK | M_ZERO)
+					    M_NOWAIT | M_ZERO)
 #define	nv_realloc(buf, size)		realloc((buf), (size), M_NVLIST, \
-					    M_WAITOK)
+					    M_NOWAIT)
 #define	nv_free(buf)			free((buf), M_NVLIST)
-#define	nv_strdup(buf)			strdup((buf), M_NVLIST)
+#define	nv_strdup(buf)			strdup_flags((buf), M_NVLIST, M_NOWAIT)
 #define	nv_vasprintf(ptr, ...)		vasprintf(ptr, M_NVLIST, __VA_ARGS__)
 
 #define	ERRNO_SET(var)			do { } while (0)


More information about the dev-commits-src-all mailing list