| 2895 | } |
| 2896 | |
| 2897 | int |
| 2898 | vn_getcwd(char *buf, char **retbuf, size_t *buflen) |
| 2899 | { |
| 2900 | struct pwd *pwd; |
| 2901 | int error; |
| 2902 | |
| 2903 | vfs_smr_enter(); |
| 2904 | pwd = pwd_get_smr(); |
| 2905 | error = vn_fullpath_any_smr(pwd->pwd_cdir, pwd->pwd_rdir, buf, retbuf, |
| 2906 | buflen, 0); |
| 2907 | VFS_SMR_ASSERT_NOT_ENTERED(); |
| 2908 | if (error < 0) { |
| 2909 | pwd = pwd_hold(curthread); |
| 2910 | error = vn_fullpath_any(pwd->pwd_cdir, pwd->pwd_rdir, buf, |
| 2911 | retbuf, buflen); |
| 2912 | pwd_drop(pwd); |
| 2913 | } |
| 2914 | |
| 2915 | #ifdef KTRACE |
| 2916 | if (KTRPOINT(curthread, KTR_NAMEI) && error == 0) |
| 2917 | ktrnamei(*retbuf); |
| 2918 | #endif |
| 2919 | return (error); |
| 2920 | } |
| 2921 | |
| 2922 | static int |
| 2923 | kern___realpathat(struct thread *td, int fd, const char *path, char *buf, |
no test coverage detected