| 6496 | } |
| 6497 | |
| 6498 | int |
| 6499 | vfs_cache_root(struct mount *mp, int flags, struct vnode **vpp) |
| 6500 | { |
| 6501 | struct mount_pcpu *mpcpu; |
| 6502 | struct vnode *vp; |
| 6503 | int error; |
| 6504 | |
| 6505 | if (!vfs_op_thread_enter(mp, mpcpu)) |
| 6506 | return (vfs_cache_root_fallback(mp, flags, vpp)); |
| 6507 | vp = atomic_load_ptr(&mp->mnt_rootvnode); |
| 6508 | if (vp == NULL || VN_IS_DOOMED(vp)) { |
| 6509 | vfs_op_thread_exit(mp, mpcpu); |
| 6510 | return (vfs_cache_root_fallback(mp, flags, vpp)); |
| 6511 | } |
| 6512 | vrefact(vp); |
| 6513 | vfs_op_thread_exit(mp, mpcpu); |
| 6514 | error = vn_lock(vp, flags); |
| 6515 | if (error != 0) { |
| 6516 | vrele(vp); |
| 6517 | return (vfs_cache_root_fallback(mp, flags, vpp)); |
| 6518 | } |
| 6519 | *vpp = vp; |
| 6520 | return (0); |
| 6521 | } |
| 6522 | |
| 6523 | struct vnode * |
| 6524 | vfs_cache_root_clear(struct mount *mp) |
nothing calls this directly
no test coverage detected