| 2533 | } |
| 2534 | |
| 2535 | int |
| 2536 | vn_fill_kinfo_vnode(struct vnode *vp, struct kinfo_file *kif) |
| 2537 | { |
| 2538 | struct vattr va; |
| 2539 | char *fullpath, *freepath; |
| 2540 | int error; |
| 2541 | |
| 2542 | kif->kf_un.kf_file.kf_file_type = vntype_to_kinfo(vp->v_type); |
| 2543 | freepath = NULL; |
| 2544 | fullpath = "-"; |
| 2545 | error = vn_fullpath(vp, &fullpath, &freepath); |
| 2546 | if (error == 0) { |
| 2547 | strlcpy(kif->kf_path, fullpath, sizeof(kif->kf_path)); |
| 2548 | } |
| 2549 | if (freepath != NULL) |
| 2550 | free(freepath, M_TEMP); |
| 2551 | |
| 2552 | KFAIL_POINT_CODE(DEBUG_FP, fill_kinfo_vnode__random_path, |
| 2553 | vn_fill_junk(kif); |
| 2554 | ); |
| 2555 | |
| 2556 | /* |
| 2557 | * Retrieve vnode attributes. |
| 2558 | */ |
| 2559 | va.va_fsid = VNOVAL; |
| 2560 | va.va_rdev = NODEV; |
| 2561 | vn_lock(vp, LK_SHARED | LK_RETRY); |
| 2562 | error = VOP_GETATTR(vp, &va, curthread->td_ucred); |
| 2563 | VOP_UNLOCK(vp); |
| 2564 | if (error != 0) |
| 2565 | return (error); |
| 2566 | if (va.va_fsid != VNOVAL) |
| 2567 | kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; |
| 2568 | else |
| 2569 | kif->kf_un.kf_file.kf_file_fsid = |
| 2570 | vp->v_mount->mnt_stat.f_fsid.val[0]; |
| 2571 | kif->kf_un.kf_file.kf_file_fsid_freebsd11 = |
| 2572 | kif->kf_un.kf_file.kf_file_fsid; /* truncate */ |
| 2573 | kif->kf_un.kf_file.kf_file_fileid = va.va_fileid; |
| 2574 | kif->kf_un.kf_file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); |
| 2575 | kif->kf_un.kf_file.kf_file_size = va.va_size; |
| 2576 | kif->kf_un.kf_file.kf_file_rdev = va.va_rdev; |
| 2577 | kif->kf_un.kf_file.kf_file_rdev_freebsd11 = |
| 2578 | kif->kf_un.kf_file.kf_file_rdev; /* truncate */ |
| 2579 | return (0); |
| 2580 | } |
| 2581 | |
| 2582 | int |
| 2583 | vn_mmap(struct file *fp, vm_map_t map, vm_offset_t *addr, vm_size_t size, |
no test coverage detected