diff options
| author | Alex Richardson <arichardson@FreeBSD.org> | 2026-05-07 04:21:50 +0000 |
|---|---|---|
| committer | Alex Richardson <arichardson@FreeBSD.org> | 2026-05-07 04:23:04 +0000 |
| commit | 1ed2ef42e01771f5d8ca9be61e07dcf0fd47feba (patch) | |
| tree | b7a0bded25cf50028a592331be44f335bdbdfd73 | |
| parent | 3fe5069ce2bf5b2702f3be6531ce6a05c584e64d (diff) | |
p9fs: Move UMA zone initialization to VFS module lifecycle
Previously, the UMA zones required for 9P requests (p9fs_buf_zone,
p9fs_req_zone, etc.) were initialized and destroyed in the
virtio_p9fs transport module. This caused issues when unloading
the core p9fs module.
This change moves p9_init_zones() and p9_destroy_zones() into
p9fs_init() and p9fs_uninit() inside p9fs_vfsops.c so that they
are correctly bound to the VFS filesystem module lifecycle via
vfs_modevent, aligning p9fs with standard FreeBSD VFS semantics.
Found while fixing https://github.com/CTSRD-CHERI/cheribsd/issues/2617.
Reviewed by: kib
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D56492
| -rw-r--r-- | sys/dev/virtio/p9fs/virtio_p9fs.c | 3 | ||||
| -rw-r--r-- | sys/fs/p9fs/p9fs_vfsops.c | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/virtio/p9fs/virtio_p9fs.c b/sys/dev/virtio/p9fs/virtio_p9fs.c index f76b135c042d..19a32fea458e 100644 --- a/sys/dev/virtio/p9fs/virtio_p9fs.c +++ b/sys/dev/virtio/p9fs/virtio_p9fs.c @@ -471,14 +471,12 @@ vt9p_modevent(module_t mod, int type, void *unused) switch (type) { case MOD_LOAD: if (loaded++ == 0) { - p9_init_zones(); p9_register_trans(&vt9p_trans); } break; case MOD_UNLOAD: if (--loaded == 0) { p9_unregister_trans(&vt9p_trans); - p9_destroy_zones(); } break; case MOD_SHUTDOWN: @@ -487,6 +485,7 @@ vt9p_modevent(module_t mod, int type, void *unused) error = EOPNOTSUPP; break; } + return (error); } diff --git a/sys/fs/p9fs/p9fs_vfsops.c b/sys/fs/p9fs/p9fs_vfsops.c index 0e09c58e57b6..a0f0a5a4e494 100644 --- a/sys/fs/p9fs/p9fs_vfsops.c +++ b/sys/fs/p9fs/p9fs_vfsops.c @@ -119,6 +119,8 @@ p9fs_init(struct vfsconf *vfsp) p9fs_io_buffer_zone = uma_zcreate("p9fs io_buffer zone", P9FS_MTU, NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); + p9_init_zones(); + return (0); } @@ -127,6 +129,8 @@ static int p9fs_uninit(struct vfsconf *vfsp) { + p9_destroy_zones(); + uma_zdestroy(p9fs_node_zone); uma_zdestroy(p9fs_io_buffer_zone); uma_zdestroy(p9fs_getattr_zone); |
