Lines Matching defs:cnp

278 namei_cleanup_cnp(struct componentname *cnp)
281 uma_zfree(namei_zone, cnp->cn_pnbuf);
282 cnp->cn_pnbuf = NULL;
283 cnp->cn_nameptr = NULL;
289 struct componentname *cnp;
291 cnp = &ndp->ni_cnd;
295 NI_CAP_VIOLATION(ndp, cnp->cn_pnbuf);
299 while (*(cnp->cn_nameptr) == '/') {
300 cnp->cn_nameptr++;
311 struct componentname *cnp;
317 cnp = &ndp->ni_cnd;
338 if ((cnp->cn_flags & NOCAPCHECK) == 0) {
362 namei_setup_rootdir(ndp, cnp, pwd);
365 if (cnp->cn_pnbuf[0] == '/') {
376 if (cnp->cn_flags & AUDITVNODE1)
378 if (cnp->cn_flags & AUDITVNODE2)
384 (cnp->cn_pnbuf[0] != '\0' ||
385 (cnp->cn_flags & EMPTYPATH) == 0))
388 if (error == 0 && (cnp->cn_flags & RBENEATH) != 0) {
389 if (cnp->cn_pnbuf[0] == '/') {
401 if (cnp->cn_flags & AUDITVNODE1)
402 AUDIT_ARG_UPATH1_VP(td, ndp->ni_rootdir, *dpp, cnp->cn_pnbuf);
403 if (cnp->cn_flags & AUDITVNODE2)
404 AUDIT_ARG_UPATH2_VP(td, ndp->ni_rootdir, *dpp, cnp->cn_pnbuf);
420 SDT_PROBE4(vfs, namei, lookup, entry, *dpp, cnp->cn_pnbuf,
421 cnp->cn_flags, false);
429 struct componentname *cnp;
432 cnp = &ndp->ni_cnd;
438 cnp->cn_pnbuf = uma_zalloc(namei_zone, M_WAITOK);
440 error = copystr(ndp->ni_dirp, cnp->cn_pnbuf, MAXPATHLEN,
443 error = copyinstr(ndp->ni_dirp, cnp->cn_pnbuf, MAXPATHLEN,
453 struct componentname *cnp;
458 cnp = &ndp->ni_cnd;
459 MPASS(*cnp->cn_pnbuf == '\0');
460 MPASS((cnp->cn_flags & EMPTYPATH) != 0);
461 MPASS((cnp->cn_flags & (LOCKPARENT | WANTPARENT)) == 0);
475 if ((cnp->cn_flags & LOCKLEAF) != 0) {
476 VOP_LOCK(dp, (cnp->cn_flags & LOCKSHARED) != 0 ?
489 namei_cleanup_cnp(cnp);
499 struct componentname *cnp;
504 cnp = &ndp->ni_cnd;
512 if ((cnp->cn_flags & NOMACCHECK) == 0) {
521 cp = cnp->cn_pnbuf;
531 error = VOP_READLINK(ndp->ni_vp, &auio, cnp->cn_cred);
552 uma_zfree(namei_zone, cnp->cn_pnbuf);
553 cnp->cn_pnbuf = cp;
555 cnp->cn_pnbuf[linklen] = '\0';
585 struct componentname *cnp;
591 cnp = &ndp->ni_cnd;
601 if (cnp->cn_flags & FAILIFEXISTS) {
602 KASSERT(cnp->cn_nameiop == CREATE,
603 ("%s: FAILIFEXISTS passed for op %d", __func__, cnp->cn_nameiop));
607 KASSERT((cnp->cn_flags & (LOCKPARENT | LOCKLEAF)) == LOCKPARENT,
615 KASSERT(cnp->cn_cred && td->td_proc, ("namei: bad cred/proc"));
616 KASSERT((cnp->cn_flags & NAMEI_INTERNAL_FLAGS) == 0,
618 cnp->cn_flags & NAMEI_INTERNAL_FLAGS));
619 if (cnp->cn_flags & NOCACHE)
620 KASSERT(cnp->cn_nameiop != LOOKUP,
632 namei_cleanup_cnp(cnp);
638 cnp->cn_nameptr = cnp->cn_pnbuf;
642 ktrnamei(cnp->cn_pnbuf);
645 TSNAMEI(curthread->td_proc->p_pid, cnp->cn_pnbuf);
661 (cnp->cn_flags & ISRESTARTED) == 0)) {
662 namei_cleanup_cnp(cnp);
675 namei_cleanup_cnp(cnp);
678 cnp->cn_nameptr = cnp->cn_pnbuf;
683 if (*cnp->cn_pnbuf == '\0') {
684 if ((cnp->cn_flags & EMPTYPATH) != 0) {
687 namei_cleanup_cnp(cnp);
694 namei_cleanup_cnp(cnp);
709 (cnp->cn_flags & ISRESTARTED) == 0)) {
712 namei_cleanup_cnp(cnp);
722 if ((cnp->cn_flags & ISSYMLINK) == 0) {
738 cnp->cn_nameptr = cnp->cn_pnbuf;
739 if (*(cnp->cn_nameptr) == '/') {
745 cnp->cn_flags |= ISRESTARTED;
760 namei_cleanup_cnp(cnp);
820 struct componentname *cnp;
824 cnp = &ndp->ni_cnd;
826 cnp->cn_flags |= ISLASTCN;
829 if (needs_exclusive_leaf(mp, cnp->cn_flags)) {
830 cnp->cn_lkflags &= ~LK_SHARED;
831 cnp->cn_lkflags |= LK_EXCLUSIVE;
834 vn_lock(dp, enforce_lkflags(mp, cnp->cn_lkflags | LK_RETRY));
840 if (cnp->cn_nameiop != LOOKUP) {
849 cnp->cn_namelen = 0;
851 if (cnp->cn_flags & AUDITVNODE1)
853 else if (cnp->cn_flags & AUDITVNODE2)
856 if (!(cnp->cn_flags & (LOCKPARENT | LOCKLEAF)))
874 struct componentname *cnp __diagused;
876 cnp = &ndp->ni_cnd;
878 MPASS((cnp->cn_flags & ISSYMLINK) == 0);
893 struct componentname *cnp;
899 cnp = &ndp->ni_cnd;
912 crosslkflags = enforce_lkflags(mp, cnp->cn_lkflags);
1029 struct componentname *cnp = &ndp->ni_cnd;
1037 wantparent = cnp->cn_flags & (LOCKPARENT | WANTPARENT);
1038 KASSERT(cnp->cn_nameiop == LOOKUP || wantparent,
1050 docache = (cnp->cn_flags & NOCACHE) ^ NOCACHE;
1051 if (cnp->cn_nameiop == DELETE ||
1052 (wantparent && cnp->cn_nameiop != CREATE &&
1053 cnp->cn_nameiop != LOOKUP))
1055 rdonly = cnp->cn_flags & RDONLY;
1056 cnp->cn_flags &= ~ISSYMLINK;
1059 cnp->cn_lkflags = LK_SHARED;
1066 MPASS(cnp->cn_nameptr[0] != '/');
1072 if (__predict_false(cnp->cn_nameptr[0] == '\0')) {
1088 lastchar = &cnp->cn_nameptr[ndp->ni_pathlen - 2];
1090 while (lastchar >= cnp->cn_pnbuf) {
1098 cnp->cn_flags |= TRAILINGSLASH;
1106 enforce_lkflags(dp->v_mount, cnp->cn_lkflags | LK_RETRY));
1113 * cnp->cn_nameptr. It has to be freed with a call to NDFREE*.
1119 nulchar = &cnp->cn_nameptr[ndp->ni_pathlen - 1];
1122 cnp->cn_pnbuf));
1124 for (cp = cnp->cn_nameptr; *cp != '/'; cp++) {
1127 cnp->cn_nameptr));
1131 cnp->cn_namelen = cp - cnp->cn_nameptr;
1132 if (__predict_false(cnp->cn_namelen > NAME_MAX)) {
1137 ndp->ni_pathlen -= cnp->cn_namelen;
1146 cnp->cn_flags &= ~(ISDOTDOT|ISLASTCN);
1148 cnp->cn_flags |= MAKEENTRY;
1150 cnp->cn_flags &= ~MAKEENTRY;
1151 if (cnp->cn_namelen == 2 &&
1152 cnp->cn_nameptr[1] == '.' && cnp->cn_nameptr[0] == '.')
1153 cnp->cn_flags |= ISDOTDOT;
1155 cnp->cn_flags |= ISLASTCN;
1157 if (__predict_false(cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.' &&
1158 (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME))) {
1170 MPASS(cnp->cn_nameptr[0] != '\0');
1193 if (cnp->cn_flags & ISDOTDOT) {
1196 NI_CAP_VIOLATION(ndp, cnp->cn_pnbuf);
1202 if ((cnp->cn_flags & ISLASTCN) != 0 &&
1203 (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) {
1208 for (pr = cnp->cn_cred->cr_prison; pr != NULL;
1218 NI_CAP_VIOLATION(ndp, cnp->cn_pnbuf);
1225 (cnp->cn_flags & NOCROSSMOUNT) != 0)) {
1242 enforce_lkflags(dp->v_mount, cnp->cn_lkflags |
1257 error = mac_vnode_check_lookup(cnp->cn_cred, dp, cnp);
1268 if ((cnp->cn_flags & LOCKPARENT) && (cnp->cn_flags & ISLASTCN) &&
1279 if (needs_exclusive_leaf(dp->v_mount, cnp->cn_flags))
1280 cnp->cn_lkflags = LK_EXCLUSIVE;
1281 lkflags_save = cnp->cn_lkflags;
1282 cnp->cn_lkflags = enforce_lkflags(dp->v_mount, cnp->cn_lkflags);
1283 error = VOP_LOOKUP(dp, &ndp->ni_vp, cnp);
1284 cnp->cn_lkflags = lkflags_save;
1295 enforce_lkflags(dp->v_mount, cnp->cn_lkflags |
1322 if ((cnp->cn_flags & TRAILINGSLASH) &&
1323 !(cnp->cn_flags & WILLBEDIR)) {
1327 if ((cnp->cn_flags & LOCKPARENT) == 0)
1344 ((cnp->cn_flags & FOLLOW) || (cnp->cn_flags & TRAILINGSLASH) ||
1346 cnp->cn_flags |= ISSYMLINK;
1370 (cnp->cn_flags & NOCROSSMOUNT) == 0) {
1385 KASSERT((cnp->cn_flags & ISLASTCN) || *ndp->ni_next == '/',
1397 if (cnp->cn_flags & ISDOTDOT) {
1403 cnp->cn_nameptr = ndp->ni_next;
1404 while (*cnp->cn_nameptr == '/') {
1405 cnp->cn_nameptr++;
1418 if ((cnp->cn_flags & TRAILINGSLASH) && dp->v_type != VDIR) {
1426 (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) {
1436 } else if ((cnp->cn_flags & LOCKPARENT) == 0 && ndp->ni_dvp != dp) {
1441 if (cnp->cn_flags & AUDITVNODE1)
1443 else if (cnp->cn_flags & AUDITVNODE2)
1446 if ((cnp->cn_flags & LOCKLEAF) == 0)
1458 if (needs_exclusive_leaf(dp->v_mount, cnp->cn_flags) &&
1468 if ((cnp->cn_flags & ISDOTDOT) == 0)
1470 if ((cnp->cn_flags & (FAILIFEXISTS | ISSYMLINK)) == FAILIFEXISTS)
1494 vfs_relookup(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp,
1501 KASSERT(cnp->cn_flags & ISLASTCN,
1506 KASSERT((cnp->cn_flags & (LOCKPARENT | WANTPARENT)) != 0,
1508 rdonly = cnp->cn_flags & RDONLY;
1509 cnp->cn_flags &= ~ISSYMLINK;
1511 cnp->cn_lkflags = LK_EXCLUSIVE;
1517 * See a comment in vfs_lookup for cnp->cn_nameptr.
1522 if (cnp->cn_nameptr[0] == '\0') {
1527 KASSERT(cnp->cn_nameiop == LOOKUP, ("nameiop must be LOOKUP"));
1530 if (!(cnp->cn_flags & LOCKLEAF))
1539 if (cnp->cn_flags & ISDOTDOT)
1545 if ((error = VOP_LOOKUP(dp, vpp, cnp)) != 0) {
1560 if ((cnp->cn_flags & LOCKPARENT) == 0)
1576 (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) {
1587 if ((cnp->cn_flags & LOCKPARENT) == 0 && dvp != dp)
1592 KASSERT(dp->v_type != VLNK || !(cnp->cn_flags & FOLLOW),
1599 if ((cnp->cn_flags & LOCKLEAF) == 0)
1615 struct componentname *cnp;
1617 cnp = &ndp->ni_cnd;
1618 if (cnp->cn_pnbuf == NULL)