Skip to content

Commit 9d08874

Browse files
rob-wingbehlendorf
authored andcommitted
FreeBSD: add knlist_init_sx() for exclusive locks
This will be used to implement kqfilter support for zvol cdevs. Reviewed-by: Ryan Moeller <[email protected]> Reviewed-by: Alexander Motin <[email protected]> Signed-off-by: Rob Wing <[email protected]> Closes #13773
1 parent 11df48a commit 9d08874

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3+
*
4+
* Copyright (c) 2022 Rob Wing
5+
*
6+
* Redistribution and use in source and binary forms, with or without
7+
* modification, are permitted provided that the following conditions
8+
* are met:
9+
* 1. Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
* 2. Redistributions in binary form must reproduce the above copyright
12+
* notice, this list of conditions and the following disclaimer in the
13+
* documentation and/or other materials provided with the distribution.
14+
*
15+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
16+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
19+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25+
* SUCH DAMAGE.
26+
*/
27+
28+
#ifndef _ZFS_FREEBSD_EVENT_H
29+
#define _ZFS_FREEBSD_EVENT_H
30+
31+
#ifdef _KERNEL
32+
33+
void knlist_init_sx(struct knlist *knl, struct sx *lock);
34+
35+
#endif /* !_KERNEL */
36+
37+
#endif /* !_ZFS_FREEBSD_EVENT_H */

module/Makefile.bsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ SRCS+= abd_os.c \
172172
arc_os.c \
173173
crypto_os.c \
174174
dmu_os.c \
175+
event_os.c \
175176
hkdf.c \
176177
kmod_core.c \
177178
spa_os.c \

module/os/freebsd/zfs/event_os.c

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3+
*
4+
* Copyright (c) 2022 Rob Wing
5+
*
6+
* Redistribution and use in source and binary forms, with or without
7+
* modification, are permitted provided that the following conditions
8+
* are met:
9+
* 1. Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
* 2. Redistributions in binary form must reproduce the above copyright
12+
* notice, this list of conditions and the following disclaimer in the
13+
* documentation and/or other materials provided with the distribution.
14+
*
15+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
16+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
19+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25+
* SUCH DAMAGE.
26+
*/
27+
28+
#include <sys/param.h>
29+
#include <sys/lock.h>
30+
#include <sys/sx.h>
31+
#include <sys/event.h>
32+
33+
#include <sys/freebsd_event.h>
34+
35+
static void
36+
knlist_sx_xlock(void *arg)
37+
{
38+
39+
sx_xlock((struct sx *)arg);
40+
}
41+
42+
static void
43+
knlist_sx_xunlock(void *arg)
44+
{
45+
46+
sx_xunlock((struct sx *)arg);
47+
}
48+
49+
static void
50+
knlist_sx_assert_lock(void *arg, int what)
51+
{
52+
53+
if (what == LA_LOCKED)
54+
sx_assert((struct sx *)arg, SX_LOCKED);
55+
else
56+
sx_assert((struct sx *)arg, SX_UNLOCKED);
57+
}
58+
59+
void
60+
knlist_init_sx(struct knlist *knl, struct sx *lock)
61+
{
62+
63+
knlist_init(knl, lock, knlist_sx_xlock, knlist_sx_xunlock,
64+
knlist_sx_assert_lock);
65+
}

0 commit comments

Comments
 (0)