- error = vn_rdwr(UIO_WRITE, *vpp, target, strlen(target), (off_t)0,
- UIO_SYSSPACE, IO_NODELOCKED, cnp->cn_cred, (int *)0,
- (struct proc *)0);
- vput(*vpp);
+ vp = *vpp;
+ len = strlen(ap->a_target);
+ if (len < vp->v_mount->mnt_maxsymlinklen) {
+ ip = VTOI(vp);
+ bcopy(ap->a_target, (char *)ip->i_shortlink, len);
+ ip->i_size = len;
+ ip->i_flag |= IUPD|ICHG;
+ } else
+ error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
+ UIO_SYSSPACE, IO_NODELOCKED, ap->a_cnp->cn_cred, (int *)0,
+ (struct proc *)0);
+ vput(vp);