Changeset View
Changeset View
Standalone View
Standalone View
head/sys/ufs/ffs/ffs_alloc.c
Show First 20 Lines • Show All 1,131 Lines • ▼ Show 20 Lines | retry: | ||||
} else { | } else { | ||||
if (fs->fs_contigdirs[cg] > 0) | if (fs->fs_contigdirs[cg] > 0) | ||||
fs->fs_contigdirs[cg]--; | fs->fs_contigdirs[cg]--; | ||||
} | } | ||||
ino = (ino_t)ffs_hashalloc(pip, cg, ipref, mode, 0, | ino = (ino_t)ffs_hashalloc(pip, cg, ipref, mode, 0, | ||||
(allocfcn_t *)ffs_nodealloccg); | (allocfcn_t *)ffs_nodealloccg); | ||||
if (ino == 0) | if (ino == 0) | ||||
goto noinodes; | goto noinodes; | ||||
error = ffs_vget(pvp->v_mount, ino, LK_EXCLUSIVE, vpp); | |||||
/* | |||||
* Get rid of the cached old vnode, force allocation of a new vnode | |||||
* for this inode. | |||||
*/ | |||||
error = ffs_vgetf(pvp->v_mount, ino, LK_EXCLUSIVE, vpp, FFSV_REPLACE); | |||||
if (error) { | if (error) { | ||||
error1 = ffs_vgetf(pvp->v_mount, ino, LK_EXCLUSIVE, vpp, | error1 = ffs_vgetf(pvp->v_mount, ino, LK_EXCLUSIVE, vpp, | ||||
FFSV_FORCEINSMQ); | FFSV_FORCEINSMQ | FFSV_REPLACE); | ||||
ffs_vfree(pvp, ino, mode); | ffs_vfree(pvp, ino, mode); | ||||
if (error1 == 0) { | if (error1 == 0) { | ||||
ip = VTOI(*vpp); | ip = VTOI(*vpp); | ||||
if (ip->i_mode) | if (ip->i_mode) | ||||
goto dup_alloc; | goto dup_alloc; | ||||
ip->i_flag |= IN_MODIFIED; | ip->i_flag |= IN_MODIFIED; | ||||
vput(*vpp); | vput(*vpp); | ||||
} | } | ||||
Show All 19 Lines | dup_alloc: | ||||
while (ip->i_gen == 0 || ++ip->i_gen == 0) | while (ip->i_gen == 0 || ++ip->i_gen == 0) | ||||
ip->i_gen = arc4random(); | ip->i_gen = arc4random(); | ||||
DIP_SET(ip, i_gen, ip->i_gen); | DIP_SET(ip, i_gen, ip->i_gen); | ||||
if (fs->fs_magic == FS_UFS2_MAGIC) { | if (fs->fs_magic == FS_UFS2_MAGIC) { | ||||
vfs_timestamp(&ts); | vfs_timestamp(&ts); | ||||
ip->i_din2->di_birthtime = ts.tv_sec; | ip->i_din2->di_birthtime = ts.tv_sec; | ||||
ip->i_din2->di_birthnsec = ts.tv_nsec; | ip->i_din2->di_birthnsec = ts.tv_nsec; | ||||
} | } | ||||
ufs_prepare_reclaim(*vpp); | |||||
ip->i_flag = 0; | ip->i_flag = 0; | ||||
(*vpp)->v_vflag = 0; | (*vpp)->v_vflag = 0; | ||||
(*vpp)->v_type = VNON; | (*vpp)->v_type = VNON; | ||||
if (fs->fs_magic == FS_UFS2_MAGIC) { | if (fs->fs_magic == FS_UFS2_MAGIC) { | ||||
(*vpp)->v_op = &ffs_vnodeops2; | (*vpp)->v_op = &ffs_vnodeops2; | ||||
ip->i_flag |= IN_UFS2; | ip->i_flag |= IN_UFS2; | ||||
} else { | } else { | ||||
(*vpp)->v_op = &ffs_vnodeops1; | (*vpp)->v_op = &ffs_vnodeops1; | ||||
▲ Show 20 Lines • Show All 2,447 Lines • Show Last 20 Lines |