/*
 struct vnop_strategy_args {
 struct vnodeop_desc *a_desc;
 struct buf          *a_bp;
 };
 */
FUSE_VNOP_EXPORT
int
fuse_biglock_vnop_strategy(struct vnop_strategy_args *ap)
{
#if 1
	/* Now trying out a locked version of strategy. We need to hold a lock
	 * as the underlying layers expect it. */
	locked_vnop(buf_vnode(ap->a_bp), fuse_vnop_strategy, ap);
#else
	/* VNOP_STRATEGY in kpi_vfs.c is completely unprotected. This seems very
	 * dangerous, but I don't want to do anything that kpi_vfs.c doesn't do
	 * without being able to motivate why. */
	return fuse_vnop_strategy(ap);
#endif
}
Exemple #2
0
/*
 struct vnop_strategy_args {
 struct vnodeop_desc *a_desc;
 struct buf          *a_bp;
 };
 */
FUSE_VNOP_EXPORT
int
fuse_biglock_vnop_strategy(struct vnop_strategy_args *ap)
{
#if 1
	/* Now trying out a locked version of strategy. We need to hold a lock
	 * as the underlying layers expect it. */
	locked_vnop(buf_vnode(ap->a_bp), fuse_vnop_strategy, ap);
#else
    /* WARNING: nodelock and biglock are released and reacquired in
     *          fuse_internal_strategy. Calling fuse_vnop_strategy directly
     *          will result in a kernel panic! */

	/* VNOP_STRATEGY in kpi_vfs.c is completely unprotected. This seems very
	 * dangerous, but I don't want to do anything that kpi_vfs.c doesn't do
	 * without being able to motivate why. */
	return fuse_vnop_strategy(ap);
#endif
}