Changeset View
Changeset View
Standalone View
Standalone View
sys/ufs/ufs/ufs_vnops.c
Show First 20 Lines • Show All 2,305 Lines • ▼ Show 20 Lines | ufs_symlink(ap) | ||||
error = ufs_makeinode(IFLNK | ap->a_vap->va_mode, ap->a_dvp, | error = ufs_makeinode(IFLNK | ap->a_vap->va_mode, ap->a_dvp, | ||||
vpp, ap->a_cnp, "ufs_symlink"); | vpp, ap->a_cnp, "ufs_symlink"); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
vp = *vpp; | vp = *vpp; | ||||
len = strlen(ap->a_target); | len = strlen(ap->a_target); | ||||
if (len < VFSTOUFS(vp->v_mount)->um_maxsymlinklen) { | if (len < VFSTOUFS(vp->v_mount)->um_maxsymlinklen) { | ||||
ip = VTOI(vp); | ip = VTOI(vp); | ||||
bcopy(ap->a_target, SHORTLINK(ip), len); | bcopy(ap->a_target, DIP(ip, i_shortlink), len); | ||||
ip->i_size = len; | ip->i_size = len; | ||||
DIP_SET(ip, i_size, len); | DIP_SET(ip, i_size, len); | ||||
UFS_INODE_SET_FLAG(ip, IN_SIZEMOD | IN_CHANGE | IN_UPDATE); | UFS_INODE_SET_FLAG(ip, IN_SIZEMOD | IN_CHANGE | IN_UPDATE); | ||||
error = UFS_UPDATE(vp, 0); | error = UFS_UPDATE(vp, 0); | ||||
} else | } else | ||||
error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target), | error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target), | ||||
len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, | len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK, | ||||
ap->a_cnp->cn_cred, NOCRED, NULL, NULL); | ap->a_cnp->cn_cred, NOCRED, NULL, NULL); | ||||
▲ Show 20 Lines • Show All 153 Lines • ▼ Show 20 Lines | ufs_readlink(ap) | ||||
} */ *ap; | } */ *ap; | ||||
{ | { | ||||
struct vnode *vp = ap->a_vp; | struct vnode *vp = ap->a_vp; | ||||
struct inode *ip = VTOI(vp); | struct inode *ip = VTOI(vp); | ||||
doff_t isize; | doff_t isize; | ||||
isize = ip->i_size; | isize = ip->i_size; | ||||
if (isize < VFSTOUFS(vp->v_mount)->um_maxsymlinklen) | if (isize < VFSTOUFS(vp->v_mount)->um_maxsymlinklen) | ||||
return (uiomove(SHORTLINK(ip), isize, ap->a_uio)); | return (uiomove(DIP(ip, i_shortlink), isize, ap->a_uio)); | ||||
return (VOP_READ(vp, ap->a_uio, 0, ap->a_cred)); | return (VOP_READ(vp, ap->a_uio, 0, ap->a_cred)); | ||||
} | } | ||||
/* | /* | ||||
* Calculate the logical to physical mapping if not done already, | * Calculate the logical to physical mapping if not done already, | ||||
* then call the device strategy routine. | * then call the device strategy routine. | ||||
* | * | ||||
* In order to be able to swap to a file, the ufs_bmaparray() operation may not | * In order to be able to swap to a file, the ufs_bmaparray() operation may not | ||||
▲ Show 20 Lines • Show All 526 Lines • Show Last 20 Lines |