Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/mount.h
Show First 20 Lines • Show All 1,085 Lines • ▼ Show 20 Lines | |||||
}) | }) | ||||
#define vfs_op_thread_enter_crit(mp, _mpcpu) ({ \ | #define vfs_op_thread_enter_crit(mp, _mpcpu) ({ \ | ||||
bool _retval_crit = true; \ | bool _retval_crit = true; \ | ||||
MPASS(curthread->td_critnest > 0); \ | MPASS(curthread->td_critnest > 0); \ | ||||
_mpcpu = vfs_mount_pcpu(mp); \ | _mpcpu = vfs_mount_pcpu(mp); \ | ||||
MPASS(mpcpu->mntp_thread_in_ops == 0); \ | MPASS(mpcpu->mntp_thread_in_ops == 0); \ | ||||
_mpcpu->mntp_thread_in_ops = 1; \ | _mpcpu->mntp_thread_in_ops = 1; \ | ||||
__compiler_membar(); \ | atomic_interrupt_fence(); \ | ||||
if (__predict_false(mp->mnt_vfs_ops > 0)) { \ | if (__predict_false(mp->mnt_vfs_ops > 0)) { \ | ||||
vfs_op_thread_exit_crit(mp, _mpcpu); \ | vfs_op_thread_exit_crit(mp, _mpcpu); \ | ||||
_retval_crit = false; \ | _retval_crit = false; \ | ||||
} \ | } \ | ||||
_retval_crit; \ | _retval_crit; \ | ||||
}) | }) | ||||
#define vfs_op_thread_enter(mp, _mpcpu) ({ \ | #define vfs_op_thread_enter(mp, _mpcpu) ({ \ | ||||
bool _retval; \ | bool _retval; \ | ||||
critical_enter(); \ | critical_enter(); \ | ||||
_retval = vfs_op_thread_enter_crit(mp, _mpcpu); \ | _retval = vfs_op_thread_enter_crit(mp, _mpcpu); \ | ||||
if (__predict_false(!_retval)) \ | if (__predict_false(!_retval)) \ | ||||
critical_exit(); \ | critical_exit(); \ | ||||
_retval; \ | _retval; \ | ||||
}) | }) | ||||
#define vfs_op_thread_exit_crit(mp, _mpcpu) do { \ | #define vfs_op_thread_exit_crit(mp, _mpcpu) do { \ | ||||
MPASS(_mpcpu == vfs_mount_pcpu(mp)); \ | MPASS(_mpcpu == vfs_mount_pcpu(mp)); \ | ||||
MPASS(_mpcpu->mntp_thread_in_ops == 1); \ | MPASS(_mpcpu->mntp_thread_in_ops == 1); \ | ||||
__compiler_membar(); \ | atomic_interrupt_fence(); \ | ||||
_mpcpu->mntp_thread_in_ops = 0; \ | _mpcpu->mntp_thread_in_ops = 0; \ | ||||
} while (0) | } while (0) | ||||
#define vfs_op_thread_exit(mp, _mpcpu) do { \ | #define vfs_op_thread_exit(mp, _mpcpu) do { \ | ||||
vfs_op_thread_exit_crit(mp, _mpcpu); \ | vfs_op_thread_exit_crit(mp, _mpcpu); \ | ||||
critical_exit(); \ | critical_exit(); \ | ||||
} while (0) | } while (0) | ||||
▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines |