Now
MAIN commitmail json YAML
src/share/man/man9/vnode.9@1.60
/
diff
/
nxr@1.60
src/sys/kern/vfs_mount.c@1.27 / diff / nxr@1.27
src/sys/kern/vfs_vnode.c@1.33 / diff / nxr@1.33
src/sys/sys/mount.h@1.212 / diff / nxr@1.212
src/sys/sys/param.h@1.443 / diff / nxr@1.443
src/sys/sys/vnode.h@1.244 / diff / nxr@1.244
src/sys/ufs/ext2fs/ext2fs_vfsops.c@1.177 / diff / nxr@1.177
src/sys/ufs/ffs/ffs_vfsops.c@1.293 / diff / nxr@1.293
src/sys/ufs/lfs/lfs_syscalls.c@1.151 / diff / nxr@1.151
src/sys/kern/vfs_mount.c@1.27 / diff / nxr@1.27
src/sys/kern/vfs_vnode.c@1.33 / diff / nxr@1.33
src/sys/sys/mount.h@1.212 / diff / nxr@1.212
src/sys/sys/param.h@1.443 / diff / nxr@1.443
src/sys/sys/vnode.h@1.244 / diff / nxr@1.244
src/sys/ufs/ext2fs/ext2fs_vfsops.c@1.177 / diff / nxr@1.177
src/sys/ufs/ffs/ffs_vfsops.c@1.293 / diff / nxr@1.293
src/sys/ufs/lfs/lfs_syscalls.c@1.151 / diff / nxr@1.151
Current support for iterating over mnt_vnodelist is rudimentary. Every
caller has to care about list and vnode mutexes, reference count being zero,
intermediate vnode states like VI_CLEAN, VI_XLOCK, VI_MARKER and so on.
Add an interface to iterate over a vnode list:
void vfs_vnode_iterator_init(struct mount *mp, struct vnode_iterator **marker)
void vfs_vnode_iterator_destroy(struct vnode_iterator *marker)
bool vfs_vnode_iterator_next(struct vnode_iterator *marker, struct vnode **vpp)
vfs_vnode_iterator_next() returns either "false / *vpp == NULL" when done
or "true / *vpp != NULL" to return the next referenced vnode from the list.
To make vrecycle() work in this environment change it to
bool vrecycle(struct vnode *vp)
where "vp" is a referenced vnode to be destroyed if this is the last reference.
Discussed on tech-kern.
Welcome to 6.99.34
caller has to care about list and vnode mutexes, reference count being zero,
intermediate vnode states like VI_CLEAN, VI_XLOCK, VI_MARKER and so on.
Add an interface to iterate over a vnode list:
void vfs_vnode_iterator_init(struct mount *mp, struct vnode_iterator **marker)
void vfs_vnode_iterator_destroy(struct vnode_iterator *marker)
bool vfs_vnode_iterator_next(struct vnode_iterator *marker, struct vnode **vpp)
vfs_vnode_iterator_next() returns either "false / *vpp == NULL" when done
or "true / *vpp != NULL" to return the next referenced vnode from the list.
To make vrecycle() work in this environment change it to
bool vrecycle(struct vnode *vp)
where "vp" is a referenced vnode to be destroyed if this is the last reference.
Discussed on tech-kern.
Welcome to 6.99.34